/**
 *
 * @group tree
 */
$v-tree-row-height: round($v-unit-size/1.3) !default;

/**
 *
 * @group tree
 */
$v-tree-animations-enabled: true !default;

/**
 *
 * @group tree
 */
$v-tree-expand-animation-enabled: false !default;


@if $v-tree-expand-animation-enabled {
  @include keyframes(valo-tree-node-open) {
    0% {
      max-height: 0;
    }
    100% {
      max-height: $v-tree-row-height * 10;
    }
  }

  @include keyframes(valo-tree-node-close) {
    0% {
      max-height: $v-tree-row-height * 10;
    }
    100% {
      max-height: 0;
    }
  }
}


/**
 *
 *
 * @param {string} $primary-stylename (v-tree) - 
 *
 * @group tree
 */
@mixin valo-tree ($primary-stylename: v-tree) {

  .#{$primary-stylename} {
    position: relative;
    white-space: nowrap;

    &:focus {
      outline: none;
    }
  }

  .#{$primary-stylename}-node {
    &:before {
      content: "";
      position: absolute;
      display: inline-block;
      z-index: 3;
      width: 1.9em;
      height: $v-tree-row-height;
      cursor: pointer;
      // IE 9/10 need some color so that this element can receive mouse events.
      // 'red' just happens to be the shortest color name.
      background: red;
      opacity: 0;

      .v-ie8 & {
        position: static;
        margin-left: -1.9em;
        vertical-align: top;
        @include valo-tree-collapsed-icon-style;
        text-align: center;
        background: transparent;
      }
    }

    .v-ie8 & {
      padding-left: 1.9em;
    }
  }

  .#{$primary-stylename}-node-caption {
    height: $v-tree-row-height;
    line-height: $v-tree-row-height - 1px;
    overflow: hidden;
    white-space: nowrap;

    // Mainly to satisty IE8 (doesn't harm other browsers)
    vertical-align: top;

    & > div {
      display: inline-block;
      width: 100%;
      position: relative;
      z-index: 2;

      &:before {
        @include valo-tree-collapsed-icon-style;
        display: inline-block;
        width: .5em;
        text-align: center;
        margin: 0 .6em 0 .8em;

        @if $v-tree-animations-enabled {
          @include transition(all 100ms);
        }

        .v-ie8 & {
          display: none;
        }
      }
    }

    span {
      padding-right: $v-tree-row-height;
      cursor: pointer;
      display: inline-block;
      // Allow to click on the whole row (almost, at least the right side part)
      width: 100%;

      // IE does strange things when the width is wider than the parent
      .v-ie & {
        width: auto;
      }
    }

    .v-icon {
      padding-right: 0;
      width: auto;
      min-width: 1em;
    }

    &:after {
      content: "";
      display: block;
      vertical-align: top;
      position: absolute;
      z-index: 1;
      left: 0;
      margin-top: -$v-tree-row-height;
      width: 100%;
      height: $v-tree-row-height;
      border-radius: $v-border-radius;
      opacity: 0;

      @if $v-tree-animations-enabled {
        @include transition(opacity 120ms);
      }

      .v-ie8 & {
        content: none;
      }
    }

    .v-ie8 & {
      display: inline-block;
    }
  }

  .#{$primary-stylename}-node-expanded > .#{$primary-stylename}-node-caption > div:before {
    @include valo-tree-expanded-icon-style;

    @if $v-tree-animations-enabled {
      @include transform(rotate(90deg));
      @include valo-tree-collapsed-icon-style;
    }
  }

  .v-ie8 & .#{$primary-stylename}-node-expanded:before {
    @include valo-tree-expanded-icon-style(true);
  }

  .#{$primary-stylename}-node-leaf:before,
  .#{$primary-stylename}-node-leaf > .#{$primary-stylename}-node-caption > div:before {
    visibility: hidden;
  }

  .#{$primary-stylename}-node-focused {
    // This a v-tree-node-caption element
    &:after {
      opacity: 1;
      border: 1px solid $v-focus-color;
    }

    .v-ie8 & {
      outline: 1px dotted $v-focus-color;
    }
  }



  .#{$primary-stylename}-node-selected {
    $font-color: valo-font-color($v-selection-color, 0.9);
    color: $font-color;
    text-shadow: valo-text-shadow($font-color: $font-color, $background-color: $v-selection-item-selection-color);

    &:after {
      opacity: 1;
      @include valo-gradient($v-selection-color);
      border: none;

      .v-ie8 & {
        //visibility: visible;
      }
    }

    .v-ie8 & {
      @include valo-gradient($v-selection-color);
    }
  }

  .#{$primary-stylename}-node-children {
    padding-left: round($v-unit-size/2);

    .v-ie8 & {
      padding-left: 0;
    }
  }

  @if $v-tree-expand-animation-enabled {
    .#{$primary-stylename}-node-children[style*="display: none"] {
      @include animation(valo-tree-node-close 400ms ease-out forwards);
      display: block !important;
    }

    .#{$primary-stylename}-node-expanded > .#{$primary-stylename}-node-children {
      @include animation(valo-tree-node-open 400ms ease-in);
    }
  }



  // Drag'n'drop styles

  .#{$primary-stylename}-node-drag-top:before,
  .#{$primary-stylename}-node-drag-bottom:after,
  .#{$primary-stylename}-node-drag-bottom.#{$primary-stylename}-node-dragfolder.#{$primary-stylename}-node-expanded > .#{$primary-stylename}-node-children:before {
    content: "\2022";
    display: block;
    position: absolute;
    height: 2px;
    width: 100%;
    background: $v-focus-color;
    font-size: $v-font-size * 2;
    line-height: 2px;
    color: $v-focus-color;
    text-indent: round($v-font-size/-4);
    text-shadow: 0 0 1px $v-background-color, 0 0 1px $v-background-color;
    opacity: 1;
    visibility: visible;
  }

  .#{$primary-stylename}-node-drag-bottom.#{$primary-stylename}-node-dragfolder.#{$primary-stylename}-node-expanded:after {
    content: none;
  }

  .#{$primary-stylename}-node-caption-drag-center {
    @include box-shadow(0 0 0 2px $v-focus-color);
    position: relative;
    border-radius: $v-border-radius;

    .v-ie8 & {
      outline: 2px solid $v-focus-color;
    }
  }

  .v-ff & .#{$primary-stylename}-node-drag-top:before,
  .v-ff & .#{$primary-stylename}-node-drag-bottom:after {
    line-height: 1px;
  }

  .v-ie8 & .#{$primary-stylename}-node-drag-top:before,
  .v-ie8 & .#{$primary-stylename}-node-drag-bottom:after {
    line-height: 0;
  }
}


/**
 *
 *
 *
 * @group tree
 */
@mixin valo-tree-collapsed-icon-style {
  content: "\f0da";
  font-family: FontAwesome;
}

/**
 *
 *
 * @param {bool} $force (false) - 
 *
 * @group tree
 */
@mixin valo-tree-expanded-icon-style ($force: false) {
  @if $v-tree-animations-enabled == false or $force {
    content: "\f0d7";
    font-family: FontAwesome;
  }
}