// Mininova search suggestions - gives suggestions while you type in the search field in the header of each page


var searchfield = document.getElementById('search');
var sugbox = document.getElementById('searchsuggestions');
var queries = new Array();
var suggestions = new Array();
var searchValue;
var hoveredSuggestion = -1;


function buildSearch(topQueries) { // Construct the search suggestions

 if(document.cookie.indexOf('lastsearches=') != -1) { // Check for cached search queries

  var temp = document.cookie.substring(document.cookie.indexOf('lastsearches=')+13) + ';';
  var cookie = temp.substring(0, temp.indexOf(';'))

  cookieQueries = cookie.split('|'); // Put the cookie data in an array (global variable)

 }

 for(var i=0; i<cookieQueries.length; i++) {

  cookieQueries[i] = unescape(cookieQueries[i]); // Unescape the cookie data

  var duplicateIndex = topQueries.indexOf(cookieQueries[i]); // Check for duplicate search queries
  if(duplicateIndex != -1)
   topQueries.splice(duplicateIndex, 1);

 }

 queries = cookieQueries.concat(topQueries); // Merge the queries in one array


 // Search field settings
 searchfield.setAttribute('autocomplete', 'off');

 searchfield.onkeydown = function(ev) {
  try { searchKeyDown(event.keyCode); }
  catch(e) { searchKeyDown(ev.keyCode); }
 };

 searchfield.onkeyup = function(ev) {
  try { searchKeyUp(event.keyCode); }
  catch(e) { searchKeyUp(ev.keyCode); }
 };

 searchfield.onblur = function() {
  setTimeout(hideSugbox, 250);
 };

}


function hoverSuggestion(sug) {

 for(var i=0; i<suggestions.length; i++)
  sugbox.getElementsByTagName('a')[i].className = '';

 if(sug != -1) {
  sugbox.getElementsByTagName('a')[sug].className = 'hovered';
  hoveredSuggestion = sug;
 }

}


function searchKeyDown(kc) {
 if(sugbox.style.display == 'block') {

  if(kc != 38 && kc != 40)
    hoveredSuggestion = -1;

  if(kc == 38 && hoveredSuggestion != -1) { // Key code 38 is the up arrow key
   hoveredSuggestion--;
   hoverSuggestion(hoveredSuggestion);
   searchfield.value = suggestions[hoveredSuggestion];
  }

  if(kc == 40 && hoveredSuggestion < suggestions.length-1) { // Key code 40 is the down arrow key
   hoveredSuggestion++;
   hoverSuggestion(hoveredSuggestion);
   searchfield.value = suggestions[hoveredSuggestion];
  }

  if(kc == 38 && hoveredSuggestion == -1)
   searchfield.value = searchValue; // Recall the old search value

 }
}


function searchKeyUp(kc) {

 if(kc != 38 && kc != 40)
  searchValue = searchfield.value; // Save the current search field value

 if(searchfield.value != '' && kc != 13 && kc != 27 && kc != 38 && kc != 40) // Key code 13 is the enter key and 27 is the escape key
  giveSuggestions();

 if((searchfield.value == '' || kc == 27) && sugbox.style.display == 'block')
  hideSugbox();
 
}


function giveSuggestions() {

 suggestions = new Array(); // Clear the suggestions array

 for(var i=0; i<queries.length && suggestions.length<10; i++) {
  if(queries[i].indexOf(searchfield.value.toLowerCase()) == 0) // Queries that begin with the search field value
   suggestions.push(queries[i]);
 }

 for(var i=0; i<queries.length && suggestions.length<10; i++) {
  if(queries[i].indexOf(searchfield.value.toLowerCase()) > 0) // Queries that include the search field value (avoid duplicate queries)
   suggestions.push(queries[i]);
 }

 if(suggestions.length == 0)
  hideSugbox();

 else
  showSugbox();


 // Output the suggestions in HTML code
 sugbox.innerHTML = '';
 for (var i=0; i<suggestions.length; i++) {
  sugbox.innerHTML += '<a href="search.php?action=search&search=' + suggestions[i] + '" style="width:' + (searchfield.offsetWidth-6) + 'px;" onmouseover="hoverSuggestion(' + i + ')">' + suggestions[i] + '</a>';
 }

}


function showSugbox() {
 //Set the position and width of the suggestion box
 sugbox.style.top = (realOffset(searchfield, 'offsetTop') + searchfield.offsetHeight-1) + 'px';
 sugbox.style.left = realOffset(searchfield, 'offsetLeft') + 'px';
 sugbox.style.width = (searchfield.offsetWidth-2) + 'px';

 adHiders[0] = true;
 updateAd();
 sugbox.style.display = 'block';
}


function hideSugbox() {
 sugbox.style.display = 'none';
 adHiders[0] = false;
 updateAd();
}

