/*
  Jquery!MultiSelect 1.04
  - Jquery version required: 1.2.x
  
  Changelog:
  - 1.04 IE7 <em> tag replace fixed
       
  - 1.03 IE7 & IE6 crash fixed
       IE7 css fixed
  
  - 1.02 json parsing fixed
         remove element fixed
         
  - 1.01: some bugs fixed
  
  - 1.0: migration from prototype
*/

/* Coded by: emposha <admin@emposha.com> */
/* Copyright: Emposha.com <http://www.emposha.com/> - Distributed under MIT - Keep this message! */
/*
* elem - input element id or object
* list - preadded elements
* complete - autocomplete div id or object
* ajax - url to fetch json object
* height - maximum number of element shown before scroll will apear
*/


        
jQuery.facebooklist = function(data) {
    
    var reduceTopOffet = 100;
    var fadein = true;

    var addHiddenInput = function(value) {
      var input = document.createElement('input');
        $(input).attr({'type': 'hidden', 'name': (elem.attr('id')+'[]'), 'id': (elem.attr('id')+'[]'), 'value': value});
        return input;
    }
    
    suggestActiveItem = -1;
    suggestSetFocus = false;

    var getChar = function(e) {
      if(window.event) {
      keynum = e.keyCode;
    } else if(e.which) {
      keynum = e.which;
      }
      if (keynum == 8)
        return '';
        
      return String.fromCharCode(keynum);
    }

    var addItem = function(item, preadded) {
      
      var title = item.html().replace(/<em>/gi,'').replace(/<\/em>/gi,'');
      var value = (item.attr('val') && item.attr('val') != -1 ?item.attr('val'):title);
      var li = document.createElement('li');
      var txt = document.createTextNode(title);
      var aclose = document.createElement('a');
      var input = addHiddenInput(value);

      var span = document.createElement('span');

      $(li).attr({'val': value, 'class': 'bit-box', 'id': 'li'+item.attr('id')});
      
      //$(li).prepend(txt);
      $(span).prepend(txt);
      $(aclose).prepend(span);

      $(li).hide(); // breezy update
      $(aclose).attr({'class': 'closebutton','href': '#'});
      $(aclose).attr('title', removeTitle+' '+title);

      li.appendChild(aclose);
      li.appendChild(input);

      holder.appendChild(li);

      $(li).fadeIn('fast'); // breezy update
      
      
      //$(aclose).click(function() {
      // breezy update
      $(li).click(function() {
          //$(this).parent('li').fadeOut('fast',function() {
          $(this).fadeOut('fast',function() {
              // breezy update

              var redraw = $(this).parent('ul').children('li:last');
              $(this).remove();

              redrawInput(redraw);
          });
          return false;
      });

      if (!preadded) {
        holder.removeChild(document.getElementById('annoninput'));
        addInput();
      }

      suggestEmpty.show();
      suggestFilled.hide();
    }

    var addItemFeed = function(data,input) {
      var feedItemIndex = 1;
      feed.children('li[fckb=2]').remove();
      if(!data.length) {
        suggestEmpty.show();
        suggestFilled.hide();
      }

      $.each(data, function(i, val) {
        if(!val)
          return;

        if (val.caption) {
          feedItemIndex++;

          var li = document.createElement('li');
          $(li).attr({'val': val.value,'fckb': '2'});

          // breezy update
          // ignorovat velikost pismen ?
          var reg = new RegExp(input, "i");
          $(li).html(val.caption.replace(reg,'<em>'+input+'</em>'));

          if(feedItemIndex%2)
            $(li).attr('class', 'odd');

          feed.append(li);
        }
      });
    }

    var addTextItemFeed = function(value) {
      feed.children('li[fckb=1]').remove();
      var li = document.createElement('li');
        $(li).attr({'val':value,'fckb': '1'});
        $(li).html(value);
        feed.prepend(li);
    }

    var bindEvents = function () {
        //if($.browser.msie) {
          feed.children('li').each(function(i) {
            $(this).hover(
                function () {
                  //$(this).attr("class",$(this).attr("class")+" auto-focus");
                  suggest_set_active_item($(this), i);
                  /*$(this).addClass('auto-focus');
                  suggestActiveItem = i;*/
                }, 
                function () {
                  //$(this).attr("class",$(this).attr("class").replace(/auto-focus/i,''));
                  suggest_unset_active_item(feed, $(this));
                  /*$(this).removeClass('auto-focus');
                  suggestActiveItem = -1;*/
                }
            );
          });
        //}

        feed.children('li').unbind('click');

        feed.children('li').click( function () {
            //suggestSetFocus = true;
            
            complete.hide();
            addItem($(this));
            
            if (document.getElementById('maininput1'))
                document.getElementById('maininput1').value = '';
        });
    }

    // breezy update
    var redrawInput = function(li) {
      $(li).attr('style', 'width:50px'); // minimalni sirka, aby se prvek prekreslil
      var width = $(li).offset();
      if(width.left > 0) {
        $(li).attr({'style':'width:'+(inputWidth-(width.left-leftOffset.offset().left))+'px'});
      }

      suggestActiveItem = -1;
    }

    
    var defaultInput = true;
    
    var fadeInFast = function(input) {
        
        if (defaultInput) {
            //alert($(input).attr('value'));
            if ($(input).attr('value') == helpMe)
                $(input).attr('value', '');
            defaultInput = false;
        }
        complete.css('top', topOffset.offset().top - reduceTopOffet +'px');
        complete.fadeIn('fast');
        complete.css('left', leftOffset.offset().left - $('#search-suggest-offset').offset().left + 20 +'px');
    }
    
    var addInput = function () {
        var li = document.createElement('li');
        var input = document.createElement('input');

        $(li).attr({'class': 'bit-input', 'id': 'annoninput'});
        $(input).attr({'type': 'text', 'class': 'maininput', 'id': 'maininput1'});

        if ($('#fulltext').attr('value') != '' && $('#fulltext').attr('value') != null) {
            $(input).attr('value', $('#fulltext').attr('value'));
        }
        else {
            
            $(input).attr('value', helpMe);
        }

        li.appendChild(input);
        holder.appendChild(li);

        // breezy update
        redrawInput(li);

        // breezy update
        $(input).focus(function() {
            fadeInFast(input);
        });
        $(input).click(function() {
            fadeInFast(input);
        });
        $(input).keypress(function(e) {

            submitSearchForm(e);
            
            if (fadein)
                fadeInFast(input);

        });
        
        // breezy update
        $(input).blur(function() {
            complete.fadeOut('fast');
        });

      $(li).keypress(function(event) {
        if($.browser.opera && (event.keyCode == 40 || event.keyCode == 38 || event.keyCode == 13))
          return false;
      });

      $(li).keydown(function(event) {
        if(event.keyCode == 40) {
          //alert(feed.find('[class!="hover"]').length);
          //alert(suggestActiveItem);

          var tmp = suggestActiveItem+1;
          if(feed.find('li:eq('+(tmp)+')').length) {
            suggest_unset_active_item(feed);
            suggest_set_active_item(feed.find('li:eq('+(tmp)+')'), tmp);
          }

          event.stopPropagation();

          return false;

        } else if(event.keyCode == 38) {

          var tmp = suggestActiveItem-1;
          if(feed.find('li:eq('+(tmp)+')').length) {
            suggest_unset_active_item(feed);
            suggest_set_active_item(feed.find('li:eq('+(tmp)+')'), tmp);
          }

          event.stopPropagation();

          return false;

        } else if(event.keyCode == 13) {
          if(suggestActiveItem >= 0) {
            feed.find('li:eq('+suggestActiveItem+')').click();

            return false;
          }
        }
      });

      $(li).keyup(function(event) {
        if(event.keyCode == 40 || event.keyCode == 38)
          return false;

        var etext = $(input).val();
        // breezy update
        
        if(!etext) {
          //suggestEmpty.show();
          //suggestFilled.hide();
          return;
        }

        //addTextItemFeed(etext);
        if (ajax) {
            $.getJSON( ajax + etext, null,  function(data) {
                addItemFeed(data, etext);
                if (data == '') {
                    fadein = false;
                    complete.hide();
                }
                else
                    fadein = true;
                bindEvents();
            });
        }
        bindEvents();
        suggestEmpty.hide();

        
        suggestFilled.show();
        
      });

      if(suggestSetFocus) {
        $(input).focus();
        if($.browser.msie)
        // IE prvni focus ignoruje
          $(input).focus();
      }
    }

    ////////////////////////////////////////////////////////////////////////////
    // inicializace
    ////////////////////////////////////////////////////////////////////////////

    if (data.reduceTopOffet)
        reduceTopOffet = data.reduceTopOffet;
    
    var elem = data.input; // vstupni input
    if(!elem) {
      alert('No input specified.');
      return;
    }

    var inputWidth = 740;
    if(data.inputWidth)
      inputWidth = data.inputWidth; // sirka inputu

    /* Pozice naseptavace */

    var leftOffset;
    if(data.leftOffset) {
      if(typeof(data.leftOffset) == 'object')
        leftOffset = data.leftOffset;
      else 
        leftOffset = $(data.leftOffset);
    }

    var topOffset;
    if(data.topOffset) {
      if(typeof(data.topOffset) == 'object')
        topOffset = data.topOffset;
      else 
        topOffset = $(data.topOffset);
    }

    /* Dalsi prvky naseptavace */

    var removeTitle = 'Remove';
    if(data.removeLabel)
      removeTitle = data.removeLabel;

    var complete = data.suggestDiv; // DIV s kompletnim naseptavacem

    var ajax = data.backend; // skript pro ziskavani dat

    var suggestEmpty = data.suggestEmpty; // ID prvku, ktery se ma zobrazit, kdyz je vstupni input prazdny
    var suggestFilled = data.suggestFilled; // ID prvku, ktery se ma zobrazit, kdyz je vstupni input neprazdny

    var holderClass = data.selectedHolderClass;
    if(!data.selectedHolderClass)
      holderClass = data.selectedHolderClass; // CSS trida vybranych prvku

    if (typeof(elem) != 'object')
      elem = $(elem);
    if (typeof(complete) != 'object')
      complete = $(complete);

    if (typeof(suggestEmpty) != 'object')
      suggestEmpty = $(suggestEmpty);
    if (typeof(suggestFilled) != 'object')
      suggestFilled = $(suggestFilled);

    ////////////////////////////////////////////////////////////////////////////

    if($(data.suggestFilled)) {
      // vytvoreni UL seznamu pro polozky naseptavace
      var feed = document.createElement('ul');
      $(data.suggestFilled).append(feed);
      feed = $(feed);
    }

    // vytvoreni UL seznamu pro zobrazeni vybranych polozek
    var holder = document.createElement('ul');
    elem.css('display', 'none');
    $(holder).attr('class', holderClass);

    ////////////////////////////////////////////////////////////////////////////

    /* Zpracovani vychozich hodnot */

    if($(elem).val()) {
      var data = $(elem).val().split(';');
      $.each(data, function(i, val) {
        var item = {
          'innerHTML': val.substring(0, val.indexOf('#')),
          'val': val.substring(val.indexOf('#')+1)
        };
        if(item.val)
          addItem($(item),1);
      });
    }

    elem.before(holder);
    $(elem).remove();

    // prvotni vytvoreni input pole
    // pole se vytvari s mensim zpozdenim
    setTimeout(addInput, 100);

    return addItem;
}


function suggest_set_active_item(item, i) {
  item.addClass('auto-focus');
  suggestActiveItem = i;
}

function suggest_unset_active_item(list) {
  list.find('[class*="auto-focus"]').removeClass('auto-focus');
  suggestActiveItem = -1;
}

var hidefacebook = false;

