mixin form-input(input, model)
  -var shouldSplitInput = input.name.indexOf('.') >= 0;
  -var value, splitInput, combinedInput;
  //- Iterate through names to capture value of subdocs
  if shouldSplitInput
    -splitInput = input.name.split('.');
    -combinedInput = model[splitInput.shift()];
    each key in splitInput
      -combinedInput = combinedInput[key];
    -value = combinedInput
  else
     -value = model[input.name];
  .row: .col-xs-12  
    case input.type
      when 'textarea'
        .form-group
          label.col-md-2.control-label(for=input.name)=_.toProperCase(input.label)
          .col-xs-12.col-md-10
            textarea.form-control(rows="8" disabled=!input.edit)=value
      when 'text'
        .form-group
          label.col-md-2.control-label(for=input.name)=_.toProperCase(input.label)
          .col-xs-12.col-md-10
            input.form-control(type="text" name=input.name value=value disabled=!input.edit)
      when 'number'
        .form-group
          label.col-md-2.control-label(for=input.name)=_.toProperCase(input.label)
          .col-xs-12.col-md-10
            input.form-control(type="number" name=input.name value=value disabled=!input.edit)
      when 'checkbox'
        .form-group: .col-md-offset-2.col-md-10
          .checkbox
            label              
              input(type="checkbox" name=input.name checked=(value ? true : false) disabled=!input.edit)
              =_.toProperCase(input.label)
      when 'date'        
        .form-group
          label.col-xs-12.col-md-2.control-label(for=input.name)=_.toProperCase(input.label)
          .col-xs-12.col-md-10.text-left
            input.form-control(type="text" name=input.name data-provide="datepicker" data-date-format="MM dd, yyyy" disabled=!input.edit value=value ? _.moment(value).format('MMMM DD, YYYY') : '')
      when 'relationship'
        .form-group
          label.col-xs-12.col-md-2.control-label(for=input.name)=_.toProperCase(input.label)
          div.col-md-10
            input.form-control.selectbox(data-url=_.pluralize(input.ref, 2) disabled=!input.edit data-name=input.ref data-label=input.displayField value=model[input.ref] ? model[input.ref][input.displayField] : '')

mixin filters(inputs)
  .container: .row: .col-xs-12.col-md-6.center-block
    p.lead Filters
    each input in inputs
      if input.edit
        .col-xs-6.col-sm-4
          case input.type
            when 'text'
              .form-group
                label.control-label(for=input.name + '-filter')=_.toProperCase(input.label)
                input.form-control(type="text" name=input.name + '-filter')
            when 'textarea'
              .form-group
                label.control-label(for=input.name + '-filter')=_.toProperCase(input.label)
                input.form-control(type="text" name=input.name + '-filter')
            when 'checkbox'
              .form-group: .checkbox
                label 
                  input(type="checkbox" name=input.name + '-filter' checked=true) 
                  =_.toProperCase(input.label)           
            
                          
mixin header(brand, user, baseUrl, modules, active, logoutLink)
  nav.navbar.navbar-default
    .container-fluid
      .navbar-header
        button.navbar-toggle.collapsed(role="button" data-toggle="collapse" data-target="#swarmadmin-nav" aria-expanded="false")
          span.sr-only Toggle Navigation
          span.icon-bar
          span.icon-bar
          span.icon-bar
        a.navbar-brand(href=baseUrl)=brand
      .collapse.navbar-collapse#swarmadmin-nav
        ul.nav.navbar-nav
          each module in modules
            li: a(href=baseUrl + '/' + _.pluralize(module.toLowerCase(), 2) class=active === _.pluralize(module.toLowerCase(), 2) ? 'active' : '')=module
        if user
          ul.nav.navbar-nav.navbar-right
            li: p.navbar-text Logged in as #{user.email || user.name || user.username || user.userName}
            if logoutLink
              a.btn.btn-info.navbar-btn(href=logoutLink) Logout

mixin list-header(paths)
  thead: tr
    th(data-key='_id')='id '
      span.glyphicon.glyphicon-sort
    if Array.isArray(paths)
      each key in paths
        if key !== 'id'
          th(data-key=key)=_.toProperCase(key) + ' '
            span.glyphicon.glyphicon-sort
    else
      each value, key in paths
        if key !== 'id'
          th(data-key=key)=_.toProperCase(key) + ' '
            span.glyphicon.glyphicon-sort

mixin populate(doc, paths, urlPrefix)
  -var subdoc;
  -var shouldSplitValue;
  tr
    td: a(href=baseUrl + '/' + _.pluralize(title.toLowerCase(), 2) + (urlPrefix ? '/' + urlPrefix : '' ) + '/' + doc.id)=doc.id
    if Array.isArray(paths)
      each key in paths
        if key !== 'id'
          if typeof doc[key] !== 'object' || Object.is(doc[key], null)
            td=doc[key]
          else
            if doc[key]._id
              -subdoc = doc[key];
              td: a(href=baseUrl + '/' + _.pluralize(key, 2) + '/' + subdoc._id.toString())=subdoc.name ? subdoc.name : (subdoc.title ? subdoc.title : (subdoc.label ? subdoc.label : subdoc._id.toString()))
            else
              td=doc[key]
    else
      each value, key in paths
        if key !== 'id'
          if typeof doc[key] !== 'object' || Object.is(null, doc[key])
            td=doc[key]
          else
            if doc[key]._id
              td: a(href=baseUrl + (urlPrefix || '') + '/' + _.pluralize(key, 2) + '/' + doc[key]._id.toString())=doc[key].name ? doc[key].name : (doc[key].title ? doc[key].title : (doc[key].label ? doc[key].label : doc[key]._id.toString()))
            else
              td=doc[key]