goog.provide('meetsoup.homepage');

goog.require('goog.array');
goog.require('goog.dom');
goog.require('goog.dom.forms');
goog.require('goog.events');
goog.require('goog.fx.dom');
goog.require('goog.style');


meetsoup.homepage.doFilter_ = function() {
  var filterElmsIds = ['dayValue', 'whoValue', 'whatValue'];
  var filterRegexes = []
  goog.array.forEach(filterElmsIds, function(filterElmId) {
    var filterValue = goog.dom.forms.getValue(goog.dom.getElement(filterElmId));
    if (filterValue) {
      var filterRegex = new RegExp("\\b" + filterValue + "\\b");
      goog.array.extend(filterRegexes, filterRegex);
    }
  });

  var allListings = goog.dom.getElementsByTagNameAndClass(
      goog.dom.TagName.DIV, 'listing');
  goog.array.forEach(allListings, function(listing) {
      goog.style.setStyle(listing, 'display', 'none');
      var className = listing.className;
      var display = true;
      for (i in filterRegexes) {
        if (!filterRegexes[i].test(className)) {
          display = false;
          break;
        }
      }
      if (display) {
        $(listing).fadeIn(250);
      }
  });
};

meetsoup.homepage.selectClick_ = function(allElms, selectedElm, sortValueElm, e) {
  goog.array.forEach(
      allElms, function(thisElm) {
        thisElm.className = thisElm.className.replace(' selected', '');
      });
  selectedElm.className += ' selected';

  var sortVal = goog.dom.forms.getValue(
      goog.dom.getElementsByTagNameAndClass(
          goog.dom.TagName.INPUT, '', selectedElm)[0]);
  goog.dom.forms.setValue(sortValueElm, sortVal);

  meetsoup.homepage.doFilter_();
};

meetsoup.homepage.tagClick_ = function(allElms, sortValueElm, e) {
  var hashText = e.target.innerHTML.toLowerCase();
  if (goog.string.contains(hashText, '#')) {
    hashText = hashText.substring(1);
  } else {
    hashText = (hashText == 'girls') ? 'female' : hashText;
    hashText = (hashText == 'guys') ? 'male' : hashText;
  }

  goog.array.forEach(allElms, function (button) {
    var inputElm = goog.dom.getElementsByTagNameAndClass(
        goog.dom.TagName.INPUT, '', button)[0];
    var buttonName = goog.dom.forms.getValue(inputElm);
    if (buttonName == hashText) {
      meetsoup.homepage.selectClick_(allElms, button, sortValueElm, e);
    }
  });
};

meetsoup.homepage.makeSelectListener_ = function(
    allElms, sortValueElm, tagElms) {
  goog.array.forEach(
    allElms, function(thisElm) {
      goog.events.listen(
          thisElm,
          goog.events.EventType.CLICK,
          goog.partial(
              meetsoup.homepage.selectClick_, allElms, thisElm, sortValueElm));
    });
  if (!tagElms) {
    return;
  }
  goog.array.forEach(
    tagElms, function(tagElm) {
      goog.events.listen(
          tagElm,
          goog.events.EventType.CLICK,
          goog.partial(
              meetsoup.homepage.tagClick_, allElms, sortValueElm));
    });
};

meetsoup.homepage.init = function() {
  var sortTypes = [
      ['dayButton', 'dayValue', ''],
      ['whoButton', 'whoValue', 'whoTag'],
      ['whatButton', 'whatValue', 'whatTag']]
  goog.array.forEach(
      sortTypes,
      function(sortType) {
        var allElms = goog.dom.getElementsByTagNameAndClass('', sortType[0]);
        var sortValueElm = goog.dom.getElement(sortType[1]);
        var tagElms = sortType[2] ?
            goog.dom.getElementsByTagNameAndClass(
                goog.dom.TagName.SPAN, sortType[2]) : [];
        meetsoup.homepage.makeSelectListener_(allElms, sortValueElm, tagElms);
      });

  meetsoup.homepage.doFilter_();
};
