/**
 * author: Jon Hauksson
 * 2010-07-29
 * 
 * requires: bsn.DOM.js bsn.Ajax.js
 * 
 */

var verticalFixed = false;
var theThing;
var useBSNns;
var query;
var myFAQS = new Array();
var hidden = false;
if (useBSNns) {
	if (typeof (bsn) == "undefined")
		faq = {}
	_faq = faq;
} else {
	_faq = this;
}

if (typeof (_faq.DOM) == "undefined")
	_faq.DOM = {}

_faq.FaqSearch = function(fldID, param) {		
	
	$("#ajax-loader_img").hide();

	
	if (!document.getElementById)
		return false;

	this.fld = _faq.DOM.getElement(fldID);

	if (!this.fld)
		return false;

	this.nInputChars = 0;
	this.aSuggestions = [];
	this.iHighlighted = 0;

	// parameters object
	this.oP = (param) ? param : {};
	// defaults
	if (!this.oP.minchars)
		this.oP.minchars = 1;
	if (!this.oP.method)
		this.oP.meth = "post";
	if (!this.oP.varname)
		this.oP.varname = "input";
	if (!this.oP.className)
		this.oP.className = "FaqSearch";
	if (!this.oP.timeout)
		this.oP.timeout = 5000;
	if (!this.oP.delay)
		this.oP.delay = 500;
	if (!this.oP.maxheight && this.oP.maxheight !== 0)
		this.oP.maxheight = 250;
	if (!this.oP.cache)
		this.oP.cache = true;

	var pointer = this;
	theThing = this;

	this.fld.onkeyup = function() {
		pointer.getSuggestions(this.value)
	};
			
	this.fld.setAttribute("autocomplete", "off");
	// query = GetCookie('query');
	// this.fld.value = query;

	if (query != null) {
		this.fld.value = query;
		$('#searcharea').show('fast');
		
	}

	pointer.doAjaxRequest();
}

_faq.FaqSearch.prototype.getSuggestions = function(val) {

	if (val.length == this.nInputChars)
		return false;

	if (val.length < this.oP.minchars) {
		this.nInputChars = val.length;
		this.aSuggestions = [];
		this.clearSuggestions();
		return false;
	}

	if (false && val.length > this.nInputChars && this.aSuggestions.length
			&& this.oP.cache) {
		// get from cache
		var arr = [];
		for ( var i = 0; i < this.aSuggestions.length; i++) {
			if (this.aSuggestions[i].substr(0, val.length).toLowerCase() == val
					.toLowerCase())
				arr.push(this.aSuggestions[i]);
		}

		this.nInputChars = val.length;
		this.aSuggestions = arr;

		this.createList(this.aSuggestions);

		return false;
	}

	this.nInputChars = val.length;

	var pointer = this;
	clearTimeout(this.ajID);
	this.ajID = setTimeout(function() {
		pointer.doAjaxRequest()
	}, this.oP.delay);

	return false;
}

_faq.FaqSearch.prototype.doAjaxRequest = function() {

	if (this.fld.value == "") {
		$("#ajax-loader_img").hide();
		return;
	}
	
	if("Sök i hjälpen" == document.getElementById('faqField').value){
		return;
	}
	
	$("#ajax-loader_img").show();
	var pointer = this;
	

	
	// alert(lang);
	// create ajax request
	var url = this.oP.script + this.oP.varname + "=" + escape(this.fld.value);
	query = escape(this.fld.value);
	


	// SetCookie("query", this.fld.value);

	var meth = this.oP.meth;

	var onSuccessFunc = function(req) {
		pointer.setSuggestions(req)
	};
	var onErrorFunc = function(status) { /* alert("AJAX error: "+status); */
	};

	var myAjax = new _faq.Ajax;
	myAjax.makeRequest(url, meth, onSuccessFunc, onErrorFunc);

}

_faq.FaqSearch.prototype.setSuggestions = function(req) {
	var xml = req.responseXML;
	
	if (xml.getElementsByTagName('results') == null || xml.getElementsByTagName('results')[0] == null) {
		return;
	}
	// traverse xml
	//
	this.aSuggestions = [];
	var results = xml.getElementsByTagName('results')[0].childNodes;
	
	for ( var i = 0; i < results.length; i++) {
		if (results[i].hasChildNodes())
			this.aSuggestions.push(results[i].childNodes[0].nodeValue);
	}

	this.idAs = "as_" + this.fld.id;

	this.createList(this.aSuggestions);

}

function drawGrid(rows, cols) {
	var oTbl = document.createElement("Table");
	for (i = 0; i < rows; i++) {
		var oTR = oTbl.insertRow(i);
		for (j = 0; j < cols; j++) {
			var oTD = oTR.insertCell(j);
			oTD.InnerHTML = " ";
		}
	}
	document.body.appendChild(oTbl);
}

function faqGetPopularityString(popularity) {
	var pop = "";
	for (i = 0; i < popularity; i++) {
		pop += "|";
	}
	return pop;
}



function faqBuildTextTable() {

	$('#faq_search_table tr:last').after(html);
	for (j = 0; j < myFAQS.length; j++) {
		
		var faq = myFAQS[j];
		var html ='<tr><td><div class="hide" style="padding:3px" id="headingxxxx">' +
      		      '<a href="javascript:showAnswer(\'sanswer'+j+'\');">' +
      		      faq.heading +
      		      '</a>' +
      		      '<div class="answer" id="sanswer'+j+'" style="display:none;"> ' +
      		      '<p>' +
      		      faq.faqText +
      		      '</p>' +
      		    '</div>' +
      		    '</div>' +	
      		      '</td></tr>';		
		$('#faq_search_table tr:last').after(html);
	}

}

function getCoverName(bookId) {
	var name = '' + bookId;
	for (i = name.length; i < 5; i++) {
		name = '0' + name;
	}
	return name + ".jpg";
}


// *******

function drawGrid(rows, cols) {
	var oTbl = document.createElement("Table");
	for (i = 0; i < rows; i++) {
		var oTR = oTbl.insertRow(i);
		for (j = 0; j < cols; j++) {
			var oTD = oTR.insertCell(j);
			oTD.InnerHTML = " ";
		}
	}
	document.body.appendChild(oTbl);
}

// **

function faqRemoveRows() {

	var tbl = document.getElementById('faq_search_table');
	while (tbl != null && tbl.rows.length != 1) {
		for ( var i = 1; i < tbl.rows.length; i++) {
			tbl.deleteRow(i)
		}
		tbl = document.getElementById('faq_search_table');
	}
	//var mydiv = document.getElementById('sokresult_picholder');
	//while (mydiv.hasChildNodes()) {
	//	mydiv.removeChild(mydiv.lastChild);
	//}
}

function assembleFAQ(bookRow) {

	var bar = bookRow.split("|");
	for ( var i = 0; i < bar.length; i++) {
		return new faq(bar[0], bar[1], bar[2]);
	}
}

function faq(heading, question, faqText) {	
	
	this.heading = heading;
	this.question = question;
	this.faqText = faqText;	
}

var stopInsert = false;
_faq.FaqSearch.prototype.createList = function(arr) {

	myFAQS = [];
	stopInsert = false;

	faqRemoveRows();

	var pointer = this;
	if (arr.length == 0) {
		$("#ajax-loader_img").hide();
		return;
	}
	for ( var i = 0; i < arr.length && !stopInsert; i++) {
		arr[i] = arr[i].replace(/\+/g, " ");
		myFAQS[i] = assembleFAQ(unescape(arr[i]));

	}

	faqBuildTextTable();
	var scolumn = GetCookie('scolumn');
	var sup = GetCookie('sup');

	if (!isNaN(parseInt(scolumn))) {
		currentStopColumn = parseInt(scolumn);
		stopUp = sup;
	} else {
		currentStopColumn = 1;
	}

	stopInsert = false;
	$("#ajax-loader_img").hide();
	var pos = _faq.DOM.getPos(this.fld);

	var TAB = 9;
	var ESC = 27;
	var KEYUP = 38;
	var KEYDN = 40;
	var RETURN = 13;

	this.fld.onkeydown = function(ev) {
		var key = (window.event) ? window.event.keyCode : ev.keyCode;

		switch (key) {
		case TAB:
			pointer.setHighlightedValue();
			break;

		case RETURN:
			pointer.setHighlightedValue();
			break;

		case ESC:
			pointer.clearSuggestions();
			break;

		case KEYUP:
			pointer.changeHighlight(key);
			return false;
			break;

		case KEYDN:
			pointer.changeHighlight(key);
			return false;
			break;
		}

	};

	this.iHighlighted = 0;

	// remove FaqSearch after an interval
	//
	clearTimeout(this.toID);
	var pointer = this;
	this.toID = setTimeout(function() {
	}, this.oP.timeout);
}

_faq.FaqSearch.prototype.createListOrig = function(arr) {
	// clear previous list
	//
	this.clearSuggestions();

	// create and populate ul
	//
	var ul = _faq.DOM.createElement("ul", {
		id : this.idAs,
		className : this.oP.className
	});

	// alert(unescape("%C4cklig"));
	// alert(decode(unescape('%C4cklig')));
	var pointer = this;
	for ( var i = 0; i < arr.length; i++) {
		var a = _faq.DOM.createElement("a", {
			href : "#"
		}, unescape(arr[i]));
		a.onclick = function() {
			pointer.setValue(this.childNodes[0].nodeValue);
			return false;
		}
		var li = _faq.DOM.createElement("li", {}, a);
		ul.appendChild(li);
	}

	var pos = _faq.DOM.getPos(this.fld);
	ul.style.left = pos.x + "px";
	ul.style.top = (pos.y + this.fld.offsetHeight) + "px";
	ul.style.width = this.fld.offsetWidth + "px";
	ul.onmouseover = function() {
		pointer.killTimeout()
	}
	ul.onmouseout = function() {
		pointer.resetTimeout()
	}

	document.getElementsByTagName("body")[0].appendChild(ul);

	if (ul.offsetHeight > this.oP.maxheight && this.oP.maxheight != 0) {
		ul.style['height'] = this.oP.maxheight;
	}

	var TAB = 9;
	var ESC = 27;
	var KEYUP = 38;
	var KEYDN = 40;
	var RETURN = 13;

	this.fld.onkeydown = function(ev) {
		var key = (window.event) ? window.event.keyCode : ev.keyCode;

		switch (key) {
		case TAB:
			pointer.setHighlightedValue();
			break;

		case RETURN:
			pointer.setHighlightedValue();
			break;

		case ESC:
			pointer.clearSuggestions();
			break;

		case KEYUP:
			pointer.changeHighlight(key);
			return false;
			break;

		case KEYDN:
			pointer.changeHighlight(key);
			return false;
			break;
		}

	};

	this.iHighlighted = 0;

	// remove FaqSearch after an interval
	//
	clearTimeout(this.toID);
	var pointer = this;
	this.toID = setTimeout(function() {
		pointer.clearSuggestions()
	}, this.oP.timeout);
}

_faq.FaqSearch.prototype.changeHighlight = function(key) {
	var list = _faq.DOM.getElement(this.idAs);
	if (!list)
		return false;

	if (this.iHighlighted > 0)
		list.childNodes[this.iHighlighted - 1].className = "";

	if (key == 40)
		this.iHighlighted++;
	else if (key = 38)
		this.iHighlighted--;

	if (this.iHighlighted > list.childNodes.length)
		this.iHighlighted = list.childNodes.length;
	if (this.iHighlighted < 1)
		this.iHighlighted = 1;

	list.childNodes[this.iHighlighted - 1].className = "highlight";

	// alert(
	// list.childNodes[this.iHighlighted-1].firstChild.firstChild.nodeValue );

	this.killTimeout();
}

_faq.FaqSearch.prototype.killTimeout = function() {
	clearTimeout(this.toID);
}

_faq.FaqSearch.prototype.resetTimeout = function() {
	clearTimeout(this.toID);
	var pointer = this;
	this.toID = setTimeout(function() {
		pointer.clearSuggestions()
	}, 1000);
}

_faq.FaqSearch.prototype.clearSuggestions = function() {
	if (document.getElementById(this.idAs))
		_faq.DOM.removeElement(this.idAs);
	this.fld.onkeydown = null;
}

_faq.FaqSearch.prototype.setHighlightedValue = function() {
	if (this.iHighlighted) {
		this.fld.value = document.getElementById(this.idAs).childNodes[this.iHighlighted - 1].firstChild.firstChild.nodeValue;
		this.killTimeout();
		this.clearSuggestions();
	}
}

_faq.FaqSearch.prototype.setValue = function(val) {
	this.fld.value = val;
	this.resetTimeout();
}

/** ******** JON ********** */


function fireEvent(element, eventName) {
	evt = document.getElementById(element)[eventName];
 
	if (typeof(evt) == "function") {
		document.getElementById(element)[eventName]();
	} else {}
}

function scrollToTop() {
	scroll_clipper.scrollTop = 0;
}

function setQuery(value) {
	query = value;
}


function noenter() {
	
	return !(window.event && window.event.keyCode == 13);
}

function faqOnClick() {
		
	if ("Sök i hjälpen" == document.getElementById('faqField').value) {
		document.getElementById('faqField').value = "";
		document.getElementById('faqField').style.color = "#000";
	}
}

decode = function(utftext) {

	var string = "";
	var i = 0;
	var c = c1 = c2 = 0;

	while (i < utftext.length) {

		c = utftext.charCodeAt(i);

		if (c < 128) {
			string += String.fromCharCode(c);
			i++;
		} else if ((c > 191) && (c < 224)) {
			c2 = utftext.charCodeAt(i + 1);
			string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
			i += 2;
		} else {
			c2 = utftext.charCodeAt(i + 1);
			c3 = utftext.charCodeAt(i + 2);
			string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6)
					| (c3 & 63));
			i += 3;
		}

	}

	return string;
}

