//
// Global Foundation Mixins
//

$experimental: true !default;

// IMPORT ONCE
// We use this to prevent styles from being loaded multiple times for compenents that rely on other components. 

$modules: () !default;
@mixin exports($name) {
  @if (index($modules, $name) == false) {
    $modules: append($modules, $name);
    @content;
  }
}

// We use this to control border radius.
@mixin radius($radius:$global-radius) {
  @if $radius {
    @if $experimental {
      -webkit-border-radius: $radius;
    }
    border-radius: $radius;
  }
}

// We use this to create equal side border radius on elements.
@mixin side-radius($side, $radius) {
  @if $side == left {
    @if $experimental {
      -moz-border-radius-bottomleft: $radius;
      -moz-border-radius-topleft: $radius;
      -webkit-border-bottom-left-radius: $radius;
      -webkit-border-top-left-radius: $radius;
    }
    border-bottom-left-radius: $radius;
    border-top-left-radius: $radius;
  }
  @else if $side == right {
    @if $experimental {
      -moz-border-radius-topright: $radius;
      -moz-border-radius-bottomright: $radius;
      -webkit-border-top-right-radius: $radius;
      -webkit-border-bottom-right-radius: $radius;
    }
    border-top-right-radius: $radius;
    border-bottom-right-radius: $radius;
  }
  @else if $side == top {
    @if $experimental {
      -moz-border-radius-topright: $radius;
      -moz-border-radius-topleft: $radius;
      -webkit-border-top-right-radius: $radius;
      -webkit-border-top-left-radius: $radius;
    }
    border-top-right-radius: $radius;
    border-top-left-radius: $radius;
  }
  @else if $side == bottom {
    @if $experimental {
      -moz-border-radius-bottomright: $radius;
      -moz-border-radius-bottomleft: $radius;
      -webkit-border-bottom-right-radius: $radius;
      -webkit-border-bottom-left-radius: $radius;
    }
    border-bottom-right-radius: $radius;
    border-bottom-left-radius: $radius;
  }
}

// We can control whether or not we have inset shadows edges.
@mixin inset-shadow($active:true) {
  @if $experimental {
    -webkit-box-shadow: $shiny-edge-size $shiny-edge-color inset;
  }
  box-shadow: $shiny-edge-size $shiny-edge-color inset;

  @if $active { &:active {
    @if $experimental {
      -webkit-box-shadow: $shiny-edge-size $shiny-edge-active-color inset;
    }
    box-shadow: $shiny-edge-size $shiny-edge-active-color inset; } }
}

// We use this to add transitions to elements
@mixin single-transition($property:all, $speed:200ms, $ease:ease) {
  @if $experimental {
    -webkit-transition: $property $speed $ease;
    -moz-transition: $property $speed $ease;
  }
  transition: $property $speed $ease;
}

@mixin all-transition($property:all, $speed:0.5s, $ease:ease-out){
  @if $experimental{
    -moz-transition: $property $speed $ease;
    -webkit-transition: $property $speed $ease;
    -o-transition: $property $speed $ease;
  }
   transition: $property $speed $ease;
}

// We use this to add transform translateX to elements
@mixin translate-X($value:0px) {
  @if $experimental {
    -webkit-transform: translateX($value);
    -moz-transform: translateX($value);
    -o-transform: translateX($value);
    -ms-transform: translateX($value);
  }
  transform: translateX($value);
}

// We use this to add transform translateY to elements
@mixin translate-Y($value:0px) {
  @if $experimental {
    transform: translateY($value);
    -webkit-transform: translateY($value);
    -moz-transform: translateY($value);
    -o-transform: translateY($value);
    -ms-transform: translateY($value);
  }
  transform: translateY($value);
}

// We use this to add transform rotate to elements
@mixin rotate($value:0deg) {
  @if $experimental {
    transform: rotate($value);
    -webkit-transform: rotate($value);
    -moz-transform: rotate($value);
    -o-transform: rotate($value);
    -ms-transform: rotate($value);
  }
  transform: rotate($value);
}

// We use this to add transform rotateX to elements
@mixin rotate-X($value:0deg) {
  @if $experimental {
    transform: rotateX($value);
    -webkit-transform: rotateX($value);
    -moz-transform: rotateX($value);
    -o-transform: rotateX($value);
    -ms-transform: rotateX($value);
  }
  transform: rotateX($value);
}

// We use this to add transform rotateY to elements
@mixin rotate-Y($value:0deg) {
  @if $experimental {
    transform: rotateY($value);
    -webkit-transform: rotateY($value);
    -moz-transform: rotateY($value);
    -o-transform: rotateY($value);
    -ms-transform: rotateY($value);
  }
  transform: rotateY($value);
}

//We use this to alignment
@mixin vertical-align(){
  top: 50%;
  position: absolute;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -o-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
}

@mixin horizontally-align(){
  position: static !important;
  margin: 0 auto;
}

@mixin both-align(){
  top: 50%;
  left: 50%;
  position: absolute;
  transform: translateY(-50%, -50%);
  -webkit-transform: translate(-50%, -50%);
  -moz-transform: translate(-50%, -50%);
  -o-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
}

// We use this to add box-sizing across browser prefixes
@mixin box-sizing($type:border-box) {
  @if $experimental {
    -moz-box-sizing: $type;
    -webkit-box-sizing: $type;
  }
  box-sizing: $type;
}

// We use this to create equilateral triangles
@mixin css-triangle($triangle-size, $triangle-color, $triangle-direction) {
  content: "";
  display: block;
  width: 0;
  height: 0;
  border: inset $triangle-size;
  @if ($triangle-direction == top) {
    border-color: $triangle-color transparent transparent transparent;
    border-top-style: solid;
  }
  @if ($triangle-direction == bottom) {
    border-color: transparent transparent $triangle-color transparent;
    border-bottom-style: solid;
  }
  @if ($triangle-direction == left) {
    border-color: transparent transparent transparent $triangle-color;
    border-left-style: solid;
  }
  @if ($triangle-direction == right) {
    border-color: transparent $triangle-color transparent transparent;
    border-right-style: solid;
  }
}

// We use this to do clear floats
@mixin clearfix() {
  *zoom:1;
  &:before, &:after { content: " "; display: table; }
  &:after { clear: both; }
}


// We use this to add a glowing effect to block elements
@mixin block-glowing-effect($selector:focus, $fade-time:300ms, $glowing-effect-color:fade-out($primary-color, .25)) {
  @if $experimental {
    -webkit-transition: -webkit-box-shadow $fade-time, border-color $fade-time ease-in-out;
    -moz-transition: -moz-box-shadow $fade-time, border-color $fade-time ease-in-out;
  }
  transition: box-shadow $fade-time, border-color $fade-time ease-in-out;

  &:#{$selector} {
    @if $experimental {
      -webkit-box-shadow: 0 0 5px $glowing-effect-color;
      -moz-box-shadow: 0 0 5px $glowing-effect-color;
    }
    box-shadow: 0 0 5px $glowing-effect-color;
    border-color: $glowing-effect-color;
  }
}

//
// Foundation Variables
//

// The default font-size is set to 100% of the browser style sheet (usually 16px)
// for compatibility with brower-based text zoom or user-set defaults.

// Since the typical default browser font-size is 16px, that makes the calculation for grid size.
// If you want your base font-size to be different and not have it effect the grid breakpoints,
// set $em-base to $base-font-size and make sure $base-font-size is a px value.
$base-font-size: 100% !default;

// $base-line-height is 24px while $base-font-size is 16px
$base-line-height: 150% !default;

// This is the default html and body font-size for the base em value.
$em-base: 16px !default;

// Working in ems is annoying. Think in pixels by using this handy function, emCalc(#px)
@function emCalc($pxWidth) {
  @return $pxWidth / $em-base * 1em;
}

// Maybe you want to create rems and pixels
// @function remCalc($pxWidth) {
//   @return $pxWidth / $em-base * 1rem;
// }

// We use these to control various global styles
$body-bg: #fff !default;
$body-font-color: #222 !default;
$body-font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif !default;
$body-font-weight: normal !default;
$body-font-style: normal !default;

// We use this to control font-smoothing
$font-smoothing: subpixel-antialiased !default;

// We use these to control text direction settings
$text-direction: ltr !default;

// NOTE: No need to change this conditional statement, $text-direction variable controls it all.
$default-float: left !default;
$opposite-direction: right !default;
@if $text-direction == ltr {
  $default-float: left;
  $opposite-direction: right;
} @else {
  $default-float: right;
  $opposite-direction: left;
}

// We use these as default colors throughout
$primary-color: #2ba6cb !default;
$secondary-color: #e9e9e9 !default;
$alert-color: #c60f13 !default;
$success-color: #5da423 !default;

// We use these to make sure border radius matches unless we want it different.
$global-radius: 3px !default;
$global-rounded: 1000px !default;

// We use these to control inset shadow shiny edges and depressions.
$shiny-edge-size: 0 1px 0 !default;
$shiny-edge-color: rgba(#fff, .5) !default;
$shiny-edge-active-color: rgba(#000, .2) !default;

// We use this to control whether or not CSS classes come through in the gem files.
$include-html-classes: true !default;
$include-print-styles: true !default;
$include-html-global-classes: $include-html-classes !default;

// Media Queries
$small-screen: 768px !default;
$medium-screen: 1280px !default;
$large-screen: 1440px !default;

$screen: "only screen" !default;
$small: "only screen and (min-width: #{$small-screen})" !default;
$medium: "only screen and (min-width:#{$medium-screen})" !default;
$large: "only screen and (min-width:#{$large-screen})" !default;
$landscape: "only screen and (orientation: landscape)" !default;
$portrait: "only screen and (orientation: portrait)" !default;

//We use this as cursors values for enabling the option of having custom cursors in the whole site's stylesheet
$cursor-crosshair-value: crosshair !default;
$cursor-default-value: default !default;
$cursor-pointer-value: pointer !default;
$cursor-help-value: help !default;
$cursor-text-value: text !default;


@if $include-html-global-classes {

  // Set box-sizing globally to handle padding and border widths
  *,
  *:before,
  *:after {
    @include box-sizing(border-box);
  }

  html,
  body { font-size: $base-font-size; }

  // Default body styles
  body {
    background: $body-bg;
    color: $body-font-color;
    padding: 0;
    margin: 0;
    font-family: $body-font-family;
    font-weight: $body-font-weight;
    font-style: $body-font-style;
    line-height: 1; // Set to $base-line-height to take on browser default of 150%
    position: relative;
    cursor: $cursor-default-value;
  }

a:hover { cursor: $cursor-pointer-value; }

  // Override outline from normalize, we don't like it
  a:focus { outline: none; }

  // Grid Defaults to get images and embeds to work properly
  img,
  object,
  embed { max-width: 100%; height: auto; }

  object,
  embed { height: 100%; }
  img { -ms-interpolation-mode: bicubic; }

  #map_canvas,
  .map_canvas {
    img,
    embed,
    object { max-width: none !important;
    }
  }

  // Miscellaneous useful HTML classes
  .left         { float: left !important; }
  .right        { float: right !important; }
  .text-left    { text-align: left !important; }
  .text-right   { text-align: right !important; }
  .text-center  { text-align: center !important; }
  .text-justify { text-align: justify !important; }
  .hide         { display: none; }

  // Font smoothing
  // Antialiased font smoothing works best for light text on a dark background.
  // Apply to single elements instead of globally to body.
  // Note this only applies to webkit-based desktop browsers on the Mac.
  .antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }

  // Get rid of gap under images by making them display: inline-block; by default
  img {
    display: inline-block;
    vertical-align: middle;
  }

  //
  // Global resets for forms
  //

  // Make sure textarea takes on height automatically
  textarea { height: auto; min-height: 50px; }

  // Make select elements 100% width by default
  select { width: 100%; }

}
