
/**
 * requires $.datejs implementation where:
 *
 * $.datejs = {
 *     parse: function(str) {
 *       // return {
 *       //    iso: String
 *       //    formatted: String
 *       //    choices: [String,..,]
 *       // }
 *     }
 * }
 */

;(function($) {
    if (!$.suggest) {
      alert("$.suggest required");
    }
    if (!$.datejs) {
      alert("$.datejs required");
    }

    $.suggest("suggestdate", {
                request: function(val) {
                  var dateInfo = {};
                  try {
                    dateInfo = $.datejs.parse(val);
                  }
                  catch(ex) {
                    // ignore
                  }
                  var result = [];
                  if (dateInfo.formatted && dateInfo.iso) {
                    result.push({
                                  name: dateInfo.iso === "__now__" ? "now": dateInfo.formatted,
                                  value: dateInfo.iso
                                });
                  }
                  else if (dateInfo.choices) {
                    $.each(dateInfo.choices, function() {
                             result.push({name:String(this)});
                           });
                  }
                  this.response(result);
                  if (result.length) {
                    $("li:first", this.list).trigger("mouseover.suggest");
                  }
                },

                blur: function(e) {
                    if (this.input.data("dont_hide")) {
                        return;
                    }     

                    var o = this.options,
                        visible = this.pane.is(":visible") && 
                                  $("." + o.css.item, this.list).length,
                        s = this.get_selected(); 
                    
                    if (visible && s) {
                        this.onselect(s);
                    }
                    else {
                        this.check_required(e);
                    }
                    this.hide_all();
                },

                onselect: function($selected, focus) {
                  var data = $selected.data("data.suggest");
                  if (data) {
                    if (!data.iso) {
                      var dateInfo = $.datejs.parse(data.name);
                      data.value = dateInfo.iso;
                    }
                    this.input.val(data.name)
                      .data("data.suggest", data)
                      .trigger("fb-select", data);
                  }
                  else {
                    this.check_required();
                  }
                  if (focus) {
                    this.input.focus();
                  }
                }
              });

        $.extend($.suggest.suggestdate, {
                   defaults: {
                     nomatch: ('<div class="datetime-help">' +
                               'You can enter a date in many ways, just be sure to include the year!' +
                               '<div class="datetime-help-content">Try:</div>' +
                               '<ul class="property-help-list">' +
                               '<li class="property-help-listitem">January 2007</li>' +
                               '<li class="property-help-listitem">9/30/1986</li>' +
                               '<li class="property-help-listitem">2001</li>' +
                               '<li class="property-help-listitem">January 2nd 2005 </li>' +
                               '<li class="property-help-listitem">4/1975</li>' +
                               '</ul>' +
                               '</div>'),
                     status: ["Please enter a valid date/time", null, null]
                   }
                 });
})(jQuery);

