/**
 * author: Timothy Groves - http://www.brandspankingnew.net version: 1.1 -
 * 2006-09-20
 * 
 * requires: bsn.DOM.js bsn.Ajax.js
 * 
 */

var verticalFixed = false;
var theThing;
var useBSNns;
var query;
var myBooks = new Array();
var sortUp = false;
var listType = 1;
var currentSortColumn = 1;
var hidden = false;
var changeSort = true;
if (useBSNns) {
	if (typeof (bsn) == "undefined")
		bsn = {}
	_bsn = bsn;
} else {
	_bsn = this;
}

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

_bsn.AutoSuggest = function(fldID, param) {

	if (hidden) {
		$('#rounded_holder_main').hide();
	}
	$("#ajax-loader_img").hide();
	setListImg();
	// alert(document.getElementById('sokresult_top_bg').style);
	document.getElementById('tagField').style.color = "#606060";
	document.getElementById('tagField').value = "Sök bland alla ljudböcker";
	
	document.getElementById('searchFieldTop').style.color = "#606060";
	document.getElementById('searchFieldTop').value = "Sök bland alla ljudböcker";

	if (GetCookie('listType') != null) {
		listType = GetCookie('listType');
	}
	if (!document.getElementById)
		return false;

	this.fld = _bsn.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 = "autosuggest";
	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();
}

function hideBook() {
	$("#rounded_holder_book_main").hide();
}

function shoeBook() {
	$("#rounded_holder_book_main").show();
}

_bsn.AutoSuggest.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;
}

function SetCookie(cookieName, cookieValue, nDays) {
	var today = new Date();
	var expire = new Date();
	if (nDays == null || nDays == 0)
		nDays = 1;
	expire.setTime(today.getTime() + 3600000 * 24 * nDays);
	document.cookie = cookieName + "=" + escape(cookieValue) + ";expires="
			+ expire.toGMTString();
}

function GetCookie(cookieName) {
	var theCookie = "" + document.cookie;
	var ind = theCookie.indexOf(cookieName);
	if (ind == -1 || cookieName == "")
		return "";
	var ind1 = theCookie.indexOf(';', ind);
	if (ind1 == -1)
		ind1 = theCookie.length;
	return unescape(theCookie.substring(ind + cookieName.length + 1, ind1));
}

_bsn.AutoSuggest.prototype.doAjaxRequest = function() {

	if (this.fld.value == "") {
		$("#ajax-loader_img").hide();
		return;
	}
	
	if("Sök bland alla ljudböcker" == document.getElementById('tagField').value){
		return;
	}
	
	$("#ajax-loader_img").show();
	var pointer = this;
	var lang = '&lang=';

	if (document.searchForm.language1.checked) {
		lang += "sv";
	}
	if (document.searchForm.language2.checked) {
		if (lang.length > 4) {
			lang += '+';
		}
		lang += "en";
	}
	// alert(lang);
	// create ajax request
	var url = this.oP.script + this.oP.varname + "=" + escape(this.fld.value)
			+ lang;
	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 _bsn.Ajax;
	myAjax.makeRequest(url, meth, onSuccessFunc, onErrorFunc);

}

_bsn.AutoSuggest.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);
	
	copyQueryToTop();

}

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 getPopularityString(popularity) {
	var pop = "";
	for (i = 0; i < popularity; i++) {
		pop += "|";
	}
	return pop;
}

function doSort(value) {	
	if (changeSort) {
		sortUp = !sortUp;
	}

	if (currentSortColumn != value) {
		sortUp = true;
	}
	currentSortColumn = value;

	if (value == 1) {
		sortTitle();
	} else if (value == 2) {
		sortAuthor();
	} else if (value == 3) {
		sortNarrator();
	} else if (value == 4) {
		sortCategory();
	} else if (value == 5) {
		sortLength();
	} else if (value == 6) {
		sortPopularity();
	} else if (value == 7) {
		sortReleaseDate();
	} else if (value == 8) {
		sortGrade();
	}

	SetCookie('scolumn', currentSortColumn);
	SetCookie('sup', sortUp);

}

/* SORT AUTHOR */
function sortAuthor() {	
	myBooks = myBooks.sort(authorCompare);
	removeRows();
	buildTable();
}

function authorCompare(a, b) {
	var x = a.author.toLowerCase();
	var y = b.author.toLowerCase();
	var ret = ((x < y) ? -1 : ((x > y) ? 1 : 0));
	if (!sortUp) {
		ret = -ret;
	}
	return ret;
}

/* SORT NARRATOR */
function sortNarrator() {
	myBooks = myBooks.sort(narratorCompare);
	removeRows();
	buildTable();
}

function narratorCompare(a, b) {
	var x = a.narrator.toLowerCase();
	var y = b.narrator.toLowerCase();
	var ret = ((x < y) ? -1 : ((x > y) ? 1 : 0));
	if (!sortUp) {
		ret = -ret;
	}
	return ret;
}

/* SORT TITLE */
function sortTitle() {
	myBooks = myBooks.sort(titleCompare);
	removeRows();
	buildTable();
}

function titleCompare(a, b) {
	var x = a.title.toLowerCase();
	var y = b.title.toLowerCase();
	var ret = ((x < y) ? -1 : ((x > y) ? 1 : 0));
	if (!sortUp) {
		ret = -ret;
	}
	return ret;
}

/* SORT CATEGORY */
function sortCategory() {
	myBooks = myBooks.sort(categoryCompare);
	removeRows();
	buildTable();
}

function categoryCompare(a, b) {
	var x = a.category.toLowerCase();
	var y = b.category.toLowerCase();
	var ret = ((x < y) ? -1 : ((x > y) ? 1 : 0));
	if (!sortUp) {
		ret = -ret;
	}
	return ret;
}

/* SORT LENGTH */
function sortLength() {
	myBooks = myBooks.sort(lengthCompare);
	removeRows();
	buildTable();
}

function lengthCompare(a, b) {
	var ret = b.length2.toLowerCase() - a.length2.toLowerCase();
	if (!sortUp) {
		ret = -ret;
	}
	return ret;
}

/* SORT POPULARITY */
function sortPopularity() {
	myBooks = myBooks.sort(popularityCompare);
	removeRows();
	buildTable();
}

function popularityCompare(a, b) {
	var ret = b.popularity.toLowerCase() - a.popularity.toLowerCase();
	if (!sortUp) {
		ret = -ret;
	}
	return ret;

}

/* SORT RELEASE DATE */
function sortReleaseDate() {
	myBooks = myBooks.sort(releaseDateCompare);
	removeRows();
	buildTable();
}

function releaseDateCompare(a, b) {
	var ret = b.releaseDate.toLowerCase() - a.releaseDate.toLowerCase();
	if (!sortUp) {
		ret = -ret;
	}
	return ret;
}

/* SORT RELEASE DATE */
function sortGrade() {
	myBooks = myBooks.sort(gradeCompare);
	removeRows();
	buildTable();
}

function gradeCompare(a, b) {
	var ret = b.grade.toLowerCase() - a.grade.toLowerCase();
	if (!sortUp) {
		ret = -ret;
	}
	return ret;
}

function buildTable() {
	if (listType == 2) {
		buildTextTable();
	} else {
		buildIconTable();
	}

	//var docheight = document.getElementById("testint").offsetTop;
	//document.getElementById('hyllplan_vert_entire').style.height = (docheight - 280) + 'px';
	//verticalFixed = true;

}

function buildNoHitsTable() {

	// var html = '<tr ><td style="background:#fff;">&nbsp;</td></tr><tr>' +
	// '<td style="background:#fff;" align="left" width="10">' + '&nbsp;Inga
	// Träffar</tr></tr>';
	// $('#sokresult_list tr:last').after(html);
}

function buildTextTable() {
	var sortImg = '';
	if (!sortUp) {
		sortImg = '<img src="gfx/sortascending.png" style="padding:3px 3px 3px 0px;">';
	} else {
		sortImg = '<img src="gfx/sortdecending.png" style="padding:3px 3px 3px 0px;">';
	}
	var titleSortImg = '';
	var authorSortImg = '';
	var narratorSortImg = '';
	var categorySortImg = '';
	var popularitySortImg = '';
	var lengthSortImg = '';
	var gradeSortImg = '';
	var releaseSortImg = '';

	if (currentSortColumn == 1) {
		titleSortImg = sortImg;
	} else if (currentSortColumn == 2) {
		authorSortImg = sortImg;
	} else if (currentSortColumn == 3) {
		narratorSortImg = sortImg;
	} else if (currentSortColumn == 4) {
		categorySortImg = sortImg;
	} else if (currentSortColumn == 5) {
		lengthSortImg = sortImg;
	} else if (currentSortColumn == 6) {
		popularitySortImg = sortImg;
	} else if (currentSortColumn == 7) {
		releaseSortImg = sortImg;
	} else if (currentSortColumn == 8) {
		gradeSortImg = sortImg;
	}

	var html = '<tr class="first">'
			+ '<td width="185">'
			+ '<table><tr class="heading"><td>&nbsp;<a href="JavaScript:doSort(1);">'
			+ titleSortImg
			+ '</a></td><td><a  style="color:#000;" href="JavaScript:doSort(1);">Titel</a></td></tr></table></p>'
			+ '</td>'
			+ '<td width="115">'
			+ '<p><table><tr class="heading"><td><a href="JavaScript:doSort(2);document.scrollToTop(0,0);">'
			+ authorSortImg
			+ '</a></td><td><a style="color:#000;" href="JavaScript:doSort(2);document.scrollToTop(0,0);">Författare</a></td></tr></table></p>'
			+ '</td>'
			+ '<td width="90">'
			+ '<p><table><tr class="heading"><td><a style="color:#fff;" href="JavaScript:doSort(3)">'
			+ narratorSortImg
			+ '</a></td><td><a style="color:#000;" href="JavaScript:doSort(3)">Uppläsare</a></td></tr></table></p>'
			+ '</td>'
			+ '<td width="115">'
			+ '<p><table><tr class="heading"><td><a style="color:#fff;" href="JavaScript:doSort(4)">'
			+ categorySortImg
			+ '</a></td><td><a style="color:#000;" href="JavaScript:doSort(4)">Kategori</a></td></tr></table></p>'
			+ '</td>'
			+ '<td width="55">'
			+ '<p><table><tr class="heading"><td><a style="color:#fff;" href="JavaScript:doSort(5)">'
			+ lengthSortImg
			+ '</a></td><td><a style="color:#000;" href="JavaScript:doSort(5)">Längd</a></td></tr></table></p>'
			+ '</td>'
			+ '<td width="70">'
			+ '<p><table><tr class="heading"><td><a style="color:#fff;" style="text-decoration:none;" href="JavaScript:doSort(6)">'
			+ popularitySortImg
			+ '</a></td><td><a style="color:#000;" style="text-decoration:none;" href="JavaScript:doSort(6)">Popularitet</a></td></tr></table></p>'
			+ '</td>'
			+ '<td width="50">'
			+ '<p><table><tr class="heading"><td><a style="color:#fff;" href="JavaScript:doSort(7)">'
			+ releaseSortImg
			+ '</a></td><td><a style="color:#000;" href="JavaScript:doSort(7)">Utgiven</a></td></tr></table></a></p>'
			+ '</td>'
			+ '<td width="20">'
			+ '<p><table><tr class="heading"><td><a style="color:#fff;" href="JavaScript:doSort(8)">'
			+ gradeSortImg + '</a></td><td><a style="color:#000;" href="JavaScript:doSort(8)">Betyg</a>&nbsp;</td></tr></table></a></p>'
			+ '</td>' + '<tr class="' + styleName
			+ '"><td colspan="7" height="2"></td></tr>';
	$('#sokresult_list tr:last').after(html);
	for (j = 0; j < myBooks.length; j++) {

		var styleName = "even";
		if (j % 2 == 0) {
			styleName = "odd";
		}
		
	
		
		var aBook = myBooks[j];
	
		var html = '<tr class="' + styleName + '">';
		html += '<td style="padding:0px 0px 0px 3px;">';
		html += '<p><a style="color:#000;" href="/viewBook.action?scolumn='
				+ currentSortColumn + '&sup=' + sortUp + '&hide=true&query='
				+ query + '&programId=' + aBook.id + '">' + aBook.title
				+ '</a></p>';
		html += "</td>";
		html += "<td>";
		html += '<a style="color:#000;" href="JavaScript:doSearch(\''
				+ aBook.author.replace(/\'/g, " ") + '\');window.scrollBy(0,-5000);">'
				+ aBook.author + '</a>';
		html += "</td>";
		html += "<td>";
		html += '<a style="color:#000;" href="JavaScript:doSearch(\''
				+ aBook.narrator.replace(/\'/g, " ") + '\');window.scrollBy(0,-5000);">'
				+ aBook.narrator + '</a>';
		html += "</td>";
		html += "<td>";
		html += '<a style="color:#000;" href="JavaScript:doSearch(\''
				+ aBook.category + '\');window.scrollBy(0,-5000);">'
				+ aBook.category + '</a>';
		html += "</td>";
		html += "<td>";
		html += aBook.length;
		html += "</td>";
		html += "<td>";
		html += getPopularityString(aBook.popularity);
		html += "</td>";
		html += "<td>";
		html += aBook.releaseDate;
		html += "</td>";
		html += "<td>";
		html += aBook.grade;
		html += "</td>";
		html += "</tr>";
		$('#sokresult_list tr:last').after(html);
	}

}

function buildIconTable() {

	var html = '';
	var index = 1;

	var ni = document.getElementById('sokresult_picholder');
	for (j = 0; j < myBooks.length; j++) {
		var aBook = myBooks[j];

		html += '<div class="booksearch floatleft">';
		html += '<a href="/viewBook.action?hide=true&query=' + query
				+ '&programId=' + aBook.id + '"><img src="images/110x110/'
				+ getCoverName(aBook.id) + '"></a>';
		html += '<p><a style="color:#000;" href="viewBook.action?programId='
				+ aBook.id + '">' + aBook.title + '</a></p>';
		html += '</div>';
		if (index++ % 6 == 0) {

			html += '<div class="clear"></div>';
		}
		// html += '<td><img
		// src="/images/110x110/'+getCoverName(aBook.id)+'"></td>"';

	}

	var newdiv = document.createElement('div');

	newdiv.innerHTML = html;
	// $('#rounded_holder_main tr:last').after(html);
	ni.appendChild(newdiv);
}

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

function addRowToTablexxx(aBook) {

	var tbl = document.getElementById('sokresult_list');
	var row = document.createElement('tr');
	tbl.appendChild(row);
	// title, author, narrator, category, length, popularity, releaseDate, grade
	// cell 1
	var td = document.createElement('td');
	// var cell8 = row.insertCell(7);
	// var textNode8 = document.createTextNode(aBook.grade);
	// cell8.appendChild(textNode8);
	td.innerHTML = '<p><a href="/viewBook.action?programId=' + aBook.id + '">'
			+ aBook.title + '</a></p>';
	row.appendChild(td);

	// cell 2
	var cell2 = row.insertCell(1);
	var textNode2 = document.createTextNode(aBook.author);
	cell2.appendChild(textNode2);

	// cell 3
	var cell3 = row.insertCell(2);
	var textNode3 = document.createTextNode(aBook.narrator);
	cell3.appendChild(textNode3);

	// cell 4
	var cell4 = row.insertCell(3);
	var textNode4 = document.createTextNode(aBook.category);
	cell4.appendChild(textNode4);

	// cell 5
	var cell5 = row.insertCell(4);
	var textNode5 = document.createTextNode(aBook.length);
	cell5.appendChild(textNode5);

	// cell 6
	var cell6 = row.insertCell(5);
	var textNode6 = document
			.createTextNode(getPopularityString(aBook.popularity));
	cell6.appendChild(textNode6);

	// cell 7
	var cell7 = row.insertCell(6);
	var textNode7 = document.createTextNode(aBook.releaseDate);
	cell7.appendChild(textNode7);

	// cell 8
	var td = document.createElement('td');
	// var cell8 = row.insertCell(7);
	// var textNode8 = document.createTextNode(aBook.grade);
	// cell8.appendChild(textNode8);
	td.innerHTML = '<a href="http://www.axis.se">axis</a>';
	row.appendChild(td);

}

// *******

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 removeRows() {

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

function assembleBook(bookRow) {

	var bar = bookRow.split("|");

	// var str="Visit Microsoft!";
	// document.write(str.replace(/microsoft/i, "W3Schools"));
	for ( var i = 0; i < bar.length; i++) {
		return new book(bar[0], bar[1], bar[2], bar[3], bar[4], bar[5], bar[6],
				bar[7], bar[8], bar[10]);
	}
}

function book(id, title, author, narrator, category, length, popularity,
		releaseDate, grade, length2) {

	this.id = id;
	this.title = title;
	this.author = author;
	this.narrator = narrator;
	this.category = category;
	this.length = length;
	this.popularity = popularity;
	this.releaseDate = releaseDate;
	this.grade = grade;
	this.length2 = length2;
}

var stopInsert = false;
_bsn.AutoSuggest.prototype.createList = function(arr) {

	myBooks = [];
	stopInsert = false;

	removeRows();

	var pointer = this;
	if (arr.length == 0) {
		// show now hits
		buildNoHitsTable();

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

	}

	// buildTextTable();
	var scolumn = GetCookie('scolumn');
	var sup = GetCookie('sup');

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

	doSort(currentStopColumn);
	changeSort = true;
	stopInsert = false;
	$("#ajax-loader_img").hide();
	var pos = _bsn.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 autosuggest after an interval
	//
	clearTimeout(this.toID);
	var pointer = this;
	this.toID = setTimeout(function() {
	}, this.oP.timeout);
}

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

	// create and populate ul
	//
	var ul = _bsn.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 = _bsn.DOM.createElement("a", {
			href : "#"
		}, unescape(arr[i]));
		a.onclick = function() {
			pointer.setValue(this.childNodes[0].nodeValue);
			return false;
		}
		var li = _bsn.DOM.createElement("li", {}, a);
		ul.appendChild(li);
	}

	var pos = _bsn.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 autosuggest after an interval
	//
	clearTimeout(this.toID);
	var pointer = this;
	this.toID = setTimeout(function() {
		pointer.clearSuggestions()
	}, this.oP.timeout);
}

_bsn.AutoSuggest.prototype.changeHighlight = function(key) {
	var list = _bsn.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();
}

_bsn.AutoSuggest.prototype.killTimeout = function() {
	clearTimeout(this.toID);
}

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

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

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

_bsn.AutoSuggest.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 onClick() {
	
	$('#rounded_holder_main').show('fast');
	if ("Sök bland alla ljudböcker" == document.getElementById('tagField').value) {
		document.getElementById('tagField').value = "";
		document.getElementById('tagField').style.color = "#000";
	}
}

function copyQuery(){
	var q = document.getElementById('searchFieldTop').value;	
	document.getElementById('tagField').value = q;
	fireEvent("tagField", "onkeyup");
}

function copyQueryToTop(){
	var q = document.getElementById('tagField').value;	
	document.getElementById('searchFieldTop').value = q;
}

function onClickTop() {
	
	$('#searcharea').show('fast');
	
	if ("Sök bland alla ljudböcker" == document.getElementById('searchFieldTop').value) {
		document.getElementById('searchFieldTop').value = "";
		document.getElementById('searchFieldTop').style.color = "#000";
	}
}

// _bsn.AutoSuggest.prototype.doSearch = function(val){
function doSearch(val) {

	changeSort = false;
	theThing.fld.value = val;
	theThing.doAjaxRequest();
}

function doHideShow() {
	if (hidden) {
		hidden = false;
		$('#rounded_holder_main').show('slow');
	} else {
		hidden = true;
		$('#rounded_holder_main').hide('slow');
	}
}

function setListType(value) {
	listType = value;
	SetCookie('listType', listType);
	setListImg();
	removeRows();
	buildTable();
}

function setListImg() {
	var value = GetCookie('listType');
	if (value == 1) {
		document.getElementById('rowimg').src = "gfx/show_as_list_off.png";
		document.getElementById('iconimg').src = "gfx/show_as_pic.png";
	} else {
		document.getElementById('rowimg').src = "gfx/show_as_list_on.png";
		document.getElementById('iconimg').src = "gfx/show_as_pic_off.png";
	}
}

function setQuery(value) {

	query = value;
}

function setHide() {	
	hidden = true;
}

function doLanguage() {	
	changeSort = false;
	theThing.doAjaxRequest();
}

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

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;
}
