language='en';	//jezik (pomembno zaradi slik z odgovori)
imgpath='template/images/anketa/';	//pot do slik
syspath='sys/anketa';	//pot do sys fajla za requeste

function forwardpage(nextpath,formpath) //redirect na naslednjo stran, ce so vsa vprasanja izpolnjena
{
	var sendstring='data=check';
	var answers=$$('div.answer');	//vsa polja za odgovore
	for(var i=0;i<answers.length;i++){sendstring+='&answer['+(answers[i].lang)+']['+i+']='+(answers[i].id);}
	new Request({url:syspath,onFailure:function(){/*alert('Check internet connection.');*/},
		onSuccess:function(response){
			if(response=='OK')
			{
				if(formpath)//formpath je url do obrazca, kamor posljem podatke
				{
					new Request({url:syspath,onFailure:function(){/*alert('Check internet connection.');*/},	//najprej posljem na sys/anketa zahtevek po stringu podatkov o anketi, ki jo sestavi iz session-a
						onSuccess:function(submitstring){
							new Request({url:formpath,onFailure:function(){/*alert('Check internet connection.');*/},	//ta string podatkov nato pošljem na prikaz quiz/finish, ki je v MyPortal-u nastavljen za prikaz obrazca. s tem se izognem 'rocnemu' zapisovanju v bazo
								onSuccess:function(){
									location.href=nextpath;	//ko sem podatke poslal, preusmerim na naslednjo (torej zadnjo) stran
								}
							}).send(submitstring);
						}
					}).send('data=submitstring');
				}
				else location.href=nextpath;
			}
			else $('noanswer').setStyle('display','inline');
		}
	}).send(sendstring);
}
function backtostart(startpath){new Request({url:syspath,onFailure:function(){/*alert('Check internet connection.');*/},onSuccess:function(){location.href=startpath;}}).send('data=empty');} //pobrise session in zacne anketo od zacetka
function importsession(mycont)	//iz session-a pobere podatke o izpolnjenih odgovorih in razporedi bonboncke na te odgovore
{
	new Request({url:syspath,onFailure:function(){/*alert('Check internet connection.');*/},	//request v sys, ki potem vrne s podpicji vrnjene vse zasedene odgovore.
		onSuccess:function(response)	//ce request uspe
		{
			if(response.length)	//ce ni zaseden noben odgovor, bo string prazen in nam ni treba nic narediti
			{
				var responses=new Array();
				if(response.match(';'))responses=response.split(';');	//locimo vse zasedene id-je odgovorov...
				else responses[0]=response	//...oziroma nastavimo le enega
				var candies=$$('div.candy');	//seznam vseh bonbonckov
				for(var i=0,k=0;i<responses.length;i++)	//za vse zasedene odgovore (i je stevec za odgovore, k za bonboncke)
				{
					if($(responses[i]))	//ce je odgovor na tej strani, obstaja njegov id, sicer ga ni
					{
						var answer=$(responses[i]);	//to je nas odgovor
						storetaken(answer.lang,true);	//vsi odgovori na to vprasanje so torej zasedeni
						var candy=candies[k];	//moj trenutni bonbon (ki bo zasedel trenutni odgovor)
						candy.store('question',answer.lang);	//bonboncku shranim podatke o odgovoru, ki ga zaseda
						candy.store('answer',answer.id);
						candy.store('oldtop',candy.getCoordinates(mycont).top);	//bonboncku najprej shranim informacijo o polozaju, ki ga zaseda pred premikom na odgovor ('nevtralni' polozaj)
						candy.store('oldleft',candy.getCoordinates(mycont).left);
						candy.set('morph',{duration:800,transition:Fx.Transitions.Back.easeOut});	//nastavimo, kako se bo (sam od sebe) premaknil bonboncek na odgovor
						candy.morph({						//bonboncek premaknem v sredino odgovora
							left:answer.getCoordinates(mycont).left+Math.round(answer.getCoordinates(mycont).width/2)-Math.round(candy.getCoordinates(mycont).width/2),	//racun: polozaj odgovora (left) + polovica sirine odgovora - polovica sirina bonboncka
							top:answer.getCoordinates(mycont).top+Math.round(answer.getCoordinates(mycont).height/2)-Math.round(candy.getCoordinates(mycont).height/2)	//enaka logika (racun) za top
						});
						k++;	//naslednji bonboncek
					}
				}
			}
		}
	}).send('data=import');	//posljemo request
}
function changestate()	//poslje podatke o trenutnem polozaju odgovorov
{
	var sendstring='data=update';
	var answers=$$('div.answer');	//vsa polja za odgovore
	var candies=$$('div.candy');	//vsi bonboncki
	for(var i=0;i<answers.length;i++){sendstring+='&answer['+(answers[i].lang)+']['+i+']='+(answers[i].id);}	//v queryju je seznam moznih odgovorov (lang in id)
	for(i=0;i<candies.length;i++){sendstring+='&candy['+i+']='+(candies[i].retrieve('answer'));}	//dodam se polozaje vseh bonbonckov (na katerem odgovoru so (id odgovora), ali false, ce niso na nobenem)
	new Request({url:syspath,onFailure:function(){/*alert('Check internet connection.');*/}}).send(sendstring); 	//izvedem request
}
function storetaken(lang,yn)	//vsem moznim odgovorom na neko vprasanje (vprasanje je doloceno z lang) doda informacijo, da so zasedeni ali prosti
{
	if(yn)$$('div.answer[lang='+lang+']').each(function(answer){answer.store('taken',true);});	//ce je yn=true, je vprasanje zasedeno (vsi mozni odgovori so zasedeni, ker je na enem bonboncek)
	else  $$('div.answer[lang='+lang+']').each(function(answer){answer.store('taken',false);});	//ce je yn=false, odgovora na vprasanje se ni, zato lahko kamencek premaknemo na odgovor
}
function nonetaken(lang)	//preveri, da noben bonbon ne sedi na odgovoru na neko vprasanje (vprasanje doloca lang)
{
	var candies=$$('div.candy');
	for(var i=0;i<candies.length;i++){if(candies[i].retrieve('question')==lang)return false;}	//ce kak bonbon sedi na odgovoru na vprasanje (lang), vrne false
	return true;	//ce ni noben bonbon odgovoril na vprasanje, vrne true
}

window.addEvent('domready',function(){
	importsession($('anketabck'));
	if($('anketabck'))
	{
		$$('div.candy').each(function(candy)	//ZA VSAK BONBONCEK izvedem skoraj vso skripto
		{
			mycont=$('anketabck');	//ozadje in hkrati meja premikanja bonboncka
			candy.store('oldtop',candy.getCoordinates(mycont).top);	//vsakemu bonboncku najprej shranim informacijo o polozaju (ce npr. hocem z njim zasesti ze zasedeno vprasanje, se bonboncek vrne na ta (shranjeni) polozaj
			candy.store('oldleft',candy.getCoordinates(mycont).left);
			candy.fade('in');
			if(!candy.retrieve('question'))candy.store('question',false);	//ce bonboncek nicesar ne zaseda, mu to shranim kot false
			if(!candy.retrieve('answer'))candy.store('answer',false);
			
			var myDrag = new Drag.Move(candy,	//za vsak bonboncek dolocim moznost premikanja
			{
				container: mycont,	//meja premikanja(da ne moremo bonbonckov premakniti npr. v nogo)
				droppables: '.answer',	//vsi mozni odgovori
			 
				onDrop: function(element, droppable, event)	//doloca, kaj se zgodi, ko bonboncek spustimo (ko smo ga nekam nesli)
				{
					if(droppable)	//ce smo bonboncek spustili na kak odgovor
					{
						element.set('morph',{duration:500,transition:Fx.Transitions.Back.easeOut});	//nastavimo, kako se bo (sam od sebe) premaknil bonboncek (bodisi na prejsnjo pozicijo, ce je ta odgovor prepovedan bodisi v sredino odgovora)
						if(nonetaken(droppable.lang))	//ce na to vprasanje se ni odgovora, je odgovor prost in bonboncek ga lahko zasede
						{
							element.store('question',droppable.lang);	//podatke o odgovoru shranim v bonbon
							element.store('answer',droppable.id);
							storetaken(droppable.lang,true);	//vsem odgovorom na to vprasanje shranim, da so ze zasedeni (npr. ne morem hkrati odgovoriti, da sem star 10 in 13 let)
							element.morph({						//bonboncek premaknem v sredino odgovora (da je bolj ocitno, da je bonbon sedel na odgovor)
								left:droppable.getCoordinates(mycont).left+Math.round(droppable.getCoordinates(mycont).width/2)-Math.round(element.getCoordinates(mycont).width/2),	//racun: polozaj odgovora (left) + polovica sirine odgovora - polovica sirina bonboncka
								top:droppable.getCoordinates(mycont).top+Math.round(droppable.getCoordinates(mycont).height/2)-Math.round(element.getCoordinates(mycont).height/2)	//enaka logika (racun) za top
							});
						}
						else	//ce ima vprasanje ze odgovor (npr. zaseden je odgovor s starostjo 10, nas bonbon pa smo premaknili na odgovor 13: odgovor 13 je nedovoljen, saj vprasanje o starosti ze ima odgovor)
						{
							element.store('question',false);	//v bonbon shranim, da le-ta ne lezi na nobenem vprasanju in nobenem odgovoru
							element.store('answer',false);
							element.morph({left:element.retrieve('oldleft'),top:element.retrieve('oldtop')});	//bonbon se (sam od sebe) premakne na zadnji polozaj (od koder smo ga vzeli), kjer ni zasedal nobenega odgovora
						}
					}
					else	//ce smo bonboncek spustili v prazen prostor (na noben odgovor)
					{
						element.store('question',false);	//v bonboncek shranim, da le-ta ne zaseda nobenega odgovora
						element.store('answer',false);
						element.store('oldtop',element.getCoordinates(mycont).top);	//koordinate novega 'nevtralnega' (brez odgovora) polozaja shranim v bonboncek
						element.store('oldleft',element.getCoordinates(mycont).left);
					}
					changestate();	//vsakic ko bonbon kam premaknemo in ga spustimo, se sprememba shrani preko request-a v session
				},
				onLeave: function(element, droppable)	//bonboncek zapusti (onLeave) odgovor vsakic, ko ga premaknemo izven meja odgovora (tudi ce smo z bonbonom odgovor le 'preleteli'), pa tudi, ce je prej lezal na tem odgovoru
				{
					element.store('question',false);
					element.store('answer',false);
					if(nonetaken(droppable.lang))storetaken(droppable.lang,false);
				}
			});
		});
	}
});