var vyletnik = {};
vyletnik.ui = {};

vyletnik.ui.Suggest = function (textbox, contentLoader) {
 var qTextbox;
 var qPanel;
 var qAllItems = [];
 var selected = null;
 
 function show() {
  qPanel.css('display', 'block');
 }
 function close() {
  qPanel.css('display', 'none');
  selected = null;
 }
 function select(pos) {
  if (selected !== null) {
   unselect(selected);
  }
  element = qAllItems[pos];
  element.css('background', '#F59B46');
  selected = pos;
 }
 function unselect(pos) {
  element = qAllItems[pos];
  element.css('background', 'none');
 } 
 function selectNext() {
  if (selected !== null) {
   if (selected === qAllItems.length - 1) {
    select(0);   
   } else {
    select(selected + 1);
   }
  } else {
   select(0);
  }
 }
 function selectPrev() {
  if (selected !== null) {
   if (selected === 0) {
    select(qAllItems.length - 1);   
   } else {
    select(selected - 1);
   }
  } else {
   select(qAllItems.length - 1);
  }  
 }
 function showHide() {
  if (qTextbox.val().length < 3) {
   if (qPanel.css('display') != 'none') {
    close();
   }
  } else {
   loadContent();
  }
 }
 function loadContent() {
  var currentValue = qTextbox.val();
  setTimeout(function () {
   if(currentValue === qTextbox.val()) {
    selected = null;
    contentLoader.load(currentValue, {
     setItems : function (items) {
      qPanel.empty();
      qAllItems = [];
      selected = null;
      jQuery.each(items, function (i, group) {
       addGroup(group);
      });
      if (qPanel.css('display') != 'block') {
       show();
      }
     }
    });
   }
  }, 300);
 }
 function addGroup(group) {
  if (jQuery(group.points).size() > 0) {
   if (typeof(group.points) != "undefined") {
	   qPanel.append('<h3>' + group.Nazev + '</h3>');
	   for (a in group.points) {
		   addItem(group.points[a]);
	   }
   }
   /*jQuery.each(group.points, function (i, item) {
    addItem(item);
   });*/
  }
 }
 function addItem(item) {
  var description = item.Info;
  if (description) {
   description = description.substr(0, 40);
  } else {
   description = '';
  }
  var hItem = '<div class="item">';
  hItem += '<img style="width:40px; height:40px;float: right" src="http://www.vyletnik.cz/img.php?f=' + item.image + '">';
  
  hItem += '<h4>' + item.Nazev;
  if (typeof(item.Kategorie) != "undefined" && item.Kategorie != "") {
	  hItem += ' <font class="font-size: 9px;">(' + item.Kategorie + ')</font>';
  }
  hItem += '</h4>';
  if (description) {
   hItem += '<p>' + description +'</p>';
  }
  hItem += '<div class="clear"></div>' + '</div>';  
   
  var qItem = jQuery(hItem);
  qItem.mouseover(function () {
   select(jQuery(this).data('pos'));
  });
  qItem.click(function () {
   document.location = item.vyletnikLink;
  });
  qAllItems[qAllItems.length] = qItem;
  qItem.data('info', item);
  qItem.data('pos', qAllItems.length - 1);
  qPanel.append(qItem);
 }
 function proccessKey(e) {
  if (e.keyCode == 40) {
   e.preventDefault();
   e.stopPropagation();
   selectNext();
  } else if (e.keyCode == 38) {
   e.preventDefault();
   e.stopPropagation();
   selectPrev();
  } else if (e.keyCode == 27) {
   close();
  } else if(e.keyCode == 13) {
   if (qAllItems[selected]) {
    e.preventDefault();
    e.stopPropagation();     
    document.location = qAllItems[selected].data('info').vyletnikLink;
   }
  }  
 }
 return {
  init : function () {
   qTextbox = jQuery(textbox);
   qTextbox.keyup(function (e) {
    if (e.keyCode != 40 && e.keyCode != 38 && e.keyCode != 27 && e.keyCode != 13) {
     showHide();
    } else {
     if(!jQuery.browser.mozilla) {
      proccessKey(e);
     }
    }
   });
   qTextbox.keypress(function (e) {
    proccessKey(e);
   });
   
   //pokud ztratime focus kliknutim na suggest panel
   var close_allowed = true;
   qTextbox.blur(function (e) {
    if (close_allowed === true) {
     close();
    }
   });
   qPanel = jQuery('#suggest');
   qPanel.mouseover(function () {
    close_allowed = false;
   });
   qPanel.mouseout(function () {
    close_allowed = true;
   });
  }
 };
};
vyletnik.ui.suggest = {};
vyletnik.ui.suggest.ContentLoader = function () {
 var cache = {};
 return {
  load : function (phrase, itemsSetter) {
   if(cache[phrase]) {
    itemsSetter.setItems(cache[phrase]);
   } else {
    jQuery.getJSON('http://' + location.host + '/ajax/hledej.php', {phrase : phrase}, function (items) {
     cache[phrase] = items;
     itemsSetter.setItems(items);
    });
   }
  }
 };
};
