var nklSearch_offset = 0;
var nklSearch_offsetNext = null;
var nklSearch_offsetPrev = null;
var nklSearch_current;

function nklSearchDisplay(r) {
	if (r) {
		var firstSearch = !nklSearch_current;

		nklSearch_current = r;

		// use posX/posY if given, otherwise find x,y for popup from search-box

		var x = 0;
		var y = 0;
		var deltaX = 0, deltaY = 0;

		if (!r.posX) {
			var qAskingTeaser = $('qAskingTeaser');
			if (qAskingTeaser) {
				if (r.searchType == 'asking') {
					containerPosition = qAskingTeaser.positionedOffset();
				} else {
					containerPosition = qAskingTeaser.positionedOffset();
				}
				if (containerPosition['left']) x = containerPosition['left'];
				if (containerPosition['top']) y = containerPosition['top'];
			}
			deltaY = 30;
			deltaX = 0;
		} else {
			x = r.posX;
			y = r.posY;
		}


		jQuery("#nklResults").resizable().parent().draggable({zIndex:2000, cursor: 'move'});
		jQuery("#nklResults").html(r.html);

		nklInitHelptexts();

		if (firstSearch) {
			$('nklResults').up().setStyle({
				position: 'absolute',
				top: y+deltaY+'px',
				left: x+deltaX+'px'
			});
		}


		// Attach event listener for onkeyup

		if (r.numChars) {
			jQuery('.char.known').keyup(function(e) {

				if ((e.keyCode >= 48) && (e.keyCode <= 222)) {

					var diff = 1 - this.value.length;
					if (diff < 0) {
						alert("En bokstav pr rute!");
						var char = this.value.substring(0,1);
						this.value = char;
					}
					for(i=0;i<this.form.elements.length;i++) {
						if(this==this.form.elements[i]) {

							nxt_idx = i + 1;
							if (this.form.elements[nxt_idx].type == "text") {
								this.form.elements[nxt_idx].focus();
								return;
							}
						}
					}
				}
			});
		}
	}
}

function nklSearch2(askingWord, knownChars, posX, posY) {
	$('nklResults').setStyle({
		display: 'block'
	});


	var q = '';
	if ((typeof(askingWord) != 'undefined') && (askingWord != '')) q += askingWord;
	if ((typeof(knownChars) != 'undefined') && (knownChars != '')) q += ',' + knownChars;

	var url = '/?puzzleMode=nkl.search';
	url += '&searchType=asking';
	url += '&q='+encodeURIComponent(q);
	if (typeof(posX) != 'undefined') url += '&posX='+posX;
	if (typeof(posY) != 'undefined') url += '&posY='+posY;

	jQuery("#nklSearchPane").html('<img src="/images/activity-indicator-30.gif" />');

	executeAjax(url, nklSearchDisplay, null);
}

function nklSearch(searchEl, searchType, offset) {
	var q;
	if (typeof(offset) == 'undefined') offset = 0;
	if ((offset == 'next') && (nklSearch_current)) offset = nklSearch_current.offsetNext;
	if ((offset == 'prev') && (nklSearch_current)) offset = nklSearch_current.offsetPrev;

	// find query: identify search button, query is previous sibling

	var e = $(searchEl);
	var siblings = e.siblings();
	if (siblings.length) {
		// user pressed "search"
		var queryEl = siblings[siblings.length-1];
		q = queryEl.value;
	} else {
		// user pressed "next" || "prev"
		q = (searchType == 'asking') ? document.getElementById('qAsking').value : document.getElementById('qAnswer').value;
	}

	// Query from search results pane or mini-search-box?

	var searchedFromResults = (jQuery(queryEl).parents("div#nklResults").length > 0);
	if (!searchedFromResults) {
		if (document.getElementById('qAskingTeaser'))
			document.getElementById('qAskingTeaser').value = '';

		if (document.getElementById('qAnswerTeaser'))
			document.getElementById('qAnswerTeaser').value = '';
	}

	$('nklResults').setStyle({
		display: 'block'
	});

	if(q.length >= 2) {
		var url = '/?puzzleMode=nkl.search';
		url += '&searchType='+searchType;
		url += '&q='+encodeURIComponent(q);
		url += '&offset='+offset;

		var searchForm = $('nklSearchForm');
		if (searchForm) {
			url += '&' + searchForm.serialize();
		} else {
			var numChars = document.getElementById('numChars');
			if (numChars && (numChars.value > 0)) url += '&numChars='+numChars.value;
		}

		jQuery("#nklSearchPane").html('<img src="/images/activity-indicator-30.gif" />');

		executeAjax(url, nklSearchDisplay, null);
	} else {
		alert('Du må angi minst 2 tegn')
	}
}

function nklSearch_hide() {
	$('nklResults').setStyle({
		display: 'none'
	});

	nklSearch_reset();
}

function nklSearch_reset() {

	jQuery('.char.known').each(function(el) {
		this.disabled = 'disabled';
	});

	if (document.getElementById('nklSearchResults'))
		document.getElementById('nklSearchResults').value = '';

	if (document.getElementById('numChars'))
		document.getElementById('numChars').value = '';

	if (document.getElementById('qAsking'))
		document.getElementById('qAsking').value = '';

	if (document.getElementById('qAnswer'))
		document.getElementById('qAnswer').value = '';

	if (document.getElementById('nklSearchKnownCharsCaption'))
		document.getElementById('nklSearchKnownCharsCaption').style.display = 'none';

	if (document.getElementById('nklSearchKnownCharsRow'))
		document.getElementById('nklSearchKnownCharsRow').style.display = 'none';
}

function setSelectedTab(element, prefix) {
	if(element) {
		// deselect tabs
		$(element).up().childElements().each(function(el){
			el.className = 'tabselector';
			// hide content panes
			$(prefix + '_' + el.id).style.display = 'none';
		});

		$(prefix + '_' + element.id).style.display = 'block';
		element.className = 'tabselector selected';
	}
}

function nklInitHelptexts() {
	jQuery(".nklHelp_searchAsking").wTooltip({
		content: '<strong>Søk med spørreord</strong><br />Den vanligste søkemetoden der du angir søkeordet slik det står i kryssordet og oppgir antall bokstaver i svarordet.	<br><br>	<u>Eksempler</u>:	<br>	Søkeord: <i>test</i> = Viser alle svarord uavhengig av antall bokstaver	<br><br>Angi antall bokstaver i svarordet slik:	<br><i>test,5</i> (antall bokstaver=5)	<br><i>test,pr?v?</i> (antall bokstaver=5)',
		style: {
			width:"200px",
			// above div#nklResults
			zIndex:20000
		}
	});
	jQuery(".nklHelp_searchAnswer").wTooltip({
		content: '<strong>Søk i svarord</strong><br />Søk etter svarord uten å bruke spørreord.<br /><br />Bruk erstatningstegn:<br /><strong>? (spørsmålstegn):</strong> Indikerer <b>en</b> ukjent bokstav i svarordet<br><br><b>* (stjerne):</b> Indikerer en eller flere ukjente tegn (ubestemt lengde)<br><br><u>Eksempel:</u><br>pr?ve gir \'prove\' og \'prøve\' (nøyaktig 5 bokstaver)<br>prø* gir alle svarord som begynner på prø (uavhengig av lengde),<br><i>*ere,5</i> gir alle svarord som slutter på \'ere\' og med 5 bokstaver.',
		style: {
			width:"200px",
			zIndex:20000
		}
	});
	jQuery(".nklHelp_searchFreetext").wTooltip({	
		content: '<strong>Fritekstsøk</strong><br />Søk etter alle spørreord i leksikonet som inneholder eller begynner med det ordet du søker etter.',
		style: {
			width:"200px",
			zIndex:20000
		}
	});
}

jQuery(document).ready(function() {
	nklInitHelptexts();
});