/**************************************************\
 * Validatig answers and generating new questions *
\**************************************************/

// OK button onPress function - calls Verify & starts the timer
function ok()
{
	verify()
	if(!timerstarted)
	{
		dStarted=new Date()
		tmr=setTimeout("TimerProc()",1000)
		timergoing=1
		timerstarted=1
	}
}

// Verify the answer
function verify()
{
	if(TextAnswer1!="")									// Text answer
		for(i in TextAnswer1.split("|OR|"))
			if(TextAnswer1.split("|OR|")[i].toUpperCase().replace(/ /g,"")==GetElement("textin1").value.toUpperCase().replace(/ /g,""))
				{goodA();return}
	if(NumAnswer1>=0)									// Number answer
		if(parseInt(NumAnswer1,10)==parseInt(GetElement("textin1").value,10))
			{goodA();return}
	if(TypeAnswerOp==0)									// One type=enough
		if(GetElement("typein1").selectedIndex==TypeAnswer1||GetElement("typein1").selectedIndex==TypeAnswer2)
			{goodA();return}
	if(TypeAnswerOp==1)									// Both types
		if(TypeNo(toNum(PKMN))==1){// PKMN has 1 type
			if((GetElement("typein1").selectedIndex==TypeAnswer1)&&GetElement("typein2").selectedIndex<1)
				{goodA();return}
			if((GetElement("typein2").selectedIndex==TypeAnswer1)&&GetElement("typein1").selectedIndex<1)
				{goodA();return}
		}else// PKMN has 2 types
		{// Swap of types is allowed
			if(GetElement("typein1").selectedIndex==TypeAnswer1 && GetElement("typein2").selectedIndex==TypeAnswer2)
				{goodA();return}
			if(GetElement("typein2").selectedIndex==TypeAnswer1 && GetElement("typein1").selectedIndex==TypeAnswer2)
				{goodA();return}
		}
	if(BoolAnswer1!=-2)
	{
		if(((BoolAnswer1)?"T":"F")==((GetElement("boolin1").checked)?"T":"F"))
			{goodA();return}
	}
	if(TypeAnswerOp==2)									// One type only
	{
		if(GetElement("typein1").selectedIndex==TypeAnswer1)
			{goodA();return}
	}
	if(VerAnswer1!=-2)									// One type only
	{
		if(GetElement("verin1").selectedIndex==VerAnswer1)
			{goodA();return}
	}
	sorry()
}

// You are the weakest link. Goodbye.
function sorry()
{
	if(debug=="yes")
	{
		if(bonusNo>0)bonusNo-=1;
		document.body.style.backgroundColor='red'
		setTimeout("document.body.style.backgroundColor='#ccccEc'",100)
		doBonuses()
		numQ--
		goodA()
		return
	}
	if(bonusNo>0)
	{
		bonusNo-=1;
		val=Math.floor(Math.random()*5)
		if(Level!=6)
		{
			if(val==0)
				alert("Opravdu?")
			else if(val==1)
				alert("Nerozmyslíš si to ješte?")
			else if(val==2)
				alert("To bych netvrdil.")
			else if(val==3)
				alert("Takže tohle nevíš. Zkus neco jiného")
			else
				alert("Špatne.")
			numQ--
		}else{
			alert("Sorry! Bad call!\n\nUz bys musel bojovat s trenerem navic!")
		}
		if(msie)document.body.style.backgroundColor='red'
		if(msie)setTimeout("document.body.style.backgroundColor='#ccccEc'",100)
		doBonuses()
		goodA()
	}else{
		GetElement('mainspan').style.display='none'
		clearTimeout(tmr)
		GetElement('bonuses').innerHTML="<h3>Prohrál jsi.</h3>";
		GetElement('bgcchonworl').style.backgroundColor='red'
		timergoing=0
		GetElement('Lvlfirst').innerHTML=LevelData[Level][3]+'<br>'
		GetElement('Lvlfirst').style.display=''
		GetElement('statusspan').style.display='none'
	}
}

// Just you wait
PKMN=0
function goodA()
{
	PKMN=0
	if(msie)GetElement('pic').filters.chroma.enabled=false
	GetElement('Lvlfirst').style.display='none'
	GetElement('Lvlfirst').innerHTML=""
	numQ++
	if(numQ>LevelData[Level][0])
	{
		Level++
		numQ=1
		bonusNo++
		GetElement('Lvlfirst').innerHTML=LevelData[Level][2]+'<br>'
		GetElement('Lvlfirst').style.display=''
	}
	doBonuses()
	if(LevelData[Level][0]==0)
	{
		//Victory
		GetElement('mainspan').style.display='none'
		clearTimeout(tmr)
		GetElement('bonuses').innerHTML="<h3>Vyhrál jsi.</h3>";
		GetElement('bgcchonworl').style.backgroundColor='green'
		timergoing=0
		GetElement('Lvlfirst').innerHTML=LevelData[Level][2]+'<br>'
		GetElement('Lvlfirst').style.display=''
		statusspan.style.display='none'
	}
	GetElement('Qno').innerText=numQ
	GetElement('level').innerText=Level
	if(bonusNo==0)
		window.status="UltraKviz - level "+Level+", otazka "+numQ+", žádné bonusy"
	else if(bonusNo==1)
		window.status="UltraKviz - level "+Level+", otazka "+numQ+", 1 bonus"
	else if(bonusNo<5)
		window.status="UltraKviz - level "+Level+", otazka "+numQ+", "+bonusNo+" bonusy"
	else
		window.status="UltraKviz - level "+Level+", otazka "+numQ+", "+bonusNo+" bonusu"
	GetElement('maxi').innerHTML="z "+LevelData[Level][0]
	if(LevelData[Level][0]==2||LevelData[Level][0]==3||LevelData[Level][0]==4||LevelData[Level][0]==7)
		GetElement("maxi").innerHTML="ze "+LevelData[Level][0]
	//pic.src="loading.gif"
	// Clear right answers
	TextAnswer1=""
	TypeAnswer1=-2
	TypeAnswer2=-2
	TypeAnswerOp=-2
	BoolAnswer1=-2
	NumAnswer1=-2
	VerAnswer1=-2
	// Clear answers fields
	GetElement('textin1').style.display='none'
	GetElement('typein1').style.display='none'
	GetElement('typein2').style.display='none'
	GetElement('boolin1span').style.display='none'
	GetElement('verin1').style.display='none'
	// OK
	picSrc=""
	if(Level==1)					//Easiest Who's This
	{
		toAsk=LevelData[Level][1]
		PKMN=easiestPKMN[Math.floor(Math.random()*numEasiest)]
		picSrc=getPic(PKMN)
		TextAnswer1=Pokemoni[toNum(PKMN)][1]+"|OR|"+Pokemoni[toNum(PKMN)][1].toLowerCase().replace("(m)","").replace("(f)","")
		GetElement('textin1').style.display=''
	}
	else if(Level==2)				//Easy Who's This
	{
		toAsk=LevelData[Level][1]
		PKMN=easyPKMN[Math.floor(Math.random()*numEasy)]
		picSrc=getPic(PKMN)
		TextAnswer1=Pokemoni[toNum(PKMN)][1]+"|OR|"+Pokemoni[toNum(PKMN)][1].toLowerCase().replace("(m)","").replace("(f)","")
		GetElement('textin1').style.display=''
	}
	else if(Level==3)				//RBY Who's This
	{
		toAsk=LevelData[Level][1]
		PKMN=Math.floor(Math.random()*150)+1
		picSrc=getPic(PKMN)
		TextAnswer1=Pokemoni[toNum(PKMN)][1]+"|OR|"+Pokemoni[toNum(PKMN)][1].toLowerCase().replace("(m)","").replace("(f)","")
		GetElement('textin1').style.display=''
	}
	else if(Level==4)				//G/S Who's This
	{
		toAsk=LevelData[Level][1]
		PKMN=Math.floor(Math.random()*100)+151
		picSrc=getPic(PKMN)
		TextAnswer1=Pokemoni[toNum(PKMN)][1]+"|OR|"+Pokemoni[toNum(PKMN)][1].toLowerCase().replace("(m)","").replace("(f)","")
		GetElement('textin1').style.display=''
	}
	else if(Level==5)				//Shadow
	{
		toAsk=LevelData[Level][1]
		PKMN=Math.floor(Math.random()*249)+1
		if(((PKMN < 152) && (!ShadowRBY)) || ((PKMN > 151) && (!ShadowGS)))
		{
			i=Math.floor(Math.random()*((ShadowDoneRBY.length)+(ShadowDoneGS.length)))
			if(i<ShadowDoneRBY.length)
				PKMN = ShadowDoneRBY[i]
			else
				PKMN = ShadowDoneGS[i-ShadowDoneRBY.length]
		}
		if(msie)pic.filters.chroma.enabled=true
		picSrc=getShadow(PKMN)
		TextAnswer1=Pokemoni[toNum(PKMN)][1]+"|OR|"+Pokemoni[toNum(PKMN)][1].toLowerCase().replace("(m)","").replace("(f)","")
		GetElement('textin1').style.display=''
	}
	else if(Level==6)				//Blaine
	{
		ArrIndex=numQ-1	// a NASTY bug!!!
		toAsk=LevelData[Level][1].replace(/%s/g,blaine[ArrIndex][1])
		BoolAnswer1=blaine[ArrIndex][2]
		GetElement('boolin1span').style.display=''
	}
	else if(Level==7)				//PicType
	{
		toAsk=LevelData[Level][1]
		PKMN=Math.floor(Math.random()*249)+1
		picSrc=getPic(PKMN)
		TypeAnswer1=Type1(toNum(PKMN))
		TypeAnswer2=Type2(toNum(PKMN))
		TypeAnswerOp=0
		GetElement('typein1').style.display=''
	}
	else if(Level==8)				//PicTypes
	{
		toAsk=LevelData[Level][1]
		PKMN=Math.floor(Math.random()*249)+1
		picSrc=getPic(PKMN)
		TypeAnswer1=Type1(toNum(PKMN))
		TypeAnswer2=Type2(toNum(PKMN))
		TypeAnswerOp=1
		GetElement('typein1').style.display=''
		GetElement('typein2').style.display=''
	}
	else if(Level==9)				//Type
	{
		PKMN=Math.floor(Math.random()*249)+1
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1])
		TypeAnswer1=Type1(toNum(PKMN))
		TypeAnswer2=Type2(toNum(PKMN))
		TypeAnswerOp=0
		GetElement('typein1').style.display=''
	}
	else if(Level==10)				//Types
	{
		PKMN=Math.floor(Math.random()*249)+1
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1])
		TypeAnswer1=Type1(toNum(PKMN))
		TypeAnswer2=Type2(toNum(PKMN))
		TypeAnswerOp=1
		GetElement('typein1').style.display=''
		GetElement('typein2').style.display=''
	}
	else if(Level==11)				//Learns
	{
		while(1)
		{
			PKMN=Math.floor(Math.random()*249)+1
			if(Pokemoni[toNum(PKMN)][12].length>0)
				break;
		}
		learnsProb=(Math.floor(Math.random()*2)==0)?(0):(1)
		if(learnsProb)// Yes
		{
			maximum=Pokemoni[toNum(PKMN)][12].length-1
			idx=Math.floor(Math.random()*(maximum))
			utokno=Pokemoni[toNum(PKMN)][12][idx].split(":")[0]
			utok=Utoky[utokno].split(":")[0]
			BoolAnswer1=1
		}
		else//Rand
		{
			BoolAnswer1=0
			Utoky.length
			utokno=Math.floor(Math.random()*(Utoky.length-1))
			utok=Utoky[utokno].split(":")[0]
			for(testutoki in Pokemoni[toNum(PKMN)][12])
			{
				testutok=Pokemoni[toNum(PKMN)][12][testutoki].split(":")[0]
				if(testutok*1==utokno*1)
					BoolAnswer1=1
			}
		}
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1]).replace(/%a/g,utok)
		GetElement('boolin1span').style.display=''
	}
	else if(Level==12)				//Attack types
	{
		PKMN=Math.floor(Math.random()*249)+1
		Utoky.length
		utokno=Math.floor(Math.random()*(Utoky.length-1))
		utok=Utoky[utokno].split(":")[0]
		TypeAnswer1=validType(Utoky[utokno].split(":")[1])
		TypeAnswerOp=2
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1]).replace(/%a/g,utok)
		GetElement('typein1').style.display=''
	}
	else if(Level==13)				//Can learn
	{
		PKMN=Math.floor(Math.random()*249)+1
		BoolAnswer1=0
		if((toNum(PKMN)>151)||((Math.floor(Math.random()*2)==0)?(0):(1)))
		{//New
			num=Math.floor(Math.random()*57)
			string=MachineGS[num].split(":")[0]
			attack=MachineGS[num].split(":")[1]
			for(test in Pokemoni[toNum(PKMN)][11])
				if(Pokemoni[toNum(PKMN)][11][test]==string)
				{
					BoolAnswer1=1
					break
				}
		}else{//Old
			num=Math.floor(Math.random()*55)
			string=MachineRBY[num].split(":")[0]
			attack=MachineRBY[num].split(":")[1]
			for(test in Pokemoni[toNum(PKMN)][10])
			{
				if(Pokemoni[toNum(PKMN)][10][test]==string)
				{
					BoolAnswer1=1
					break
				}
			}
		}
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1]).replace(/%a/g,attack)
		GetElement('boolin1span').style.display=''
	}
	else if(Level==14)				//When evolves?
	{
		found=0
		levl=0
		do
		{
			PKMN=Math.floor(Math.random()*249)+1
			for(ii in Pokemoni[toNum(PKMN)][8])
			{
				if(Pokemoni[toNum(PKMN)][8][ii].substr(0,1)=="L")
				{
					if(Pokemoni[toNum(PKMN)][8][ii].split(/ /g)[1]=="na")
					{
						levl=parseInt(Pokemoni[toNum(PKMN)][8][ii].split(/ /g)[0].substr(1))
						found=1
					}if(found)break
				}if(found)break
			}if(found)break
		}while(!found)
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1])
		TextAnswer1=levl+"|OR|L"+levl+"|OR|LV"+levl+"|OR|LV."+levl+"|OR|LEV."+levl+"|OR|LEVEL"+levl
		GetElement('textin1').style.display=''
	}
	else if(Level==15)				//Can breed
	{
		PKMN=Math.floor(Math.random()*249)+1
		PKM2=Math.floor(Math.random()*249)+1
		if(PKMN==39&&PKM2==39)PKMN=1
		BoolAnswer1=canBreed(PKMN,PKM2)
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1]).split("%d").join(Pokemoni[toNum(PKM2)][1])
		GetElement('boolin1span').style.display=''
	}
	else if(Level==16)				//Dex
	{
		PKMN=Math.floor(Math.random()*249)+1
		theDex=Pokemoni[toNum(PKMN)][7][Math.floor(Math.random()*(Pokemoni[toNum(PKMN)][7].length-2))].split(":")[1]
		toAsk=LevelData[Level][1].replace(/%d/g,theDex)
		TextAnswer1=Pokemoni[toNum(PKMN)][1]+"|OR|"+Pokemoni[toNum(PKMN)][1].toLowerCase().replace("(m)","").replace("(f)","")
		GetElement('textin1').style.display=''
	}
	else if(Level==17)				//TM/HM no's
	{
		if(((Math.floor(Math.random()*2)==0)?(0):(1)))
		{//Old
			num=Math.floor(Math.random()*55)
			string=MachineRBY[num].split(":")[0]
			attack=MachineRBY[num].split(":")[1]
			version="Pokémon Red"
		}else{//New
			num=Math.floor(Math.random()*57)
			string=MachineGS[num].split(":")[0]
			attack=MachineGS[num].split(":")[1]
			version="Pokémon Gold"
		}
		toAsk=LevelData[Level][1].replace(/%a/g,attack).replace(/%v/g,version)
		TextAnswer1=string+"|OR|"+string.replace(/0/g,"")
		TextAnswer1=TextAnswer1+"|OR|"+TextAnswer1.replace(/M/g,"")
		TextAnswer1=TextAnswer1+"|OR|"+TextAnswer1.replace(/TM/g,"")
		GetElement('textin1').style.display=''
	}
	else if(Level==18)				//TM/HM contains
	{
		if(((Math.floor(Math.random()*2)==0)?(0):(1)))
		{//Old
			num=Math.floor(Math.random()*55)
			string=MachineRBY[num].split(":")[0]
			attack=MachineRBY[num].split(":")[1]
			version="Pokémon Red"
		}else{//New
			num=Math.floor(Math.random()*57)
			string=MachineGS[num].split(":")[0]
			attack=MachineGS[num].split(":")[1]
			version="Pokémon Gold"
		}
		toAsk=LevelData[Level][1].replace(/%t/g,string).replace(/%v/g,version)
		TextAnswer1=attack
		GetElement('textin1').style.display=''
	}
	else if(Level==19)				//Num
	{
		PKMN=Math.floor(Math.random()*249)+1
		toAsk=LevelData[Level][1].replace(/%n/g,Pokemoni[toNum(PKMN)][1])
		NumAnswer1=Pokemoni[toNum(PKMN)][0]
		GetElement('textin1').style.display=''
	}
	else if(Level==20)				//Version
	{
		PKMN=Math.floor(Math.random()*249)+1
		theArr=Pokemoni[toNum(PKMN)][7][Math.floor(Math.random()*(Pokemoni[toNum(PKMN)][7].length-2))].split(":")
		theDex=theArr[1]
		theVer=theArr[0]
		toAsk=LevelData[Level][1].replace(/%d/g,theDex)
		VerAnswer1=dexVer(theArr[0])
		GetElement('verin1').style.display=''
	}
	else if(Level==21)				//Mysterious
	{
		toAsk=LevelData[Level][1]
		PKMN=Math.floor(Math.random()*249)+1
		picSrc=getPic(PKMN)
		TextAnswer1=Pokemoni[toNum(PKMN)][1]+"|OR|"+Pokemoni[toNum(PKMN)][1].toLowerCase().replace("(m)","").replace("(f)","")
		GetElement('textin1').style.display=''
	}
	else if(Level==22)				//Mew's mini-test (Mew/Celebi Who's this)
	{
		toAsk=LevelData[Level][1]
		if(Math.floor(Math.random()*2))
		{
			picSrc=getPic(151)
			TextAnswer1="mew"
		}
		else
		{
			picSrc=getPic(251)
			TextAnswer1="celebi"
		}
		GetElement('textin1').style.display=''
	}

	GetElement('Q').innerHTML=toAsk
	GetElement('textin1').value=""
	GetElement('textin1').select()
	if(picSrc=="")
	{
		GetElement('Ptd').style.display='none'
		GetElement('pic').style.display='none'
		GetElement('loadingpic').style.display='none'
	}else{
		GetElement('Ptd').style.display=''
		if(msie)GetElement('pic').style.display='none'
		else GetElement('pic').style.display=''
		if(msie)GetElement('loadingpic').style.display=''
		else GetElement('loadingpic').style.display='none'
		GetElement('pic').src=picSrc
	}
	if(debug=="yes"&&PKMN)window.status+=("...DEBUG:"+PKMN +" - "+ Pokemoni[toNum(PKMN)][1])
}

// Picture load error
function picError()
// Don't rely on this, sometimes it does nothing... I don't fell like debugging this though.....
{
	if(!timerstarted)return; // Errors when the quiz is not loaded
	alert("Nepodařilo se načíst obrázek, ale to není tvoje vina. Otázku ti uznám, jako by byla dobře.");
	goodA();
}