/*
* jquery.suggest 1.1 - 2007-08-06
*
* Uses code and techniques from following libraries:
* 1. http://www.dyve.net/jquery/?autocomplete
* 2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js
*
* All the new stuff written by Peter Vulgaris (www.vulgarisoip.com)
* Feel free to do whatever you want with this file
*
*/
(function($) {
$.suggest = function(input, options) {
var $input = $(input).attr("autocomplete", "off");
var $results = $(document.createElement("ul"));
var timeout = false; // hold timeout ID for suggestion results to appear
var prevLength = 0; // last recorded length of $input.val()
var suggestTimer = false;
var searchCacheList = [];
var query = '';
var start = 0;
var mode = '';
var searchresultsPerPage = 0;
$results.addClass('suggestResults').appendTo($input.parent());
resetPosition();
$(window)
.load(resetPosition) // just in case user is changing size of page while loading
.resize(resetPosition);
$input.blur(function() {
setTimeout(function() { $results.slideUp() }, 200);
});
// help IE users if possible
try
{
$results.bgiframe();
} catch(e) { }
// I really hate browser detection, but I don't see any other way
if ($.browser.mozilla)
{
$input.keypress(processKey); // onkeypress repeats arrow keys in Mozilla/Opera
}
else
{
$input.keydown(processKey); // onkeydown repeats arrow keys in IE/Safari
}
function resetPosition()
{
/*
// requires jquery.dimension plugin
var offset = $input.offset();
$results.css({
top: (offset.top + input.offsetHeight) + 'px',
left: offset.left + 'px'
});
*/
}
function processKey(e)
{
// handling up/down/escape requires results to be visible
// handling enter/tab requires that AND a result to be selected
if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) || (/^13$|^9$/.test(e.keyCode) && getCurrentResult()))
{
if (e.preventDefault)
e.preventDefault();
if (e.stopPropagation)
e.stopPropagation();
e.cancelBubble = true;
e.returnValue = false;
switch(e.keyCode)
{
case 38: // up
prevResult();
break;
case 40: // down
nextResult();
break;
case 9: // tab
case 13: // return
selectCurrentResult();
break;
case 27: // escape
$results.slideUp();
break;
}
}
else if ($input.val().length != prevLength)
{
if (timeout)
{
clearTimeout(timeout);
}
timeout = setTimeout(suggest, options.delay);
prevLength = $input.val().length;
}
}
function suggest()
{
clearTimeout(suggestTimer);
suggestTimer = setTimeout(function(){startSearch();}, 800);
}
function startSearch()
{
start = 0;
query = $.trim($input.val());
options.searchTypeVal = options.searchTypeFieldId ? $(options.searchTypeFieldId).val() : options.searchTypeVal;
switch(options.searchTypeVal)
{
default:
case 'spot-gevel':
case 'spot-logo':
case 'spot-interieur':
case 'spot-uitgaan':
case 'spot-personeel':
case 'spot':
mode = 'zoekSpot';
break;
case 'plaats-uitgaan':
case 'plaats':
mode = 'zoekPlaats';
break;
case 'profiel':
mode = 'zoekProfiel';
break;
}
if (query.length >= options.minchars)
{
requestData(0);
}
else
{
$("#"+options.hiddenIdFieldId).val('');
$results.slideUp();
}
}
function requestData()
{
if ( searchCacheList[mode+'|'+query+'|'+start] == null )
{
$input.addClass('loading');
$.getJSON('ajaxcall.php', {mode: mode, s: query, source: 'suggest', z: start}, function(jsondata)
{
$results.slideUp();
var resultList = parseTxt(jsondata);
displayItems(resultList);
$input.removeClass('loading');
searchCacheList[mode+'|'+query+'|'+start] = resultList;
});
}
else
{
displayItems(searchCacheList[mode+'|'+query+'|'+start]);
}
}
function displayItems(resultList)
{
if ( resultList.count == 0 )
{
return;
}
if (resultList.length)
{
var html = '';
for (var i = 0; i < resultList.length; i++)
{
html += '