/**
 * @author wouter
 */
var btnState = new Array;
var _fired = false;

function castVote(pollId){
	var voteId = 0;
	voteId = $('poll'+pollId+'_antwoord').value;

	if(voteId == "0"){
		alert("U dient een antwoord te selecteren!");
	}
	else{
		disabledButtons(pollId);
		var myRequest = new Request({
			method: 'get',
			url: 'frontend/xml.php',
			onRequest: function(){
				_fired = true;
			},
			onSuccess: function(txt, xml){
				voteCasted(xml);
				getChallenge();
				_fired = false;
			},
			onFailure: function(error){
				alert('Er ging iets mis bij het stemmen, refresh de pagina en probeer het nogmaals!');
				getChallenge();
			}
		});

		if(_fired == false){
			myRequest.send('action=castVote&response='+$('challengeKey').innerHTML+'&poll='+pollId+'&vote='+voteId);
		}
		else{
			setTimeout(function(){
				castVote(pollId)
			},500);
		}
	}
}

function selectAwnser(voteId,pollId){
	$('poll'+pollId+'_antwoord').value = voteId;
}

function showResults(pollId,showAwnsers){
	disabledButtons(pollId);
	var myRequest = new Request({
		method: 'get',
		url: 'frontend/xml.php',
		onRequest: function(){
				_fired = true;
		},
		onSuccess: function(txt, xml){
			getResults(xml);
			getChallenge();
			_fired = false;
		},
		onFailure: function(error){
			alert('Er ging iets mis bij het ophalen van de resultaten, refresh de pagina en probeer het nogmaals!');
			getChallenge();
		}
	});

	if(_fired == false){
		myRequest.send('action=getResults&response='+$('challengeKey').innerHTML+'&poll='+pollId+'&showAwnsers='+showAwnsers);
	}
	else{
		setTimeout(function(){
			showResults(pollId, showAwnsers)
		},500);
	}
}

function hideResults(pollId, small){
	if(small == "true"){
		myVerticalSlide1 = new Fx.Slide('poll' + pollId + '_full', {
			mode: 'vertical',
			duration: 500,
			transition: Fx.Transitions.Pow.easeOut,
			onComplete: function(){
				myVerticalSlide2 = new Fx.Slide('poll' + pollId + '_small', {
					mode: 'vertical',
					duration: 500,
					transition: Fx.Transitions.Pow.easeOut
				});

				$('poll'+pollId+'_full').style.display 		= "none";
				$('poll'+pollId+'_antwoorden').className 	= "antwoorden hidden";
				$('poll'+pollId+'_sluiten').style.display 	= "none";
				$('poll'+pollId+'_resultaat').style.display = "block";
				myVerticalSlide2.slideIn();
			}
		});

		myVerticalSlide1.slideOut();
	}
	else{
		$('poll'+pollId+'_full').style.display 		= "none";
		$('poll'+pollId+'_antwoorden').className 	= "antwoorden hidden";
		$('poll'+pollId+'_sluiten').style.display 	= "none";
		$('poll'+pollId+'_resultaat').style.display = "block";
	}
}

function showResults2(pollId){
	myVerticalSlide1 = new Fx.Slide('poll' + pollId + '_small', {
		mode: 'vertical',
		duration: 500,
		transition: Fx.Transitions.Pow.easeOut,
		onComplete: function(){
			myVerticalSlide2 = new Fx.Slide('poll' + pollId + '_full', {
				mode: 'vertical',
				duration: 500,
				transition: Fx.Transitions.Pow.easeOut
			});

			myVerticalSlide2.hide();
			$('poll'+pollId+'_full').style.display 		= "block";
			$('poll'+pollId+'_antwoorden').className 	= "antwoorden";
			$('poll'+pollId+'_resultaat').style.display = "none";
			$('poll'+pollId+'_sluiten').style.display 	= "block";
			myVerticalSlide2.slideIn();
		}
	});

	$('poll'+pollId+'_resultaat').style.display = "none";
	$('poll'+pollId+'_sluiten').style.display 	= "none";
	myVerticalSlide1.slideOut();

}

function voteCasted(xml){
	pollId = xml.childNodes[0].firstChild.firstChild.firstChild.nodeValue;
	voteId = xml.childNodes[0].firstChild.childNodes[1].firstChild.nodeValue;

	if(pollId != "0" && voteId != "0"){
		myVerticalSlide = new Fx.Slide('poll'+pollId+'_antwoorden',{
			mode: 'vertical',
			duration: 500,
			transition: Fx.Transitions.Pow.easeOut,
			onComplete: function(){
					        $('poll'+pollId+'_antwoorden').innerHTML = xml.childNodes[0].firstChild.childNodes[2].firstChild.nodeValue;
							myVerticalSlide2.slideIn();
						}
		});

		myVerticalSlide2 = new Fx.Slide('poll'+pollId+'_antwoorden',{
					mode: 'vertical',
					duration: 500,
					transition: Fx.Transitions.Pow.easeOut});

		btnState[pollId] = $('poll'+pollId+'_resultaat').style.display;
		$('poll'+pollId+'_resultaat').style.display = "none";
		$('poll'+pollId+'_stemmen').style.display 	= "none";
		$('poll'+pollId+'_stemmen2').style.display 	= "none";
		myVerticalSlide.slideOut();
	}
	else{
		$('poll'+pollId+'_stemmen').style.display 	= "none";
		enableButtons(pollId);
		alert("Er is al gestemd vanaf dit ip adres!");
	}
}

function getResults(xml){
	pollId = xml.childNodes[0].firstChild.firstChild.firstChild.nodeValue;

	myVerticalSlide = new Fx.Slide('poll'+pollId+'_antwoorden',{
				mode: 'vertical',
				duration: 500,
				transition: Fx.Transitions.Pow.easeOut,
				onComplete: function(){
						        $('poll'+pollId+'_antwoorden').innerHTML = xml.childNodes[0].firstChild.childNodes[1].firstChild.nodeValue;
								myVerticalSlide2.slideIn();
							}
			});

	myVerticalSlide2 = new Fx.Slide('poll'+pollId+'_antwoorden',{
				mode: 'vertical',
				duration: 500,
				transition: Fx.Transitions.Pow.easeOut,
				onComplete: function(){
					enableButtons(pollId);

					if(btnState[pollId] != "none"){
						$('poll'+pollId+'_resultaat').style.display = "none";
						$('poll'+pollId+'_stemmen').style.display 	= "none";
						$('poll'+pollId+'_stemmen2').style.display 	= "block";
					}
					else{
						$('poll'+pollId+'_resultaat').style.display = "block";
						$('poll'+pollId+'_stemmen').style.display 	= "block";
						$('poll'+pollId+'_stemmen2').style.display 	= "none";
					}
				}});

	btnState[pollId] = $('poll'+pollId+'_resultaat').style.display;
	$('poll'+pollId+'_resultaat').style.display = "none";
	$('poll'+pollId+'_stemmen').style.display 	= "none";
	$('poll'+pollId+'_stemmen2').style.display 	= "none";
	myVerticalSlide.slideOut();
}

function getChallenge(){
	var myRequest = new Request({
		method: 'get',
		url: 'frontend/xml.php',
		onRequest: function(){
				_fired = true;
		},
		onSuccess: function(txt, xml){
			$('challengeKey').innerHTML= xml.childNodes[0].firstChild.firstChild.nodeValue;
			//getChallenge();
			_fired = false;
		},
		onFailure: function(error){
			if(typeof(getChallenge) != "undefined"){
				alert('Er ging iets mis bij het ophalen van de gegevens, refresh de pagina en probeer het nogmaals!');
				//getChallenge();
			}
		}
	});

	if(_fired == false){
			myRequest.send('action=getChallenge');
	}
	else{
		setTimeout(function(){
			getChallenge()
		},500);
	}
}

function enableButtons(pollId){
	$('poll'+pollId+'_stemmen').disabled 	= false;
	$('poll'+pollId+'_resultaat').disabled 	= false;
}

function disabledButtons(pollId){
	$('poll'+pollId+'_stemmen').disabled 	= true;
	$('poll'+pollId+'_resultaat').disabled 	= true;
}

/***
 * Archief
 */
var _archief_cache1 	= new Array(); // Cache met pagina inhoud die we al eerder hebben opgehaald
var _archief_offset1 = 1;
var _current_page1 = 1; // always start on page 1
var _direction1 = 0; // direction -1 for back and 1 for forward
var _archief_cache2 	= new Array(); // Cache met pagina inhoud die we al eerder hebben opgehaald
var _archief_offset2 = 1;
var _current_page2 = 1; // always start on page 1
var _direction2 = 0; // direction -1 for back and 1 for forward
var _archief_cache3 	= new Array(); // Cache met pagina inhoud die we al eerder hebben opgehaald
var _archief_offset3 = 1;
var _current_page3 = 1; // always start on page 1
var _direction3 = 0; // direction -1 for back and 1 for forward

function archiefVolgendePagina(paginaId,columId){
	if(columId == 1){
		_archief_offset2 += 1;
		_direction2 = 1;

		getArchiefPagina(paginaId);

		if(_archief_offset2 > 0){
			$('archiefVorige1').className = "vorige";
		}

		if(_archief_offset2 >= $('archiefTotalPages1').innerHTML){
			$('archiefVolgende1').className = "volgende hidden";
		}

		$('archiefCurrentPage1').innerHTML = _archief_offset2;
	}
	else{
		_archief_offset1 += 1;
		_direction1 = 1;

		getPagina(paginaId);

		if(_archief_offset1 > 0){
			$('Vorige0').className = "vorige";
		}

		if(_archief_offset1 >= $('TotalPages0').innerHTML){
			$('Volgende0').className = "volgende hidden";
		}

		$('CurrentPage0').innerHTML = _archief_offset1;
	}
}

function archiefVorigePagina(paginaId,columId){
	if (columId == 1) {
		_archief_offset2 -= 1;
		_direction2 = -1;

		getArchiefPagina(paginaId);

		if (_archief_offset2 <= 1) {
			$('archiefVorige1').className = "vorige hidden";
		}

		if (_archief_offset2 < $('archiefTotalPages1').innerHTML) {
			$('archiefVolgende1').className = "volgende";
		}

		$('archiefCurrentPage1').innerHTML = _archief_offset2;
	}
	else{
		_archief_offset1 -= 1;
		_direction1 = -1;

		getPagina(paginaId);

		if (_archief_offset1 <= 1) {
			$('Vorige0').className = "vorige hidden";
		}

		if (_archief_offset1 < $('TotalPages0').innerHTML) {
			$('Volgende0').className = "volgende";
		}

		$('CurrentPage0').innerHTML = _archief_offset1;
	}
}

function getArchiefPagina(paginaId){
	if(_archief_cache2[(_current_page2+_direction2)]){
		updateArchief(_archief_cache2[(_current_page2+_direction2)], true);
	}
	else{
		var offset = _archief_offset2;

		var myRequest = new Request({
			method: 'get',
			url: 'frontend/xml.php',
			onRequest: function(){
				_fired = true;
			},
			onSuccess: function(txt, xml){
				updateArchief(xml, false);
				getChallenge();
				_fired = false;
			},
			onFailure: function(error){
				alert("Er ging iets mis bij het ophalen van het archief, refresh de pagina en probeer het nogmaals!");
				getChallenge();
			}
		});

		if(_fired == false){
			myRequest.send('action=getArchiefPage&response='+$('challengeKey').innerHTML+'&pagina='+paginaId+'&offset='+offset);
		}
		else{
			setTimeout(function(){
				getArchiefPagina(paginaId)
			},500);
		}
	}
}

function updateArchief(xml,from_cache){
	if(typeof(_archief_cache2[_current_page2]) == "undefined"){
		_archief_cache2[_current_page2] = $("archiefHolder").innerHTML;
	}

	if(from_cache == false){
		content = xml.childNodes[0].firstChild.firstChild.nodeValue;
	}
	else{
		content = xml;
	}

	$("archiefHolder").innerHTML = content;
	_current_page2 = (_current_page2+_direction2);
}

function getPagina(paginaId){
	if(_archief_cache1[(_current_page1+_direction1)]){
		updatePagina(_archief_cache1[(_current_page1+_direction1)], true);
	}
	else{
		var offset = _archief_offset1;

		var myRequest = new Request({
			method: 'get',
			url: 'frontend/xml.php',
			onRequest: function(){
				_fired = true
			},
			onSuccess: function(txt, xml){
				updatePagina(xml, false);
				getChallenge();
				_fired = false;
			},
			onFailure: function(error){
				alert("Er ging iets mis bij het ophalen van de pagina");
				//setTimeout(function(){
					getChallenge();
					//getPagina(paginaId);
				//},500)
			}
		});

		if(_fired == false){
			myRequest.send('action=getPage&response='+$('challengeKey').innerHTML+'&pagina='+paginaId+'&offset='+offset);
		}
		else{
			setTimeout(function(){
				getPagina(paginaId)
			},500);
		}
	}
}

function updatePagina(xml,from_cache){
	if(typeof(_archief_cache1[_current_page1]) == "undefined"){
		_archief_cache1[_current_page1] = $("pageHolder0").innerHTML;
	}

	if(from_cache == false){
		content = xml.childNodes[0].firstChild.firstChild.nodeValue;
	}
	else{
		content = xml;
	}

	$("pageHolder0").innerHTML = content;
	_current_page1 = (_current_page1+_direction1);
}

function zoekenVolgendePagina(zoekTerm){
		_archief_offset3 += 1;
		_direction3 = 1;

		getZoekenPagina(zoekTerm);

		if(_archief_offset3 > 0){
			$('zoekenVorige').className = "vorige";
		}

		if(_archief_offset3 >= $('zoekenTotalPages').innerHTML){
			$('zoekenVolgende').className = "volgende hidden";
		}

		$('zoekenCurrentPage').innerHTML = _archief_offset3;

}

function zoekenVorigePagina(zoekTerm){
		_archief_offset3 -= 1;
		_direction3 = -1;

		getZoekenPagina(zoekTerm);

		if (_archief_offset3 <= 1) {
			$('zoekenVorige').className = "vorige hidden";
		}

		if (_archief_offset3 < $('zoekenTotalPages').innerHTML) {
			$('zoekenVolgende').className = "volgende";
		}

		$('zoekenCurrentPage').innerHTML = _archief_offset3;

}

function getZoekenPagina(zoekTerm){
	if(_archief_cache3[(_current_page3+_direction3)]){
		updateZoeken(_archief_cache3[(_current_page3+_direction3)], true);
	}
	else{
		var offset = _archief_offset3;

		var myRequest = new Request({
			method: 'get',
			url: 'frontend/xml.php',
			onRequest: function(){
				_fired = true;
			},
			onSuccess: function(txt, xml){
				updateZoeken(xml, false);
				getChallenge();
				_fired = false;
			},
			onFailure: function(error){
				alert("Er ging iets mis bij het ophalen van de zoekresultaten");
				//setTimeout(function(){
					getChallenge();
					//getZoekenPagina(zoekTerm);
				//},500);
			}
		});

		if(_fired == false){
			myRequest.send('action=getSearchPage&response='+$('challengeKey').innerHTML+'&term='+zoekTerm+'&offset='+offset);
		}
		else{
			setTimeout(function(){
				getZoekenPagina(zoekTerm)
			},500);
		}
	}
}

function updateZoeken(xml,from_cache){
	if(typeof(_archief_cache3[_current_page3]) == "undefined"){
		_archief_cache3[_current_page3] = $("zoekenHolder").innerHTML;
	}

	if(from_cache == false){
		content = xml.childNodes[0].firstChild.firstChild.nodeValue;
	}
	else{
		content = xml;
	}

	$("zoekenHolder").innerHTML = content;
	_current_page3 = (_current_page3+_direction3);
}

/**
 * Zoeken
 */
var _search_field;
function showSearchSuggestions(term, pagina){
	if(term != ""){
		_search_field = pagina;
		var myRequest = new Request({
			method: 'get',
			url: 'frontend/xml.php',
			onRequest: function(){
				_fired = true;
			},
			onSuccess: function(txt, xml){
				getSearchSuggestions(xml);
				getChallenge();
				_fired = false;
			},
			onFailure: function(error){
				//alert('Er ging iets mis bij het ophalen van de zoek suggesties');
				//setTimeout(function(){
					getChallenge();
					//showSearchSuggestions(term, pagina);
				//},500);
			}
		});

		if(_fired == false){
			myRequest.send('action=getSearchSuggestions&response='+$('challengeKey').innerHTML+'&searchPage='+pagina+'&term='+term);
		}
		else{
			setTimeout(function(){
				showSearchSuggestions(term, pagina)
			},500);
		}
	}
}

var _timer = 0;
function getSearchSuggestions(xml){
	$('zoekThermSuggesties').tween('opacity', '0');
	result = xml.childNodes[0].firstChild.firstChild.nodeValue;

	if(result != ""){
		if(_timer != 0){
			clearTimeout(_timer);
		}

		$('zoekThermSuggesties').innerHTML = result;

		if(_search_field == "zoeken"){
			$poz = findPos($("edtZoeken"));
			_left = $poz[0]-3;
			_top = $poz[1]+18;
			_width = 117;
		}
		else{
			$poz = findPos($("edtZoekenArchief"));
			_left = $poz[0]-3;
			_top = $poz[1]+18;
			_width = 185;
		}

		$('zoekThermSuggesties').style.left 	= _left+"px";
		$('zoekThermSuggesties').style.top 		= _top+"px";
		$('zoekThermSuggesties').style.width 	= _width+"px";

		$('zoekThermSuggesties').style.display = "block";
		$('zoekThermSuggesties').tween('opacity', '100');

		_timer = setTimeout('hideSearchSuggestions()',5000);
	}
}

function hideSearchSuggestions(){
	$('zoekThermSuggesties').get('tween', {property: 'opacity', duration: 'long'}).start(0);
}

function findPos(obj){
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
		while (obj = obj.offsetParent);

		return [curleft, curtop];
	}
}


/***** DEBUG *****/
function showChildNodes(objNode, intLevel) {
  var strNodes = '';// Accumulates description
  var intCount = 0;	// No. of Child nodes
  var intNode = 0;	// Index for child nodes

  if ( objNode.nodeType != 3 ) {
        strNodes += '<BR>';
        for (intIndent = 0; intIndent < intLevel; intIndent++) {
          strNodes += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
        }
        strNodes += '<B> &nbsp;'   + objNode.nodeName + '<B>';
        if ( intLevel == 2) {
           strNodes += '----------------------------------------';
        }
     } else {
       strNodes += ': &nbsp; <B><FONT COLOR="#FF0000">' +
       objNode.nodeValue + '</FONT><B>';
  }

  intCount = objNode.childNodes.length;
  if (intCount > 0) {
    for (intNode = 0; intNode < intCount; intNode++) {
      strNodes += showChildNodes(objNode.childNodes[intNode], intLevel + 1);
    }
  }
  return strNodes;
}