//If wait is true, there will no other ajax request will be sent until it is false again.
var wait = false;
var requestCount = 1;
var lastRequestNumber = 0;

//Contains the last sword. If the trimmed current sword is the same then the last, the ajax request will not be sent.
var swordReady;
var altNewElementLabel;
//Url to the print view.
var printLinkUrl;

Event.observe(window, 'load', function() {
	if ($('printSelection')) {
		printLinkUrl = $('printSelection').href;
	}
});

// Display clicked Childquestion-Rootline
function showChildren(uid, parentUid){

	var url = JSFE['tx_ssajaxfaq_pi1']['url']+'&tx_ssajaxfaq_pi1[ajaxRequest]=1&tx_ssajaxfaq_pi1[showUid]='+uid+'&no_cache=1';

	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport) {
				//Needed for IE.
			var aTag = $('a'+uid+parentUid);

				//Evaluate JSON response.
			var element = eval('('+transport.responseText+')');
			
			var parentElement = $('question'+uid+parentUid);

				//Remove old answer, link and files.
			if ($('current')) {
				$('current').up().removeChild($('current'));
			}

				//Close all opened questions.
			closeOpenedElements(parentElement);

//			alert(element.children);

				//If there are child elements, display them.
			
			openClickedElement(element.children, aTag, parentElement, element.answer, element.link, element.files);

		},
		onFailure: function(transport) {
			alert('Error: ' + transport.status + "/n" + transport.statusText);
		}
	});
}

function getElement(arrayElement, number) {
	var j = 0;

	for (i = 0; i < arrayElement.length; i++) {
		if (arrayElement[i] != '\n') {
			if (j == number) {
				return arrayElement[i];
			}
			j++;
		}
	}
}

function openClickedElement(newElement, element, parent, answer, link, files) {

		//Doesnt work with IE.
//	var ulElement = element.next('ul');
	var ulElement = element.nextSibling;

	if (ulElement) {
		parent.removeChild(ulElement);
	}

	//Remove the old label for the child item, if this has en other class
	var labelFurtherQuestion = document.getElementById('furtherQuestion');
	if (labelFurtherQuestion){
		//up() Doesnt work with IE.
		//labelFurtherQuestion.up().removeChild(labelFurtherQuestion);
		//Use standard DOM function instead.
		labelFurtherQuestion.parentNode.removeChild(labelFurtherQuestion);
	}
	
	parent.innerHTML = parent.innerHTML + '<div id="current" class="opened">'+ answer + '<div class="additionalInfo">' +  link + files + '<div class="clear"><!-- --></div></div></div>' + '<h4 id="furtherQuestion" class="childItem">' + JSFE['tx_ssajaxfaq_pi1']['labelChildItems'] + '</h4>' + stripslashes(stripslashes(newElement));

	altNewElementLabel = newElement;
		//Remove the old current class.
	var topElement = $('root');
	var oldCurrentElements = topElement.getElementsByClassName('cur');
	//if topElement.
//	alert(topElement.down(2));
	
	if(oldCurrentElements.length)	{
		oldCurrentElements.each(function (el) {
			el.className = 'act';
		});
	}

		//Remove the old active element.
	var ulElement = parent.up(2);
	var activeElements = ulElement.getElementsByClassName('act');
	
	if(activeElements.length)	{
		activeElements.each(function (el) {
			el.className = '';
		});
	}
		//Set the div as open.
	var subElements = getElement(parent.childNodes,2);
	if (subElements) {
		subElements.className = 'open';
	}

		//Set the new element as active and as current.
	var myChildElement = getElement(parent.childNodes,0)
	myChildElement.className = 'act cur';
	parent.className = 'act cur';
}

function closeOpenedElements(parent) {
	parent = parent.up();
	var openedElements = parent.getElementsByClassName('open');
	
	if(openedElements.length)	{
		openedElements.each(function(element) {
			element.up().removeChild(element);
		});
	}
}

function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\\\/g,'\\');
	str=str.replace(/\\0/g,'\0');
	return str;
}

function searchQuestion(sword){
	if (wait) {
		return false;
	}
	Element.show('ajaxIndicatorFAQ');
	sword = encodeURI(sword.superTrim());

	wait = true;
	setTimeout('resetWait()', 5);

	if (sword != swordReady){
		var url = JSFE['tx_ssajaxfaq_pi1']['url']+'&tx_ssajaxfaq_pi1[ajaxSearchRequest]=1&tx_ssajaxfaq_pi1[sword]='+sword+'&no_cache=1&tx_ssajaxfaq_pi1[requestCount]='+requestCount;
		requestCount++;
		swordReady = sword;
		new Ajax.Request(url, {
			encoding : 'utf-8',
			method: 'get',
			onSuccess: function(transport) {
				var response = eval('('+transport.responseText+')');
				if (lastRequestNumber < response.requestCount) {
					$('items').innerHTML = response.searchResult;
					lastRequestNumber = response.requestCount;
				}
			},
			onFailure: function(transport) {
				alert('Error: ' + transport.status + "/n" + transport.statusText);
			},
			onComplete: function(hxr) {	
						Element.hide('ajaxIndicatorFAQ');
			}
		});
	}

	JSFE['tx_ssajaxfaq_pi1']['openedElements'] = new Array();
	setUrl('');
}

function setUrl(openedElements) {
	url = JSFE['tx_ssajaxfaq_pi1']['url']+'&tx_ssajaxfaq_pi1%5BopenedElements%5D='+openedElements+'&type=98';
	printLinkUrl = url;
	$('printSelection').href = url;

	/*if (openedElements == '') {
		$('printSelection').style.display = 'none';
	} else {
		$('printSelection').style.display = 'block';
	}*/
}

function openSearchQuestion(aTag, uid){

	var opendiv = $('opened' + uid);

	if (opendiv) {
		$('a'+uid).className = '';

		opendiv.up().removeChild(opendiv);
		removeUidFromPrintlink(uid);
		return;
	}

	var url = JSFE['tx_ssajaxfaq_pi1']['url']+'&tx_ssajaxfaq_pi1[ajaxRequestSearchContent]=1&tx_ssajaxfaq_pi1[showUid]='+uid+'&no_cache=1';

	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport) {

			var aTag = $('a'+uid);

				//Evaluate JSON response.
			var elementS = eval('('+transport.responseText+')');

			$('question'+uid).innerHTML = $('question'+uid).innerHTML + '<div id="opened'+uid+'" class="opened">' + elementS.answer + '<div class="additionalInfo">'+ elementS.link + elementS.files + '<div class="clear"><!-- --></div></div></div>';

			$('a'+uid).className = 'cur act';

			addUidToPrintlink(uid);

		},
		onFailure: function(transport) {
			alert('Error: ' + transport.status + "/n" + transport.statusText);
		}
	});
}

function getParamFromUrl(url, param, paramSword) {
		var openedElements = '';
		var positionFrom = url.indexOf(param);

		//If the openedElements param has not been found, there arent any elements to add. Simply set openedElements to an empty string then.
		if (positionFrom == -1) {
			openedElements = ''
		} else {
			var elementsPositionFrom = positionFrom+param.length;
			var temp = url.substr(elementsPositionFrom);
			var positionTo = temp.indexOf('&');

			if (positionTo == -1) {
				openedElements = temp;
				positionTo = url.length;
			} else {
				openedElements = temp.substr(0, positionTo);
			}

			url = url.substr(0, positionFrom) + url.substr(positionTo);
		}

		var swordFrom = url.indexOf(paramSword)+paramSword.length;
		var swordTemp = url.substr(swordFrom);
		var swordTo = swordTemp.indexOf('&');
		var sword = false;
		if (sword == -1) {
			sword = swordTemp;
		} else {
			sword = swordTemp.substr(0, swordTo);
		}

		var parts = new Array();

		parts['before'] = url.substr(0, positionFrom);
		parts['params'] = openedElements;
		if (sword){
			parts['sword'] = sword;
		} else {
			parts['sword'] = '';
		}

		parts['after'] = url.substr(positionFrom+openedElements.length);
		return parts;
}

function addUidToPrintlink(uid) {
	var swordnew = '';
	var url = '';
	var openedElements = '';
	if ($('sword')) {
		swordnew = $('sword').value;
	}

	JSFE['tx_ssajaxfaq_pi1']['openedElements'][JSFE['tx_ssajaxfaq_pi1']['openedElements'].length] = uid;
	
	if(JSFE['tx_ssajaxfaq_pi1']['openedElements'].length)	{
		JSFE['tx_ssajaxfaq_pi1']['openedElements'].each(function (el) {
			if (el != '') {
				openedElements = openedElements+el+',';
			}
		});
	}

	openedElements = openedElements.substr(0, openedElements.length-1);
	setUrl(openedElements);
	return;



	var parts = getParamFromUrl($('printSelection').href, 'tx_ssajaxfaq_pi1%5BopenedElements%5D=', '&tx_ssajaxfaq_pi1%5Bsword%5D=');
	if (parts['params'] == '') {
		url = parts['before']+uid+parts['after']+'&tx_ssajaxfaq_pi1%5Bsword%5D='+swordnew;
	} else {
		url =  parts['before']+parts['params']+','+uid+parts['after']+'&tx_ssajaxfaq_pi1%5Bsword%5D='+swordnew;
	}

	printLinkUrl = url;
	$('printSelection').href = url;
}

function removeUidFromPrintlink(uid) {
		var printSelectionLink = $('printSelection');
		if(!printSelectionLink) return;
		var openedElements = '';
	
		if(JSFE['tx_ssajaxfaq_pi1']['openedElements'].length)	{
			JSFE['tx_ssajaxfaq_pi1']['openedElements'].each(function (el, index) {
				if (el != '' && el != uid) {
					openedElements = openedElements+el+',';
				} else {
					JSFE['tx_ssajaxfaq_pi1']['openedElements'][index] = '';
				}
			});
		}

		openedElements = openedElements.substr(0, openedElements.length-1);
		setUrl(openedElements);
		return;


		var parts = getParamFromUrl($('printSelection').href, 'tx_ssajaxfaq_pi1%5BopenedElements%5D=', '&tx_ssajaxfaq_pi1%5Bsword%5D=')

		var openedElementsArr = parts['params'].split(',');
		openedElementsArr[array_search(uid, openedElementsArr)] = '0';

		var newOpenedElements = '';
		if(openedElementsArr.length)	{
			openedElementsArr.each(function (el) {
				if (el != '0') {
					newOpenedElements = newOpenedElements+el+',';
				}
			});
		}
		newOpenedElements = newOpenedElements.substr(0, newOpenedElements.length-1);

		if (newOpenedElements){
			var url = parts['before']+newOpenedElements+parts['after'];
		} else{
			var url = parts['before']+parts['after'];
		}


}

function array_search(needle,haystack){
    for(var i in haystack){
        if(haystack[i]==needle){return i;}
    }
    return false;
}


function resetWait(sword){
	wait = false;
}

//dampft leerzeichen(-sequenzen) innerhalb einer zeichenkette auf ein einzelnes "space" ein;
String.prototype.superTrim = function () {
	return(this.replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""));
};
