﻿var Tags = {
  add: function(el, brand)
  {
    var tag = el.getElementsByTagName('input')[0].value;
    if (!tag) return; // disallow empty tags
    
    Tools.post("post", "/_/AddTagToBrandByName", function(obj){
    
      Tags.repopulate(brand, obj);
      var input = el.getElementsByTagName('input')[0];
      input.value = '';
      input.className = input.className.replace('form42-invalid', '');
      
    }, {tag: tag, brand: brand});
    
    return false;
  },
  remove: function(el, brand)
  {
    var tag = el.parentNode.getElementsByTagName('a')[0].innerHTML; // maybe we should use firstChild.textNode instead?
    Tools.post("post", "/_/RemoveTagFromBrandByName", function(obj){
      Tags.repopulate(brand, obj);
    }, {tag: tag, brand: brand});
    return false;
  },
  repopulate: function(brand, obj)
  {
    var list = document.getElementById('brandTagsList');
    list.innerHTML = "";
    var xml = obj.responseXML;
    if (xml != null)
    {
      var nodes = xml.selectNodes("//record");
      for (var i = 0; i < nodes.length; i++)
      {
        var node = nodes[i];
        var tagName = node.selectSingleNode("@tag").value;
        list.innerHTML += 
          '<li><a href="/tags/'+tagName+'" class="tag">' + tagName + '</a> '+
          (node.selectSingleNode("@isOwner").value == 'True' ?
            '<a href="#" onclick="return Tags.remove(this, &quot;'+brand+'&quot;)">[x]</a></li>' : '');
      }
    }
    if (list.innerHTML == "") list.innerHTML = "<li>Geen tags</li>";
  }
};

var Suggest = {
  findLocation: function()
  {
    var suggest = document.getElementById('suggest').getElementsByTagName("li"); 
    var loc = -1;
    for(var i=0;i<suggest.length;i++)
    {
      if(suggest[i].className.indexOf(" selected") > -1)
      {
        loc = i;
        break;
      }
    }
    return loc;    
  },

  keyup: function(evt)
  {   
    var suggest = document.getElementById('suggest');
    switch (evt.keyCode)
    {
      // up
      case 38:          
      if(Suggest.findLocation() >= 1)
          Suggest.setSelection(suggest.childNodes[Suggest.findLocation() - 1]);
          break;
      // down
      case 40:
        if(suggest.childNodes.length > 0 && (Suggest.findLocation() + 1) < suggest.childNodes.length)
          Suggest.setSelection(suggest.childNodes[Suggest.findLocation() + 1]);                      
        break;
      default:
      
        if(this.suggestTimeout) {
          clearTimeout(this.suggestTimeout);
        }
        this.suggestTimeout = setTimeout(function() { 
          this.suggestTimeout = null;
          var el = evt.subject;
          if (el.id != "q" || el.value.length < 2) return;
          Tools.post("post", "/_/GetBrandsLikeValue", function(obj){
            suggest.innerHTML = "";
            var xml = obj.responseXML;
            if (xml != null)
            {
              var nodes = obj.responseXML.selectNodes("//record");
              for (var i = nodes.length - 1; i >= 0; i--)
              {
                var node = nodes[i];
                suggest.innerHTML +=
                  '<li class="unhover unselected" onclick="Suggest.setValue(this)">' +
                  node.selectSingleNode("@name").value + '</li>';
              }
              Spif.ClassNameAbstraction[nodes.length > 0 ? "remove" : "add"](suggest, 'hide');
            }        
          }, {value: el.value});
        }, 400);
      
        break;
    }
    return false;
  },
  
  setValue: function(el)
  {
    var value = el.firstChild.nodeValue;
    var q = document.getElementById('q');
    var suggest = document.getElementById('suggest');
    q.value = value;
    Suggest.hide();
  },
  
  keydown: function(evt)
  {
    var suggest = document.getElementById('suggest');
    var q = document.getElementById('q');      
        
    switch (evt.keyCode)
    {        
      // enter/tab
      case 13:
      case 9:
      if(Suggest.currentSelection != null)
        q.value = Suggest.currentSelection.firstChild.nodeValue;
        break;        
      default:
        break;
    }
  },
  
  setSelection: function(el)
  {
    Suggest.currentSelection = el;
    Spif.ClassNameAbstraction.replace(el,"unselected", "selected");      
  },
  
  show: function()
  {
    var suggest = document.getElementById('suggest');
    suggest.innerHTML = '';
    Spif.ClassNameAbstraction.remove(suggest, 'hide');
  },
  
  hide: function()
  {
    var suggest = document.getElementById('suggest');
    Spif.ClassNameAbstraction.add(suggest, 'hide');
  },
  
  onSearchBlur: function(evt)
  {
    evt = evt || event;
    setTimeout(function() { Suggest.hide(); }, 200);
  },
  
  belongsToSuggest: function(el)
  {
    while (el) {
      if (el == Suggest.getSuggest()) return true;
      el = el.parentNode;
    }
    return false;
  },
  
  getSuggest: function()
  {
    return document.getElementById('suggest');
  }
  
};

var position = 0;

Spif.DOMEvents.attach(document, "keyup", Suggest.keyup);
Spif.DOMEvents.attach(document, "keydown", Suggest.keydown);

Spif.DOMEvents.attach(window, "load", function() {
  document.getElementById("q").onblur = Suggest.onSearchBlur;
});

