/**
* Marco Polo v1.3.2
*
* A jQuery autocomplete plugin for the discerning developer.
*
* https://github.com/jstayton/jquery-marcopolo
*
* Copyright 2011 by Justin Stayton
* Released under the MIT License
* http://en.wikipedia.org/wiki/MIT_License
*/
(function(f){var j={};f.widget("mp.marcoPolo",{options:{cache:!0,compare:!1,data:{},delay:250,formatData:null,formatError:function(){return"<em>Your search could not be completed at this time.</em>"},formatItem:function(a){return a.title||a.name},formatMinChars:function(a){return"<em>Your search must be at least <strong>"+a+"</strong> characters.</em>"},formatNoResults:function(a){return"<em>No results for <strong>"+a+"</strong>.</em>"},hideOnSelect:!0,label:null,minChars:1,onChange:null,onError:null,
onFocus:null,onMinChars:null,onNoResults:null,onRequestBefore:null,onRequestAfter:null,onResults:null,onSelect:function(a){this.val(a.title||a.name)},param:"q",required:!1,selectable:"*",selected:null,url:null},keys:{DOWN:40,ENTER:13,ESC:27,UP:38},_create:function(){this.$input=this.element.addClass("mp_input");this.$list=f('<ol class="mp_list" />').hide().insertAfter(this.$input);this.autocomplete=this.$input.attr("autocomplete");this.$input.attr("autocomplete","off");this.ajax=null;this.ajaxAborted=
!1;this.documentMouseup=null;this.mousedown=this.focusReal=this.focusPseudo=!1;this.selected=null;this.selectedMouseup=!1;this.timer=null;this.value=this.$input.val();this._bindInput()._bindList()._bindDocument();this._initOptions()},_setOption:function(a,b){f.Widget.prototype._setOption.apply(this,arguments);this._initOptions(a,b)},_initOptions:function(a,b){var d=this,c={};typeof a==="undefined"?c=d.options:c[a]=b;f.each(c,function(a,b){switch(a){case "label":d.options.label=f(b).addClass("mp_label");
d._toggleLabel();break;case "selected":d._select(b,null);break;case "url":if(!b)d.options.url=d.$input.closest("form").attr("action")}});return d},change:function(a){a!==this.value&&(this.$input.val(a),this._change(a),this.focusPseudo?this._cancelPendingRequest()._hideAndEmptyList():this._toggleLabel())},search:function(a){var b=this.$input;typeof a!=="undefined"&&b.val(a);b.focus()},destroy:function(){var a=this.options;this.$list.remove();this.autocomplete!=="off"&&this.$input.removeAttr("autocomplete");
this.$input.removeClass("mp_input");a.label&&a.label.removeClass("mp_label");f(document).unbind("mouseup.marcoPolo",this.documentMouseup);f.Widget.prototype.destroy.apply(this,arguments)},list:function(){return this.$list},_bindInput:function(){var a=this,b=a.$input,d=a.$list;b.bind("focus.marcoPolo",function(){if(!a.focusReal)a.focusPseudo=!0,a.focusReal=!0,a._toggleLabel(),a.selectedMouseup?a.selectedMouseup=!1:(a._trigger("focus"),a._request(b.val()))}).bind("keydown.marcoPolo",function(b){var e=
f();switch(b.which){case a.keys.UP:b.preventDefault();a._showList()._highlightPrev();break;case a.keys.DOWN:b.preventDefault();a._showList()._highlightNext();break;case a.keys.ENTER:b.preventDefault();if(!d.is(":visible"))break;e=a._highlighted();e.length&&a._select(e.data("marcoPolo"),e);break;case a.keys.ESC:a._cancelPendingRequest()._hideList()}}).bind("keyup.marcoPolo",function(){b.val()!==a.value&&a._request(b.val())}).bind("blur.marcoPolo",function(){a.focusReal=!1;setTimeout(function(){if(!a.mousedown)a.focusPseudo=
!1,a._dismiss()},1)});return a},_bindList:function(){var a=this;a.$list.bind("mousedown.marcoPolo",function(){a.mousedown=!0}).delegate("li.mp_selectable","mouseover",function(){a._addHighlight(f(this))}).delegate("li.mp_selectable","mouseout",function(){a._removeHighlight(f(this))}).delegate("li.mp_selectable","mouseup",function(){var b=f(this);a._select(b.data("marcoPolo"),b);a.selectedMouseup=!0;a.$input.focus()});return a},_bindDocument:function(){var a=this;f(document).bind("mouseup.marcoPolo",
a.documentMouseup=function(){a.mousedown=!1;if(!a.focusReal&&a.$list.is(":visible"))a.focusPseudo=!1,a._dismiss()});return a},_toggleLabel:function(){var a=this.options.label;a.length&&(this.focusPseudo||this.$input.val()?a.hide():a.show());return this},_firstSelectableItem:function(){return this.$list.children("li.mp_selectable:visible:first")},_lastSelectableItem:function(){return this.$list.children("li.mp_selectable:visible:last")},_highlighted:function(){return this.$list.children("li.mp_highlighted")},
_removeHighlight:function(a){a.removeClass("mp_highlighted");return this},_addHighlight:function(a){this._removeHighlight(this._highlighted());a.addClass("mp_highlighted");return this},_highlightFirst:function(){this._addHighlight(this._firstSelectableItem());return this},_highlightPrev:function(){var a=this._highlighted().prevAll("li.mp_selectable:visible:first");a.length||(a=this._lastSelectableItem());this._addHighlight(a);return this},_highlightNext:function(){var a=this._highlighted().nextAll("li.mp_selectable:visible:first");
a.length||(a=this._firstSelectableItem());this._addHighlight(a);return this},_showList:function(){var a=this.$list;a.children().length&&a.show();return this},_hideList:function(){this.$list.hide();return this},_hideAndEmptyList:function(){this.$list.hide().empty();return this},_buildNoResultsList:function(a){var b=this.$input,d=this.$list,c=this.options,e=f('<li class="mp_no_results" />');(b=c.formatNoResults&&c.formatNoResults.call(b,a,e))&&e.html(b);this._trigger("noResults",[a,e]);b?(e.appendTo(d),
this._showList()):this._hideList();return this},_buildResultsList:function(a,b){for(var d=this.$input,c=this.$list,e=this.options,h=this.selected,g=e.compare&&h,i,k,m=!1,l=f(),j=0;b[j];j++)i=b[j],l=f('<li class="mp_item" />'),k=e.formatItem.call(d,i,l),l.data("marcoPolo",i),l.html(k).appendTo(c),g&&(e.compare===!0?k=h:(i=i[e.compare],k=h[e.compare]),i===k&&(this._addHighlight(l),g=!1,m=!0));c.children(e.selectable).addClass("mp_selectable");this._trigger("results",[b]);this._showList();m||this._highlightFirst();
return this},_buildSuccessList:function(a,b){var d=this.$input,c=this.options;this.$list.empty();c.formatData&&(b=c.formatData.call(d,b));f.isEmptyObject(b)?this._buildNoResultsList(a):this._buildResultsList(a,b);return this},_buildErrorList:function(a,b,d){var c=this.$input,e=this.$list,h=this.options,g=f('<li class="mp_error" />');e.empty();(c=h.formatError&&h.formatError.call(c,g,a,b,d))&&g.html(c);this._trigger("error",[g,a,b,d]);c?(g.appendTo(e),this._showList()):this._hideList();return this},
_buildMinCharsList:function(a){var b=this.$input,d=this.$list,c=this.options,e=f('<li class="mp_min_chars" />');if(!a.length)return this._hideAndEmptyList(),this;d.empty();(a=c.formatMinChars&&c.formatMinChars.call(b,c.minChars,e))&&e.html(a);this._trigger("minChars",[c.minChars,e]);a?(e.appendTo(d),this._showList()):this._hideList();return this},_cancelPendingRequest:function(){this.ajax?(this.ajaxAborted=!0,this.ajax.abort()):this.ajaxAborted=!1;clearTimeout(this.timer);return this},_change:function(a){this.selected=
null;this.value=a;this._trigger("change",[a]);return this},_request:function(a){var b=this,d=b.$input,c=b.options;b._cancelPendingRequest();a!==b.value&&b._change(a);b.timer=setTimeout(function(){var e={},h={},g,i=f();if(a.length<c.minChars)return b._buildMinCharsList(a),b;e[c.param]=a;h=f.extend({},c.data,e);g=c.url+(c.url.indexOf("?")===-1?"?":"&")+f.param(h);c.cache&&j[g]?b._buildSuccessList(a,j[g]):(b._trigger("requestBefore"),i=d.parent().addClass("mp_busy"),b.ajax=f.ajax({url:c.url,dataType:"json",
data:h,success:function(c){b._buildSuccessList(a,c);j[g]=c},error:function(a,c,d){b.ajaxAborted||b._buildErrorList(a,c,d)},complete:function(a,c){b.ajax=null;b.ajaxAborted=!1;i.removeClass("mp_busy");b._trigger("requestAfter",[a,c])}}))},c.delay);return b},_select:function(a,b){var d=this.$input,c=this.options.hideOnSelect;this.selected=a;if(!a)return this;c&&this._hideList();this._trigger("select",[a,b]);if(d.val()!==this.value)this.value=d.val(),this._hideAndEmptyList();return this},_dismiss:function(){var a=
this.$input,b=this.options;this._cancelPendingRequest()._hideAndEmptyList();b.required&&!this.selected&&(a.val(""),this._change(""));this._toggleLabel();return this},_trigger:function(a,b){var d="on"+a.charAt(0).toUpperCase()+a.slice(1),c=this.widgetEventPrefix.toLowerCase()+a.toLowerCase(),d=this.options[d];this.element.trigger(c,b);return d&&d.apply(this.element,b)}})})(jQuery);

/**
* Manifest v1.0.1
*
* A jQuery plugin that adds delight to selecting multiple values for an input.
*
* https://github.com/jstayton/jquery-manifest
*
* Copyright 2011 by Justin Stayton
* Released under the MIT License
* http://en.wikipedia.org/wiki/MIT_License
*/
(function(d,j){d.widget("mf.manifest",{options:{formatDisplay:function(a,b,c){return c?c.html():a},formatRemove:function(){return"X"},formatValue:function(a,b,c,e){return e?e.text():a},marcoPolo:!1,onAdd:null,onHighlight:null,onHighlightRemove:null,onRemove:null,onSelect:null,onSelectRemove:null,required:!1,separator:",",valuesName:null},_marcoPoloOptions:function(){var a=this,b=a.options;return{onFocus:function(){b.marcoPolo.onFocus&&b.marcoPolo.onFocus.call(this);a._resizeInput()},onSelect:function(c,
e){b.marcoPolo.onSelect&&b.marcoPolo.onSelect.call(this,c,e);a._add(c,e)},required:b.required}},keys:{BACKSPACE:8,DELETE:46,LEFT:37,RIGHT:39},_create:function(){this.$input=this.element.addClass("mf_input");this.$container=d('<div class="mf_container" />');this.$list=d('<ol class="mf_list" />');this.$measure=d('<span class="mf_measure" />');this.mpMousedown=this.mousedown=!1;this.originalWidth=this.$input.css("width");this.options.marcoPolo&&this._bindMarcoPolo();this._bindInput()._bindList()._bindContainer()._bindDocument();
this.$input.wrap(this.$container).before(this.$list).after(this.$measure);this.$container=this.$input.parent();this._styleMeasure()._resizeInput()},_setOption:function(a,b){var c=this.$input;switch(a){case "marcoPolo":this.options.marcoPolo?b?c.marcoPolo("option",d.extend({},b,this._marcoPoloOptions())):c.marcoPolo("destroy"):b&&(this._bindMarcoPolo(d.extend({},b,this._marcoPoloOptions())),c.marcoPolo("list").insertAfter(c.parent()));break;case "required":this.options.marcoPolo&&c.marcoPolo("option",
"required",b);break;case "valuesName":this.$list.find("input:hidden.mf_value").attr("name",b+"[]")}d.Widget.prototype._setOption.apply(this,arguments)},_bindMarcoPolo:function(a){var b=this,c=b.$input,e=b.options;a===j&&(a=d.extend({},e.marcoPolo,b._marcoPoloOptions()));c.marcoPolo(a);c.marcoPolo("list").bind("mousedown.manifest",function(){b.mpMousedown=!0});return b},_bindInput:function(){var a=this,b=a.$input,c=a.options;b.bind("keydown.manifest",function(c){a._resizeInput();if(!b.val())switch(c.which){case a.keys.BACKSPACE:case a.keys.DELETE:c=
a._selected();c.length?a.remove(c):a._selectPrev();break;case a.keys.LEFT:a._selectPrev();break;case a.keys.RIGHT:a._selectNext();break;default:a._removeSelected()}}).bind("keypress.manifest",function(d){!c.required&&d.which===c.separator.charCodeAt()&&(d.preventDefault(),b.val()&&a._add(b.val(),null))}).bind("keyup.manifest",function(){a._resizeInput()}).bind("blur.manifest",function(){setTimeout(function(){a.mousedown||a._removeSelected();a.mpMousedown||(c.marcoPolo&&c.required?a._resizeInput():
b.val()&&a._add(b.val(),null))},1)});return a},_bindList:function(){var a=this;a.$list.delegate("li","mouseover",function(){a._addHighlight(d(this))}).delegate("li","mouseout",function(){a._removeHighlight(d(this))}).delegate("li","mousedown",function(){a.mousedown=!0}).delegate("li","click",function(){a._toggleSelect(d(this))}).delegate("a.mf_remove","click",function(b){a.remove(d(this).closest("li"));b.preventDefault()});return a},_bindContainer:function(){var a=this;a.$container.bind("click.manifest",
function(){a.$input.focus()});return a},_bindDocument:function(){var a=this,b=a.$input;d(document).bind("mouseup.manifest",function(c){if(a.mousedown)a.mousedown=!1,d(c.target).is("li.mf_item, li.mf_item *")||a._removeSelected();if(a.mpMousedown)a.mpMousedown=!1,a.options.required?a._resizeInput():b.val()&&a._add(b.val(),null)});return a},container:function(){return this.$container},list:function(){return this.$list},_add:function(a,b){var c=this.$input;this.add(a,b);this.options.marcoPolo?c.marcoPolo("change",
""):c.val("");this._resizeInput();return this},add:function(a,b){var c=this.$input,e=this.options,f=d('<li class="mf_item" />'),h=d('<a href="#" class="mf_remove" title="Remove" />'),g=d('<input type="hidden" class="mf_value" />'),i=!0;f.data("manifest",a);f.html(e.formatDisplay.call(c,a,f,b));h.html(e.formatRemove.call(c,h,f));e.valuesName?g.attr("name",e.valuesName+"[]"):g.attr("name",c.attr("name")+"_values[]");g.val(e.formatValue.call(c,a,g,f,b));f.append(h,g);i=this._trigger("add",[a,f]);i!==
!1&&f.appendTo(this.$list)},remove:function(a){var b=this,c=d(),c=a instanceof jQuery?a:b.$list.children(a);c.each(function(){var a=d(this),c=!0,c=b._trigger("remove",[a.data("manifest"),a]);c!==!1&&a.remove()})},destroy:function(){this.options.marcoPolo&&this.$input.marcoPolo("destroy");this.$list.remove();this.$measure.remove();this.$input.unwrap().removeClass("mf_input").width(this.originalWidth);d(document).unbind(".manifest");d.Widget.prototype.destroy.apply(this,arguments)},_styleMeasure:function(){var a=
this.$input;this.$measure.css({fontFamily:a.css("font-family"),fontSize:a.css("font-size"),fontStyle:a.css("font-style"),fontVariant:a.css("font-variant"),fontWeight:a.css("font-weight"),left:-9999,letterSpacing:a.css("letter-spacing"),position:"absolute",textTransform:a.css("text-transform"),top:-9999,whiteSpace:"nowrap",width:"auto",wordSpacing:a.css("word-spacing")});return this},_measureText:function(a){var b=this.$measure,a=a.replace(/&/g,"&amp;").replace(/\s/g,"&nbsp;").replace(/</g,"&lt;").replace(/>/g,
"&gt;");b.html(a);return b.width()},_maxInputWidth:function(){var a=this.$input;return this.$container.width()-(a.outerWidth(!0)-a.width())},_resizeInput:function(){var a=this.$input,b;b=this._measureText(a.val()+"---");a.width(Math.min(b,this._maxInputWidth()));return this},_highlighted:function(){return this.$list.children("li.mf_highlighted")},_addHighlight:function(a){if(!a.length)return this;this._removeHighlighted();a.addClass("mf_highlighted");this._trigger("highlight",[a.data("marcoPolo"),
a]);return this},_removeHighlight:function(a){if(!a.length)return this;a.removeClass("mf_highlighted");this._trigger("highlightRemove",[a.data("marcoPolo"),a]);return this},_removeHighlighted:function(){return this._removeHighlight(this._highlighted())},_selected:function(){return this.$list.children("li.mf_selected")},_addSelect:function(a){if(!a.length)return this;this._removeSelected();a.addClass("mf_selected");this._trigger("select",[a.data("marcoPolo"),a]);return this},_removeSelect:function(a){if(!a.length)return this;
a.removeClass("mf_selected");this._trigger("selectRemove",[a.data("marcoPolo"),a]);return this},_removeSelected:function(){return this._removeSelect(this._selected())},_toggleSelect:function(a){return a.hasClass("mf_selected")?this._removeSelect(a):this._addSelect(a)},_selectPrev:function(){var a=this._selected(),b=d(),b=a.length?a.prev():this.$list.children(":last");b.length&&this._addSelect(b);return this},_selectNext:function(){var a=this._selected(),b=a.next();return b.length?this._addSelect(b):
this._removeSelect(a)},_trigger:function(a,b){var c="on"+a.charAt(0).toUpperCase()+a.slice(1),d=this.widgetEventPrefix.toLowerCase()+a.toLowerCase(),c=this.options[c];this.element.trigger(d,b);return c&&c.apply(this.element,b)}})})(jQuery);


