{I"
class:ETI"BundledAsset;�FI"logical_path;�TI"
hooch.js;�FI"
pathname;�TI"q/Users/gomayonqui/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/hooch-0.4.3/app/assets/javascripts/hooch.js;�FI"content_type;�TI"application/javascript;�TI"
mtime;�Tl+;DVI"length;�Tig�I"digest;�TI"%0fbd8162bcbcb545242a0e6f8a57f48d;�FI"source;�TI"g�var initHooch = function(){
  hooch = {
    Emptier: Class.extend({
      init: function($emptier){
        $target = $($emptier.data('target'));
        $emptier.click(function(e){
          $target.empty();
        })
      }
    }),
    Toggler: Class.extend({
      init: function(jq_obj){
        this.jq_obj = jq_obj;
        this.label = jq_obj.data('toggler');
        this.value = jq_obj.val();
        this.targets = $('[data-toggle_trigger="' + this.label + '"]');
        this.targets.hide();
        this.targets.filter('[data-toggle_value="' + this.value + '"]').show();
      }
    }),
    HoverOverflow: Class.extend({
      init: function(jq_obj){
        this.old_border = jq_obj.css('border-right');
        this.old_z_index = jq_obj.css('z-index');
        var hoverable = this;
        jq_obj.bind('mouseover',function(){
          hoverable.jq_obj.css({'overflow':'visible','z-index':'10000','border-right':'1px solid white'});
        });
        jq_obj.bind('mouseout',function(){
          hoverable.jq_obj.css({'overflow':'hidden','z-index':hoverable.old_z_index,'border-right':hoverable.old_border});
        });
      }
    }),
    HoverReveal: Class.extend({
      init: function($hover_revealer){
        $revealable = $hover_revealer.data('revealable')
        jq_obj.bind('mouseover',function(){
          $revealable.show();
        });
        jq_obj.bind('mouseout',function(){
          $revealable.hide();
        });

      }
    }),
    HideyButton: Class.extend({
      init: function($hidey_button){
        $hidey_button.hide();
        this.form = $hidey_button.parents('form');
        this.$hidey_button = $hidey_button;
        this.bindInputs();
      },
      bindInputs: function(){
        this.inputs = this.form.find('input,select,textarea');
        var hidey_button = this;
        this.cache_input_values();
        this.inputs.each(function(){
          $(this).bind("propertychange keyup input paste datechange change",function(){
            if(hidey_button.form_changed()){
              hidey_button.$hidey_button.show();
            } else {
              hidey_button.$hidey_button.hide();
            }
          })
        });
      },
      cache_input_values: function(){
        this.inputs.each(function(){
          if($(this).is(":checkbox")){
            $(this).data('oldstate',$(this).is(':checked'));
          } else {
            $(this).data('oldval',$(this).val());
          }
        })
      },
      form_changed: function(){
        var changed = false;
        this.inputs.each(function(){
          if($(this).is(":checkbox")){
            if($(this).data('oldstate') != $(this).is(':checked')){
              changed = true;
              return false;
            }
          }else{
            if($(this).data('oldval') != $(this).val()){
              changed = true;
              return false;
            }
          }
        })
        return changed;
      }
    }),
    Expandable: Class.extend({
      init: function($expandable){
        var expandable = this;
        this.expand_class = $expandable.data('expand-class');
        this.collapse_class = $expandable.data('collapse-class');
        this.$expandable = $expandable;
        $expandable.data('expandable',this);
        this.collapsers = []
        this.$collapser = $('[data-expand-id="' + $expandable.data('expand-id') + '"][data-collapser]');
        if(this.$collapser.length > 0){
          this.$collapser.each(function(){
            expandable.collapsers.push(new hooch.Collapser($(this),expandable))
          })
        }
        this.$expander = $('[data-expand-id="' + $expandable.data('expand-id') + '"][data-expander]');
        this.expanders = []
        this.$expander.each(function(){
          expandable.expanders.push(new hooch.Expander($(this),expandable))
        })
        this.initial_state = $expandable.data('expand-state');
        if(this.initial_state == 'expanded'){
          this.expand();
        } else {
          this.collapse();
        }
      },
      hide_expanders: function(){
        $.each(this.expanders, function(){
          this.hide();
        })
      },
      hide_collapsers: function(){
        $.each(this.collapsers, function(){
          this.hide();
        })
      },
      show_expanders: function(){
        $.each(this.expanders, function(){
          this.show();
        })
      },
      show_collapsers: function(){
        $.each(this.collapsers, function(){
          this.show();
        })
      },
      expand: function(){
        if(this.collapsers.length > 0){

          this.show_collapsers();
        }
        this.hide_expanders();
        if(this.expand_class){
          this.$expandable.addClass(this.expand_class)
          this.$expandable.removeClass(this.collapse_class)
        }else{
          this.$expandable.show();
        }
        this.state = 'expanded'
      },
      collapse: function(){
        if(this.collapsers.length > 0){
          this.hide_collapsers();
        }
        this.show_expanders();
        if(this.collapse_class || this.expand_class){
          this.$expandable.addClass(this.collapse_class)
          this.$expandable.removeClass(this.expand_class)
        }else{
          this.$expandable.hide();
        }
        this.state = 'collapsed'
      },
      toggle: function(){
        if(this.state == 'collapsed'){
          this.expand();
        } else {
          this.collapse();
        }
      }
    }),
    Expander: Class.extend({
      init: function($expander,target){
        this.$expander = $expander;
        this.target = target;
        this.expand_class = $expander.data('expand-class')
        this.collapse_class = $expander.data('collapse-class')
        if($expander.data('fake-dropdown')){
          target.$expandable.on('click',function(){
            target.toggle();
          })
          target.$expandable.on('mouseleave',function(){
            target.collapse();
          })
        }
        $expander.bind('click',function(){
          target.toggle();
        })
      },
      hide: function(){
        if(this.expand_class || this.collapse_class){
          if(this.expand_class){
            this.$expander.addClass(this.expand_class)
          }
          if(this.collapse_class){
            this.$expander.removeClass(this.collapse_class)
          }
        } else if(this.target.collapsers.length > 0) {
          this.$expander.hide();
        }
      },
      show: function(){
        if(this.expand_class || this.collapse_class){
          if(this.expand_class){
            this.$expander.removeClass(this.expand_class)
          }
          if(this.collapse_class){
            this.$expander.addClass(this.collapse_class)
          }
        } else if(this.target.collapsers.length > 0) {
          this.$expander.show();
        }
      }
    }),
    Collapser: Class.extend({
      init: function($collapser,target){
        this.$collapser = $collapser;
        $collapser.bind('click',function(){
          target.collapse();
        })
      },
      hide: function(){
        this.$collapser.hide();
      },
      show: function(){
        this.$collapser.show();
      }
    }),
    DisableForms: Class.extend({
      init: function($disable_container){
        $disable_container.find('input, select').each(function(){
          $(this).prop('disabled',true);
        });
      }
    }),
    Revealer: Class.extend({
      init: function($revealer){
        var revealer = this;
        this.$revealer = $revealer;
        this.children_id = this.$revealer.data('revealer-children-id');
        this.$all_children = $('[data-revealer_id="' + this.children_id + '"]');
        $revealer.bind('change',function(){
          revealer.reveal();
        });
        revealer.reveal();
      },
      reveal: function(){
        var sanitized_value = this.$revealer.val();
        this.$children = [];
        var revealer = this;
        this.$all_children.each(function(){
          var triggers = $(this).data('revealer-triggers');
          if(triggers){
            var revelation_triggers = eval('(' + triggers + ')');
            if($.inArray(sanitized_value,revelation_triggers) > -1){
              revealer.$children.push($(this));
            }
          } else {
            if(sanitized_value == $(this).data('revealer-trigger')){
              revealer.$children.push($(this));
            }
          }
        })
        this.hideChildren();
        this.revealChosenOnes();
      },
      hideChildren: function(){
        this.$all_children.hide();
      },
      revealChosenOnes: function(){
        $.each(this.$children,function(){ $(this).show(); });
      }
    }),
    TabGroup: Class.extend({
      init: function($tab_group){
        this.$tab_group = $tab_group;
        this.getName();
        this.tab_triggers = [];
        this.tab_triggers_by_id = {};
        this.getTabTriggerClass();
        this.createTabs();
        this.getConentParent();
        this.hideAll();
        this.handleDefault();
        hooch.TabGroup.addGroup(this);
      },
      createTabs: function(){
        var tab_group = this;
        this.$tab_group.find("[data-tab-trigger]").each(function(){
          var new_tab = new tab_group.tab_trigger_class($(this),tab_group);
          tab_group.tab_triggers.push(new_tab);
          tab_group.tab_triggers_by_id[new_tab.tab_id] = new_tab;
        })
      },
      getTabByPushState: function(state_value){
        var selected_tab = null;
        $.each(this.tab_triggers,function(index,trigger){
          if(trigger.push_state == state_value){
            selected_tab = trigger;
          }
        })
        return selected_tab;
      },
      getName: function(){
        this.name = this.$tab_group.data('tab-group');
      },
      getConentParent: function(){
        this.$content_parent = this.tab_triggers[0].getParent();
      },
      handleDefault: function(){
        if(this.$tab_group.data('default-tab')){
          this.default_tab = this.tab_triggers_by_id[this.$tab_group.data('default-tab')];
          this.default_tab.toggleTarget('replace');
        }
      },
      hideAll: function(trigger){
        $.each(this.tab_triggers,function(){
          this.hideTarget();
        })
      },
      getTabTriggerClass: function(){
        this.tab_trigger_class = hooch.TabTrigger;
      },
      deactivateTabTriggers: function(){
        $.each(this.tab_triggers,function(){
          this.$tab_trigger.removeClass('active');
        })
      },
      setActiveTab: function(tab_trigger){
        if(this.active_tab){
          var parent_height = this.$content_parent.height();
          this.$content_parent.css({'height': parent_height, 'overflow': 'hidden'});
        }
        this.hideAll();
        this.deactivateTabTriggers();
        this.active_tab = tab_trigger;
        tab_trigger.revealTarget();
      },
      resize: function(){
        this.$content_parent.css({'height': 'auto', 'overflow': 'visible'});
      },
      getActiveTab: function(){
        return this.active_tab;
      }
    }),
    TabTrigger: Class.extend({
      init: function($tab_trigger,tab_group){
        this.$tab_trigger = $tab_trigger;
        this.tab_group = tab_group;
        this.tab_group_name = tab_group.name;
        this.tab_id = $tab_trigger.data('tab-target-id');
        this.getPushState();
        this.getTarget();
        var tab_trigger = this;
        $tab_trigger.on('click', function(e){
          e.preventDefault();
          tab_trigger.toggleTarget()
        })
      },
      getTarget: function(){
        this.$target = $('[data-tab-id="' + this.tab_id + '"]');
      },
      getPushState: function(){
        if(this.$tab_trigger.data('push-state') != null && this.$tab_trigger.data('push-state') != ""){
          this.push_state = this.$tab_trigger.data('push-state')
        }
      },
      toggleTarget: function(state_behavior){
        var was_visible = this.$target.is(':visible');
        if(!was_visible){
          this.tab_group.setActiveTab(this);
          this.resize();
          var change_history = true;
          var history_method = 'pushState'
          if('no history' == state_behavior){
            change_history = false
          } else if('replace' == state_behavior){
            history_method = 'replaceState'
          }
          if (this.push_state && change_history) {
            var current_state = new hooch.IhHistoryState(history.state)
            current_state.addState(this.tab_group_name, this.push_state);
            history[history_method](current_state.state, null, current_state.toUrl());
          }
        }
      },
      hideTarget: function(){
        this.$target.hide();
      },
      revealTarget: function(){
        this.$target.show();
        this.$tab_trigger.addClass('active');
      },
      getParent: function(){
        return this.$target.parent();
      },
      resize: function(){
        this.tab_group.resize();
      }
    }),
    IhHistoryState: Class.extend({
      init: function(state){
        this.state = jQuery.extend(true, {}, state);
      },
      toQueryString: function(){
        return $.param(this.state)
      },
      toUrl: function(){
        return [location.protocol, '//', location.host, location.pathname, '?', this.toQueryString()].join('');
      },
      addState: function(key,value){
        var new_state = {}
        new_state[key] = value
        this.state = $.extend(true, this.state, new_state);
      }
    }),
    GoProxy: Class.extend({
      init: function($proxy){
        this.first_submit = true;
        var go_proxy = this;
        go_proxy.$proxy = $proxy;
        go_proxy.target = go_proxy.getTarget();
        go_proxy.prevent_double_submit = $proxy.data('prevent-double-submit')
        switch($proxy.get(0).nodeName.toLowerCase()){
          case 'input':
            switch($proxy.attr('type')){
              case 'checkbox':
              default:
                $proxy.on('change',function(){
                  go_proxy.doItNow();
                })
              break;
            }
            break;
          case 'select':
            $proxy.on('change',function(){
              go_proxy.doItNow();
            })
          break;
          case 'a':
          default:
            $proxy.on('click',function(e){
              e.preventDefault();
              go_proxy.doItNow();
              return false;
            });
            break;
        }
      },
      doable: function(){
        return(this.first_submit || !this.prevent_double_submit)
      }
    }),
    FieldFiller: Class.extend({
      init: function($field_filler){
        this.$field_filler = $field_filler
        this.value = $field_filler.data('value');
        this.target = $($field_filler.data('target'));
        var field_filler = this
        this.$field_filler.bind('click', function(e){field_filler.fill(e)})
      },
      fill: function(e){
        e.preventDefault();
        this.target.val(this.value);
        return false;
      }
    }),
    CheckboxProxy: Class.extend({
      init: function($proxy){
        this.$proxy = $proxy;
        this.target = $($proxy.data('target'));
        var checkbox_proxy = this;
        if(checkbox_proxy.target.prop('checked')){
          this.$proxy.html("✓");
        }
        $proxy.on('click',function(){
          if(checkbox_proxy.target.prop('checked')){
            checkbox_proxy.uncheck();
          }else{
            checkbox_proxy.check();
          }
        })
      },
      uncheck: function(){
        this.target.prop('checked', false);
        this.$proxy.html("");
      },
      check: function(){
        this.target.prop('checked', true);
        this.$proxy.html("✓");
      }
    }),
    Remover: Class.extend({
      init: function($remover){
        $target = $($remover.data('target'));
        $remover.click(function(e){
          $target.remove();
        })
      }
    }),
    Link: Class.extend({
      init: function($link){
        $link.click(function(){
          window.location = $link.attr('href');
        })
      }
    }),
    CheckboxHiddenProxy: Class.extend({
      init: function($checkbox){
        this.checked_value = $checkbox.data('checked-value');
        this.unchecked_value = $checkbox.data('unchecked-value');
        var target_selector = $checkbox.data('target');
        this.target = $(target_selector);
        var checkbox = this;
        $checkbox.click(function(){
          if ($(this).is(':checked')) {
            checkbox.target.val(checkbox.checked_value);
          } else {
            checkbox.target.val(checkbox.unchecked_value);
          }
        })
      }
    }),
    PreventDoubleSubmit: Class.extend({
      init: function($clickable){
        this.$clickable = $clickable;
        var double_click_preventer = this;
        switch($clickable.get(0).nodeName.toLowerCase()){
          case 'form':
            $clickable.submit(function(e){ double_click_preventer.preventItNow(); });
            break;
          case 'input':
          default:
            $clickable.click(function() {
              setTimeout(function(){
                $clickable.attr("disabled", "disabled");
              }, 10);
            });
            break;
        }
      },
      preventItNow: function(){
        this.$clickable.submit(function(e){ e.preventDefault(); return false; });
      }
    }),
    PreventDoubleLinkClick: Class.extend({
      init: function($clickable){
        $clickable.click(function(e) {
          if($clickable.data('clicked')) {
            e.preventDefault();
            return false;
          } else {
            $clickable.data('clicked',true);
            return true;
          }
        });
      }
    }),
    ReloadPage: Class.extend({
      init: function(reload_page){
        window.location.href = reload_page;
      }
    }),
    FakeSelect: Class.extend({
      init: function($fake_select){
        this.select_display = $fake_select.find('[data-select-display]')
        this.real_select = $fake_select.find('input')
        var fake_select = this
        $fake_select.find('[data-select-value][data-select-name]').each(function(){
          new hooch.FakeOption($(this),fake_select)
        })
      },
      select: function(fake_option){
        this.select_display.html(fake_option.select_name);
        this.real_select.val(fake_option.select_value);
        this.select_display.trigger('click');
      }
    }),
    FakeOption: Class.extend({
      init: function($fake_option,$fake_select){
        this.select_value = $fake_option.data('select-value')
        this.select_name = $fake_option.data('select-name')
        var fake_option = this
        $fake_option.on('click',function(){
          $fake_select.select(fake_option)
        })
      }
    }),
    Sorter: Class.extend({
      init: function($sorter){
        this.$sorter = $sorter;
        this.width = $sorter.width();
        this.getSortElements();
        var sorter = this
        $(window).on('mouseup', function(e){
          sorter.onMouseup();
        });
        $(window).on('mousemove', function(e){
          sorter.onMousemove(e)
        })
      },
      onMousemove: function(e){
        if(this.dragging_element){
          this.handleMouseMove(e)
        } else {
          var pressed_element = this.getPressedElement()
          if(pressed_element){
            pressed_element.setDragging()
            this.handleMouseMove(e)
          }
        }
        return true
      },
      handleMouseMove: function(e){
        hooch.pauseEvent(e)
        this.dragging_element.dragging = true
        this.redrawDraggingElement(e);
        this.refreshSequence(e)
        return false
      },
      onMouseup: function(){
        if(this.dragging_element){
          var tmp_dragging_element = this.dragging_element
          this.removeDraggingElement()
          if(tmp_dragging_element.dragging){
            this.sendSort()
          }
          tmp_dragging_element.dragging = false
        }
        var pressed_element = this.getPressedElement()
        if(pressed_element){
          pressed_element.unSetPressed()
        }
      },
      getPressedElement: function(){
        var possible_pressed_element = $.grep(this.sort_elements, function(sort_element,i){return sort_element.pressed})
        if(possible_pressed_element.length > 0){
          return possible_pressed_element[0]
        }
        return false
      },
      getSortElements: function(){
        this.$sort_elements = this.$sorter.children()
        this.sort_elements = []
        var sorter = this;
        this.$sort_elements.each(function(){
          var sort_element = new hooch.SortElement($(this),sorter)
          sorter.sort_elements.push(sort_element)
        })
        this.row_height = this.sort_elements[0].height;
        var elem_widths = this.sort_elements.map(function(sort_element,i,arr){return sort_element.width})
        this.min_elem_width = Math.min.apply(null,elem_widths);
        this.refreshGrid();
        if((this.min_elem_width * 2) <= this.width){
          this.mode = 'Grid'
        } else {
          this.mode = 'Vertical'
        }
      },
      refreshGrid: function(){
        this.rows = {}
        var sorter = this
        $.each(this.sort_elements,function(i,sort_element){
          if(sort_element != sorter.dragging_element){
            this_element = sort_element
          } else {
            this_element = sort_element.placeholder
          }
          var elem_top = this_element.getOffset().top;
          if(!sorter.rows[elem_top]){
            sorter.rows[elem_top] = []
          }
          sorter.rows[elem_top].push(this_element)
        })
        this.row_keys = Object.keys(this.rows).map(function(val,i){return parseInt(val)}).sort(sorter.numberSort)
        $.each(this.rows, function(row_key,row){row.sort(sorter.elementHorizontalSort)})
      },
      redrawDraggingElement: function(e){
        this.dragging_element.setPosition(e);
      },
      refreshSequence: function(){
        var target_location = this.dragging_element.getCenter()
        var refresh_method = this['refreshSequence' + this.mode]
        refresh_method.call(this, target_location)
      },
      refreshSequenceGrid: function(target_location){
        var dragging_element = this.dragging_element
        if(!this.withinCurrentRow(target_location.y)){
          this.seekCurrentRow(target_location)
        }
        if('end' == this.current_row_key){
          var last_element = this.getLastElement();
          if(!last_element.is_placeholder){
            last_element.$sort_element.after(dragging_element.placeholder.$sort_element)
            this.refreshGrid()
          }
        } else if('begin' == this.current_row_key){
          var first_element = this.getFirstElement();
          if(!first_element.is_placeholder){
            first_element.$sort_element.before(dragging_element.placeholder.$sort_element)
            this.refreshGrid()
          }
        } else {
          var hovered_element = this.getHoveredElementHorizontal(target_location);
          if(hovered_element){
            if('leftmost' == hovered_element){
              var leftmost_element = this.current_row[0]
              leftmost_element.$sort_element.before(dragging_element.placeholder.$sort_element)
              this.refreshGrid()
            } else {
              hovered_element.$sort_element.after(dragging_element.placeholder.$sort_element);
              this.refreshGrid()
            }
          }
        }
      },
      refreshSequenceVertical: function(target_location){
        var dragging_element = this.dragging_element
        var hovered_element = this.getHoveredElementVertical(target_location)

        if(hovered_element){
          if('first' == hovered_element){
            var first_key = this.row_keys[0]
            var first_element = this.rows[first_key][0]
            first_element.$sort_element.before(dragging_element.placeholder.$sort_element)
            this.refreshGrid()
          } else {
            hovered_element.$sort_element.after(dragging_element.placeholder.$sort_element)
            this.refreshGrid()
          }
        }
      },
      rowAfter: function(row){
        return this.row_keys[this.row_keys.indexOf[row] + 1]
      },
      elemAfter: function(row, elem){
        return row[row.indexOf(elem) + 1]
      },
      seekCurrentRow: function(target_location){
        var sorter = this
        var row_key = $.grep(this.row_keys,function(rowY,i){
          var nextRowY = sorter.rowAfter(rowY)
          var below_top_edge = target_location.y >= rowY
          if(nextRowY){
            var above_bottom_edge = target_location.y < nextRowY
          } else {
            var above_bottom_edge = target_location.y < (rowY + sorter.row_height)
          }
          return (below_top_edge && above_bottom_edge)
        })[0]
        if(row_key){
          this.current_row_key = row_key;
          this.current_row = this.rows[row_key];
        } else if(target_location.y > this.rows[Math.max.apply(null,this.row_keys)][0].getOffset().top) {
          this.current_row_key = 'end';
          this.current_row = undefined;
        } else {
          this.current_row_key = 'begin';
          this.current_row = undefined;
        }
      },
      getHoveredElementHorizontal: function(target_location){
        var current_element = false;
        var sorter = this
        current_element = $.grep(this.current_row, function(sort_element,i){
          if(!sort_element.is_placeholder){
            var elem_center = sort_element.getCenter();
            var slot_left = elem_center.x;
            var past_left_edge = target_location.x >= slot_left

            var next_elem = sorter.elemAfter(sorter.current_row, sort_element)
            var before_right_edge
            if(next_elem){
              if(!next_elem.is_placeholder){
                var next_elem_center = next_elem.getCenter();
                before_right_edge = target_location.x < next_elem_center.x
              }
            } else {
              before_right_edge = past_left_edge
            }
            return (past_left_edge && before_right_edge)
          }
          return false
        })[0]
        if(current_element){
          return current_element
        } else {
          var first_elem = this.current_row[0]
          if(first_elem && !first_elem.is_placeholder && first_elem.getCenter().x > target_location.x){
            return 'leftmost'
          }
        }
      },
      getHoveredElementVertical: function(target_location){
        var sorter = this
        current_element_key = $.grep(sorter.row_keys, function(row_key,i){
          var this_elem = sorter.rows[row_key][0]
          if(!this_elem.is_placeholder){
            var elem_center = this_elem.getCenter()
            var slot_top = elem_center.y
            var below_top_edge = target_location.y >= slot_top
            var next_row = sorter.rows[sorter.row_keys[i+1]]
            var above_bottom_edge
            var next_elem
            if(next_row){
              next_elem = next_row[0]
              if(next_elem && !next_elem.is_placeholder){
                var next_elem_center = next_elem.getCenter()
                above_bottom_edge = target_location.y < next_elem_center.y
              }
            }
            if(!next_elem){
              above_bottom_edge = below_top_edge
            }
            return(below_top_edge && above_bottom_edge)
          }
          return false
        })[0]
        if(current_element_key){
          return this.rows[current_element_key][0]
        } else {
          var first_key = this.row_keys[0]
          var first_elem = this.rows[first_key][0]
          if(first_elem && !first_elem.is_placeholder && first_elem.getCenter().y > target_location.y){
            return 'first'
          }
        }
      },
      getLastElement: function(){
        var last_row_key = this.row_keys[this.row_keys.length-1]
        var last_row = this.rows[last_row_key];
        return last_row[last_row.length-1]
      },
      getFirstElement: function(){
        var first_row_key = this.row_keys[0]
        var first_row = this.rows[first_row_key]
        return first_row[0]
      },
      elementHorizontalSort: function(a,b){
        if(a.getOffset().left < b.getOffset().left){
          return -1
        }
        if(b.getOffset().left < a.getOffset().left){
          return 1
        }
        return 0
      },
      numberSort: function(a,b){
        if(parseInt(a) < parseInt(b)){return -1}
        if(parseInt(b) < parseInt(a)){return 1}
        return 0
      },
      withinCurrentRow: function(y_value){
        if(this.current_row_key){
          var top_edge = this.current_row_key
          var bottom_edge = top_edge + this.row_height;
          var in_current_row = (top_edge < y_value) && (y_value < bottom_edge)
          if(in_current_row){
            this.current_row = this.rows[this.current_row_key]
          }
          return in_current_row
        }
        return false
      },
      setDraggingElement: function(sort_element){
        this.dragging_element = sort_element;
        var current_row = this.rows[this.dragging_element.starting_offset.top]
        drag_index = current_row.indexOf(sort_element)
        if(drag_index > -1){
          current_row.splice(drag_index, 1)
        }
        current_row.push(this.dragging_element.placeholder)
        this.refreshGrid();
      },
      clearDraggingElement: function(){
        if(this.dragging_element){
          this.removeDraggingElement()
        }
      },
      removeDraggingElement: function(){
        if(this.dragging_element){
          var placeholder_row = this.removePlaceholder()
          this.rows[placeholder_row].push(this.dragging_element)
          this.dragging_element.drop()
          this.dragging_element = undefined;
          this.refreshGrid();
        }
      },
      sendSort: function(){
        $.ajax({
          url: this.$sorter.attr('href'),
          method: 'PATCH',
          data: this.getFormData()
        })
      },
      getFormData: function(){
        var id_array = $.map(this.$sorter.children(),function(e,i){return $(e).attr('id')})
        var first_id = id_array[0]
        var last_underscore_location = first_id.lastIndexOf('_')
        var array_name = first_id.slice(0,last_underscore_location)
        var form_data = {}
        form_data[array_name] = id_array.map(function(id){
          return id.slice((last_underscore_location + 1))
        })
        if(this.$sorter.data('sort-field')){
          form_data['sort_field'] = this.$sorter.data('sort-field')
        }
        return form_data
      },
      removePlaceholder: function(){
        var sorter = this
        return $.grep(this.row_keys, function(row_key,i){
          var placeholder_index = sorter.rows[row_key].indexOf(sorter.dragging_element.placeholder)
          if(placeholder_index > -1){
            sorter.rows[row_key].slice(placeholder_index,1)
            return true
          }
          return false
        })[0]
      }
    }),
    SortElement: Class.extend({
      init: function($sort_element,sorter){
        this.sorter = sorter;
        this.$sort_element = $sort_element;
        this.old_position = $sort_element.css('position')
        this.width = this.$sort_element.width()
        this.height = this.$sort_element.height()
        this.dragging = false
        var sort_element = this
        this.$sort_element.on('dragstart', function(e){
          hooch.pauseEvent(e)
          return false
        })
        this.$sort_element.on('mousedown', $.proxy(sort_element.onMousedown, sort_element))
      },
      onMousedown: function(e){
        if(1 == e.which){
          this.sorter.clearDraggingElement();
          this.pressed = true
          this.starting_offset = this.getOffset();
          this.mouse_start = {top: e.originalEvent.pageY, left: e.originalEvent.pageX}
        }
      },
      unSetPressed: function(){
        this.pressed = false
      },
      setDragging: function(){
        this.sorter.clearDraggingElement();
        this.unSetPressed()
        this.placeholder = new hooch.SortPlaceholder(this.$sort_element.clone().removeAttr('id').css({width: this.width, height: this.height}),this.sorter)
        this.placeholder.css({'visibility': 'hidden'});
        this.placeholder.css({background: 'none', 'background-color': 'pink'});
        $tmp = $('<div style="display: none;"></div>')
        this.$sort_element.before($tmp)
        this.$sort_element
          .css({position: 'absolute', top: this.starting_offset.top, left: this.starting_offset.left})
          .appendTo('body')
        $tmp.replaceWith(this.placeholder.$sort_element)
        this.sorter.setDraggingElement(this);
      },
      drop: function(){
        this.css({position: this.old_position, top: '', left: ''})
        this.placeholder.replaceWith(this.$sort_element);
        this.placeholder = undefined
      },
      getOffset: function(){
        return this.$sort_element.offset();
      },
      setPosition: function(e){
        var delta = this.getDelta(e)
        var new_position = this.getNewPosition(delta);
        this.$sort_element.css(new_position);
      },
      getDelta: function(e){
        return {
          top: (e.originalEvent.pageY - this.mouse_start.top),
          left: (e.originalEvent.pageX - this.mouse_start.left)
        }
      },
      getNewPosition: function(delta){
        return {top: (this.starting_offset.top + delta.top), left: (this.starting_offset.left + delta.left)}
      },
      getCenter: function(){
        var new_offset = this.getOffset()
        var newX = new_offset.left
        var newY = new_offset.top
        var width = this.width
        var height = this.height
        var centerX = newX + (width / 2)
        var centerY = newY + (height / 2)
        var center = {x: centerX, y: centerY}
        return center
      },
      clone: function(){
        return this.$sort_element.clone();
      },
      css: function(css_obj){
        this.$sort_element.css(css_obj);
      },
      replaceWith: function($jq_obj){
        this.$sort_element.replaceWith($jq_obj)
      }
    })
  };
  hooch.SortPlaceholder = hooch.SortElement.extend({
    init: function($sort_element,sorter){
      this.sorter = sorter;
      this.is_placeholder = true;
      this.$sort_element = $sort_element;
      this.width = this.$sort_element.width()
      this.height = this.$sort_element.height()
    }
  })
  hooch.AjaxExpandable = hooch.Expandable.extend({
    expand: function(){
      if(!this.ajax_loaded){
        this.ajax_loaded = true;
        new thin_man.AjaxLinkSubmission(this.$expander);
      }
      this._super();
    }
  });
  hooch.SelectActionChanger = hooch.FakeSelect.extend({
    select: function(fake_option){
      var form = this.select_display.parents('form:first');
      form.attr('action', fake_option.select_value);
      this.select_display.html(fake_option.select_name);
      this.select_display.trigger('click');
    }
  });
  hooch.FormFieldRevealer = hooch.Revealer.extend({
    init: function($revealer){
      this.children_id = $revealer.data('revealer-children-id');
      this.$revelation_target = $('[data-revealer-target="' + this.children_id + '"]');
      this._super($revealer);
    },
    hideChildren: function(){
      this._super();
      this.$form = this.$revealer.parents('form:first')
      if(this.$form.length > 0){
        this.$form.after(this.$all_children)
      }
    },
    revealChosenOnes: function(){
      this.$revelation_target.html(this.$children);
      this._super();
    }
  });
  hooch.AjaxTabGroup = hooch.TabGroup.extend({
    getTabTriggerClass: function(){
      this.tab_trigger_class = hooch.AjaxTabTrigger;
    }
  });
  hooch.AjaxTabTrigger = hooch.TabTrigger.extend({
    toggleTarget: function(pop){
      var tab_group = this.tab_group;
      if(!this.ajax_loaded){
        this.ajax_loaded = true;
        this.$tab_trigger.data('ajax-target','[data-tab-id="' + this.tab_id + '"]')
        new thin_man.AjaxLinkSubmission(this.$tab_trigger,{'on_complete': function(){tab_group.resize()}});
        this._super(pop);
      } else {
        this._super(pop);
        tab_group.resize()
      }
    },
    resize: function(){
      // noop
    }
  });
  hooch.ClickProxy = hooch.GoProxy.extend({
    getTarget: function(){
      if(this.$proxy.data('target')){
        return $(this.$proxy.data('target'));
      } else {
        return this.$proxy.siblings('a');
      }
    },
    doItNow: function(){
      if(this.doable()) {
        if(this.target.data('ajax-target')){
          this.target.click();
        }else if(this.target.attr('href')){
          window.location = this.target.attr('href');
        }
        this.first_submit = false;
      }
    }
  });
  hooch.SubmitProxy = hooch.GoProxy.extend({
    getTarget: function(){
      if(this.$proxy.data('target')){
        return $(this.$proxy.data('target'));
      } else {
        return this.$proxy.parents('form:first');
      }
    },
    doItNow: function(){
      if(this.doable()) {
        this.target.submit();
        this.first_submit = false;
      }
    }
  });
  hooch.TabGroup.addGroup = function(group){
    if(!hooch.TabGroup.all_groups){
      hooch.TabGroup.all_groups = [];
    }
    hooch.TabGroup.all_groups.push(group);
  };
  hooch.TabGroup.find = function(name){
    var selected_group = null;
    $.each(hooch.TabGroup.all_groups,function(index,group){
      if(group.name == name){
        selected_group = group;
      }
    });
    return selected_group;
  };
  hooch.loadClasses = function(){
    window.any_time_manager.registerListWithClasses({
      'expand-state' : 'Expandable', 'prevent-double-click' : 'PreventDoubleLinkClick'
    },'hooch');
    window.any_time_manager.registerList(
      ['hover_overflow','hidey_button','submit-proxy','click-proxy','field-filler','revealer',
        'checkbox-hidden-proxy','prevent-double-submit','prevent-double-link-click', 'tab-group',
        'hover-reveal', 'emptier', 'remover', 'checkbox-proxy', 'fake-select', 'select-action-changer',
        'sorter'],'hooch');
    window.any_time_manager.load();
  };
  hooch.pauseEvent = function(e){
    if(e.stopPropagation) e.stopPropagation();
    if(e.preventDefault) e.preventDefault();
    e.cancelBubble=true;
    e.returnValue=false;
  }
  $(document).ready(function(){
    if(typeof window.any_time_manager === "undefined" && typeof window.loading_any_time_manager === "undefined"){
      window.loading_any_time_manager = true;
      $.getScript("https://cdn.rawgit.com/edraut/anytime_manager/9f710d2280e68ea6156551728cb7e2d537a06ee6/anytime_manager.js",function(){
        window.loading_any_time_manager = false
        hooch.loadClasses();
      });
    }else if(typeof window.any_time_manager === "undefined"){
      if(typeof window.any_time_load_functions === 'undefined'){
        window.any_time_load_functions = []
      }
      window.any_time_load_functions.push(hooch.loadClasses)
    }else{
      hooch.loadClasses();
    };
    $(document).on('change','[data-toggler]',function(){
      new hooch.Toggler($(this));
    })
    $('[data-toggler]').each(function(){
      new hooch.Toggler($(this));
    })
    $('[data-disable_forms]').each(function(){
      new hooch.DisableForms($(this));
    })
    $('[data-link]').each(function(){
      new hooch.Link($(this));
    })
    // Initailizes auto complete for select inputs
    $('input,select,textarea').filter(':visible:enabled:first').each(function(){
      if(!$(this).data('date-picker')){
        $(this).focus();
      }
    });
  });
  $(window).bind("popstate", function(e){
    var previous_state = new hooch.IhHistoryState(e.originalEvent.state)
    $.each(previous_state.state, function(key,value){
      var tab_group = hooch.TabGroup.find(key)
      if(tab_group){
        var tab_trigger = tab_group.getTabByPushState(value)
        if(tab_trigger){
          tab_trigger.toggleTarget('no history');
        }
      }
    })
  });
}
if(typeof Class === "undefined"){
  $.getScript('https://rawgit.com/edraut/js_inheritance/a6c1e40986ecb276335b0a0b1792abd01f05ff6c/inheritance.js', function(){
    initHooch();
  });
}else{
  initHooch();
}
;
;�TI"required_assets_digest;�TI"%c28ccd9155f6d8bb673aac9463e3bff7;�FI"
_version;�TI"%2be930bcbfd3c3e00190e2193dda5c7c;�F