if (!((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i)))) {

  var SLIDE_HEIGHT = 1100;
  
  /* constants -- it's a shame IE doesn't support the const keyword :( */
  var MIN_SLIDE_HEIGHT = 800;
  var SLIDE_WIDTH = 1000;
  var DEALS_MAGIC = 372; // magic min x-pos for pins
  var DEALS2_MAGIC = 312; // magic min x-pos for map
  var THINGS_MAGIC = 374; // magic min x-pos for cards
  var STANDARD_MAGIC_X = 158; // magic min y-pos for ipad
  var STANDARD_MAGIC_Y = 190; // magic y-pos for ipad
  
  var SLIDE_DEALS = 1;
  var SLIDE_STANDARD = 2;
  var SLIDE_THINGS = 3;
  var SLIDE_NOMICS = 4;
  var SLIDE_OCEAN = 5;
  
  /* Initialize */
  
  jQuery(
    
    function ($) {
      $('[data-handler]').Instantiate();
      
      $(window).resize(function() { $.set_slide_height() });
      $.set_slide_height();
    } 
    
  );
  
  /* ---------------------------------- */
  
  /* Events */
  
  (function($) {
  
    $.Events = {
  
       SCROLL: 'windowScroll',
       SCROLL_ENTER: 'windowScrollEnter',
       SCROLL_LEAVE: 'windwScrollLeave',   
    
    } // Events  
    
  })(jQuery);
  
  
  /* ---------------------------------- */
  
  /* Auto Instantiate */
  
  (function($) {
  
    $.fn.Instantiate = function() {
       
      var config = {};
    
        this.each(function() { 
  
            var $self = $(this),
                $handler = $self.attr('data-handler');
                    
            if ($self[$handler])
              $self[$handler]();
                
        });
        
    }
      
    
  
  })(jQuery);
  
  /* ---------------------------------- */
  
  /* Scrollable */
  
  (function($) {
  
    
    $.fn.Scrollable = function(settings) {
     
       var config = { threshold: 0 };
   
       if (settings) $.extend(config, settings);
      
       this.each(function() { 
        
          var $self = $(this);
  
           $(window)
             .bind('scroll',
              function(e){
              
                if ( $.inview($self,{threshold:config.threshold}) ) {
                  
                  if (!$self.hasClass('active')){
                  
                    $self.addClass('active');
                    
                    $self.triggerHandler($.Events.SCROLL_ENTER);
                    
                  }
                    
                    
                  $self.triggerHandler($.Events.SCROLL,$.distancefromfold($self,{threshold:config.threshold}) - config.threshold)
                  
                }else{
                  
                  if ($self.hasClass('active')){
                  
                    $self.removeClass('active');
                    
                    $self.triggerHandler($.Events.SCROLL_LEAVE);
                    
                  }
                
                }
                  
              })
       });
       
      return this;
       
    } // Generic .slide
    
      $.fn.SlideDeals = function() {
     
       this.each(function() { 
          
          $(this)
            .Scrollable()
            .bind($.Events.SCROLL,on_scroll)
            .bind($.Events.SCROLL_ENTER,on_scroll_enter)
            //.bind($.Events.SCROLL_LEAVE,on_scroll_leave);
          
          // calculate animation on load in case of a refresh while viewing the slide
          on_scroll_enter(null);
          on_scroll(null, null);
          
          // adjust pin position on resize if necessary
          $(window).resize(function() {
            adjust_pins();
          });
          
          function on_scroll(e,distance) {
            // firefox is too clever; we don't actually want to scroll horizontally when overflow-x: hidden cuts off content
            if ($(window).width() < SLIDE_WIDTH) { $(window).scrollLeft(0); }
            
            var new_back_pos_y, phone_opacity;
            
            var abs_offset = $(window).scrollTop();
            var slide_offset = abs_offset - (SLIDE_HEIGHT * SLIDE_DEALS);
            
            var back_pos, back_pos_x, back_pos_y;
            if ( $.browser.msie ) {
              back_pos_x = $("#deals-element-pins-back").css('backgroundPositionX');
              back_pos_y = $("#deals-element-pins-back").css('backgroundPositionY');
            } else {
              back_pos = $("#deals-element-pins-back").css("background-position").split(" ");
              back_pos_x = back_pos[0];
              back_pos_y = back_pos[1];
            }
            
            var front2_pos, front2_pos_x;
            if ( $.browser.msie ) {
              front2_pos_x = $("#deals-element-pins-front2").css('backgroundPositionX');
            } else {
              front2_pos = $("#deals-element-pins-front2").css("background-position").split(" ");
              front2_pos_x = front2_pos[0];
            }
            
            if (slide_offset < -150) {
              new_back_pos_y = $.fit_line(new Array(-525, -150), new Array(-226, 514), slide_offset);
              
              $("#deals-element-pins-back").css({'background-attachment':'fixed', 'background-position':back_pos_x + ' '+new_back_pos_y+'px'});
            } else {
              $("#deals-element-pins-back").css({'background-attachment':'scroll', 'background-position':back_pos_x + ' 364px'});
            }
            
            if (slide_offset < -75) {
              new_front2_pos_y = $.fit_line(new Array(-2925, -75), new Array(-377, 645), slide_offset);
              $("#deals-element-pins-front2").css({'background-attachment':'fixed', 'background-position':front2_pos_x + ' ' + new_front2_pos_y+'px'});
            } else {
              $("#deals-element-pins-front2").css({'background-attachment':'scroll', 'background-position':front2_pos_x + ' 570px'});
            }
            
            if (slide_offset < 0) {
              $("#deals-element-pins-front1").css({'background-attachment':'fixed'});
            } else
            {
              $("#deals-element-pins-front1").css({'background-attachment':'scroll'});
            }
            
            phone_opacity = Math.min(Math.max($.fit_line(new Array(-150, 0), new Array(0, 1), slide_offset), 0), 1);
            $("#deals-element-phone").css({'opacity':phone_opacity});
  
          }
          
          function on_scroll_enter(e) {
            $("#deals .element").css({'margin-left':'0', 'left':'0'});
            adjust_pins();
          }
          
          function on_scroll_leave(e) {
          
          }
    
  
          /**
           * background-attachment: fixed means percentages of the viewport apply even if the viewport is narrower than our min slide width
           * so we'll need to set our own (absolute) min values for the background position in this case
           */
          function adjust_pins() {
            var width = $(window).width();
            
            var map_pos, map_pos_y;
            if ( $.browser.msie ) {
              map_pos_y = $("#deals-element-map").css('backgroundPositionY');
            } else {
              map_pos = $("#deals-element-map").css("background-position").split(" ");
              map_pos_y = map_pos[1];
            }
            
            var phone_pos, phone_pos_y;
            if ( $.browser.msie ) {
              phone_pos_y = $("#deals-element-phone").css('backgroundPositionY');
            } else {
              phone_pos = $("#deals-element-phone").css("background-position").split(" ");
              phone_pos_y = phone_pos[1];
            }
            
            var front1_pos, front1_pos_y;
            if ( $.browser.msie ) {
              front1_pos_y = $("#deals-element-pins-front1").css('backgroundPositionY');
            } else {
              front1_pos = $("#deals-element-pins-front1").css("background-position").split(" ");
              front1_pos_y = front1_pos[1];
            }
            
            var front2_pos, front2_pos_y;
            if ( $.browser.msie ) {
              front2_pos_y = $("#deals-element-pins-front2").css('backgroundPositionY');
            } else {
              front2_pos = $("#deals-element-pins-front2").css("background-position").split(" ");
              front2_pos_y = front2_pos[1];
            }
            
            var back_pos, back_pos_y;
            if ( $.browser.msie ) {
              back_pos_y = $("#deals-element-pins-back").css('backgroundPositionY');
            } else {
              back_pos = $("#deals-element-pins-back").css("background-position").split(" ");
              back_pos_y = back_pos[1];
            }
            
            var pos_x;
            
            if (width < SLIDE_WIDTH) {
              pos_x = DEALS2_MAGIC;
            } else {
              pos_x = $.fit_line(new Array(1000, 1600), new Array(312, 600), width);
            }
            
            $("#deals-element-map").css({'background-position':pos_x+'px '+map_pos_y});
            $("#deals-element-phone").css({'background-position':pos_x+'px '+phone_pos_y});
            $("#deals-element-pins-front1").css({'background-position':pos_x+'px '+front1_pos_y});
            $("#deals-element-pins-front2").css({'background-position':pos_x+'px '+front2_pos_y});
            $("#deals-element-pins-back").css({'background-position':pos_x+'px '+back_pos_y});
          }
       });
       
      return this;
       
    } //SlideDeals
    
    $.fn.SlideThings = function() {
     
       this.each(function() { 
          
          $(this)
            .Scrollable()
            .bind($.Events.SCROLL,on_scroll)
            .bind($.Events.SCROLL_ENTER,on_scroll_enter);
            //.bind($.Events.SCROLL_LEAVE,on_scroll_leave);
          
          // calculate animation on load in case of a refresh while viewing the slide
          on_scroll(null, null);
          
          // if the window < SLIDE_WIDTH, we'll need to adjust card position when in background-attachment: fixed :(
          $(window).resize(function() {
            adjust_cards();
          });
            
          function on_scroll(e,distance) {
            
            var abs_offset = $(window).scrollTop();
            var slide_offset = abs_offset - (SLIDE_HEIGHT * SLIDE_THINGS);
            var hand_height;
            
            var card2_pos, card2_pos_x;
            if ( $.browser.msie ) {
              card2_pos_x = $("#things-element-card2").css('backgroundPositionX');
            } else {
              card2_pos = $("#things-element-card2").css("background-position").split(" ");
              card2_pos_x = card2_pos[0];
            }
            
            if (slide_offset < 0)
            {
              hand_height = $.fit_line(new Array(-1025, 0), new Array(0, 738), slide_offset);
              $("#things-element-hand").css({'height':+hand_height+'px'});
              $("#things-element-card1, #things-element-card2").css({'background-attachment':'fixed'});
              
              var card2_pos_y = $.fit_line(new Array(-500, 0), new Array(0, 224), slide_offset);
              $("#things-element-card2").css({'background-position':card2_pos_x+' '+card2_pos_y+'px'});
            }
            else
            {
              $("#things-element-hand").css({'height':'738px'});
              $("#things-element-card1, #things-element-card2").css({'background-attachment':'scroll'});
              $("#things-element-card2").css({'background-position':card2_pos_x+' 224px'});
            }
            
          }
          
          function on_scroll_enter(e) {
            adjust_cards();
          }
          
          function on_scroll_leave(e) {
          
          }
          
          function adjust_cards() {
            var width = $(window).width();
            
            var card1_pos, card1_pos_y;
            if ( $.browser.msie ) {
              card1_pos_y = $("#things-element-card1").css('backgroundPositionY');
            } else {
              card1_pos = $("#things-element-card1").css("background-position").split(" ");
              card1_pos_y = card1_pos[1];
            }
            
            var card2_pos, card2_pos_y;
            if ( $.browser.msie ) {
              card2_pos_y = $("#things-element-card2").css('backgroundPositionY');
            } else {
              card2_pos = $("#things-element-card2").css("background-position").split(" ");
              card2_pos_y = card2_pos[1];
            }
            
            var pos_x;
            
            if (width < SLIDE_WIDTH) {
              pos_x = THINGS_MAGIC + 'px';
            } else {
              pos_x = "88%";
            }
            
            $("#things-element-card1").css({'background-position':pos_x+' '+card1_pos_y});
            $("#things-element-card2").css({'background-position':pos_x+' '+card2_pos_y});
          }
              
       });
       
      return this;
       
    } //SlideThings
    
      
    $.fn.SlideNomics = function() {
     
       this.each(function() { 
          
          $(this)
            .Scrollable()
            .bind($.Events.SCROLL,on_scroll);
            //.bind($.Events.SCROLL_ENTER,on_scroll_enter)
            //.bind($.Events.SCROLL_LEAVE,on_scroll_leave);
          
          // calculate animation on load in case of a refresh while viewing the slide
          on_scroll(null, null);
          adjust_shadow();
          
          $(window).resize(function() {
            on_scroll(null, null);
            adjust_shadow();
          });
          
          function adjust_shadow() {
            var shadow_origin = $.fit_line(new Array(2500, 1000), new Array(30, 35), $(window).width());
            $("#nomics-element-shadow").css({'-moz-transform-origin':shadow_origin+'% 50%',
                                            '-webkit-transform-origin':shadow_origin+'% 50%',
                                            '-o-transform-origin':shadow_origin+'% 50%',
                                            '-ms-transform-origin':shadow_origin+'% 50%'});
          }
          
          function on_scroll(e,distance) {
        
            var abs_offset = $(window).scrollTop();
            var slide_offset = abs_offset - (SLIDE_HEIGHT * SLIDE_NOMICS);
            
            var slice1_pos_x, slice1_pos_y, slice2_pos_x, slice2_pos_y, slice3_pos_x, slice_3_pos_y, shadow_opacity, shadow_scale;
            var width = $(window).width();
            var shadow_pos, shadow_pos_x, shadow_pos_y;
            
            if (slide_offset < 0) {
              if (width < SLIDE_WIDTH) {
                slice1_pos_x = $.fit_line(new Array(-500, 0), new Array(42600/260, 142), slide_offset) + "px";
                slice2_pos_x = $.fit_line(new Array(-500, 0), new Array(45440/260, 142), slide_offset) + "px";
                slice3_pos_x = $.fit_line(new Array(-500, 0), new Array(26980/260, 142), slide_offset) + "px";
              } else {
                slice1_pos_x = $.fit_line(new Array(-500, 0), new Array(30, 26), slide_offset) + "%";
                slice2_pos_x = $.fit_line(new Array(-500, 0), new Array(32, 26), slide_offset) + "%";
                slice3_pos_x = $.fit_line(new Array(-500, 0), new Array(19, 26), slide_offset) + "%";
                //shadow_pos_x = $.fit_line(new Array(-300, 0), new Array(45, 26), slide_offset) + "%";
                shadow_pos_x = "26%"
              }
              //slice1_pos_y = $.fit_line(new Array(-500, 0), new Array(30, 42), slide_offset);
              slice1_pos_y = $.fit_line(new Array(-500, 0), new Array(150, 210), slide_offset);
              slice2_pos_y = $.fit_line(new Array(-500, 0), new Array(240, 210), slide_offset);
              slice3_pos_y = slice2_pos_y;
              shadow_opacity = Math.max(Math.min($.fit_line(new Array(-350, 0), new Array(0, 0.9), slide_offset), 0.9), 0);
              shadow_scale = Math.max(Math.min($.fit_line(new Array(-350, 0), new Array(3, 1), slide_offset), 2), 1);
              
              
              if ( $.browser.msie ) {
                shadow_pos_y = $("#nomics-element-shadow").css('backgroundPositionY');
              } else {
                shadow_pos = $("#nomics-element-shadow").css("background-position").split(" ");
                shadow_pos_y = shadow_pos[1];
              }
            
              $("#nomics-element-slice1").css({'background-attachment':'fixed', 'background-position':slice1_pos_x+' '+slice1_pos_y+'px'});
              $("#nomics-element-slice2").css({'background-attachment':'fixed', 'background-position':slice2_pos_x+' '+slice2_pos_y+'px'});
              $("#nomics-element-slice3").css({'background-attachment':'fixed', 'background-position':slice3_pos_x+' '+slice3_pos_y+'px'});
              
              $("#nomics-element-shadow").css({'opacity':shadow_opacity,
                                              '-moz-transform':'scaleX('+shadow_scale+')',
                                              '-webkit-transform':'scaleX('+shadow_scale+')',
                                              '-o-transform':'scaleX('+shadow_scale+')',
                                              '-ms-transform':'scaleX('+shadow_scale+')',
                                              'background-position':shadow_pos_x+' '+shadow_pos_y});
            } else {
              $("#nomics .element").css({'background-attachment':'scroll'});
              $("#nomics .element").css({'background-position':'26% 210px'});
              $("#nomics-element-shadow").css({'opacity':'0.9',
                                              '-moz-transform':'scaleX(1)',
                                              '-webkit-transform':'scaleX(1)',
                                              '-o-transform':'scaleX(1)',
                                              '-ms-transform':'scaleX(1)'});
            }
          }
          
          function on_scroll_enter(e) {
  
          }
          
          function on_scroll_leave(e) {
          
          }
              
       });
       
      return this;
       
    } //SlideNomics
    
    
    $.fn.SlideStandard = function() {
     
       this.each(function() { 
          
          $(this)
            .Scrollable()
            .bind($.Events.SCROLL,on_scroll);
            //.bind($.Events.SCROLL_ENTER,on_scroll_enter);
            //.bind($.Events.SCROLL_LEAVE,on_scroll_leave);
          
          // calculate animation on load in case of a refresh while viewing the slide
          on_scroll(null, null);
          
          function on_scroll(e,distance) {
            
            var abs_offset = $(window).scrollTop();
            var slide_offset = abs_offset - (SLIDE_HEIGHT * SLIDE_STANDARD);
            var ipad_angle;
            
            if (slide_offset < 0) {
              ipad_angle = $.fit_line(new Array(-1250, 0), new Array(0, 90), slide_offset);
              $("#standard-element-ipad-v").css({'-moz-transform':'rotate('+ipad_angle+'deg)',
                                                                        '-webkit-transform':'rotate('+ipad_angle+'deg)',
                                                                        '-o-transform':'rotate('+ipad_angle+'deg)',
                                                                        'msTransform':'rotate('+ipad_angle+'deg)',
                                                                        'display':'block'});
              $("#standard-element-ipad-h").css({'display':'none'});
            } else {
              $("#standard-element-ipad-v").css({'-moz-transform':'rotate(90deg)',
                                                                        '-webkit-transform':'rotate(90deg)',
                                                                        '-o-transform':'rotate(90deg)',
                                                                        '-ms-transform':'rotate(90deg)',
                                                                        'display':'none'});
              $("#standard-element-ipad-h").css({'display':'block'});
            }
          }
          
          function on_scroll_enter(e) {
          }
          
          function on_scroll_leave(e) {
          
          }
              
       });
       
      return this;
       
    } //SlideStandard
    
    $.fn.SlideOcean = function() {
     
       this.each(function() { 
          
          $(this)
            .Scrollable()
            .bind($.Events.SCROLL,on_scroll);
            //.bind($.Events.SCROLL_ENTER,on_scroll_enter);
            //.bind($.Events.SCROLL_LEAVE,on_scroll_leave);
          
          // calculate animation on load in case of a refresh while viewing the slide
          on_scroll(null, null);
          
          function on_scroll(e,distance) {
            
            var abs_offset = $(window).scrollTop();
            var slide_offset = abs_offset - (SLIDE_HEIGHT * SLIDE_OCEAN);
            var pencil_pos, highlight_width;
            
            //var b1pos = '50% ' + ($(window).height()/2-distance/3) + 'px';
            //var b2pos = 'right ' + ($(window).height()/7-distance/3) + 'px';
            var b1pos = -0.5 * slide_offset; //$.fit_line(new Array(-1000, 0), new Array(300, 600), slide_offset);
            var b2pos = -1 * slide_offset; //$.fit_line(new Array(-1000, 0), new Array(300, 600), slide_offset);
                       
            $("#ocean-element-bubbles1").css({'background-position': '50% ' + b1pos+'px'});
            $("#ocean-element-bubbles2").css({'background-position': 'right ' + b2pos+'px'});
          }
          
          function on_scroll_enter(e) {
          }
          
          function on_scroll_leave(e) {
          
          }
              
       });
       
      return this;
       
    } //SlideOcean
      
  })(jQuery);
  
  /* ---------------------------------- */
  
  /* Worker */
  
  (function($) {
  
  
      $.distancefromfold = function($element, settings) {
          if (settings.container === undefined || settings.container === window) {
              var fold = $(window).height() + $(window).scrollTop();
          } else {
              var fold = $(settings.container).offset().top + $(settings.container).height();
          }
          return (fold + settings.threshold) - $element.offset().top ;
      };
      
      $.belowthefold = function($element, settings) {
          if (settings.container === undefined || settings.container === window) {
              var fold = $(window).height() + $(window).scrollTop();
          } else {
              var fold = $(settings.container).offset().top + $(settings.container).height();
          }
          return fold <= $element.offset().top - settings.threshold;
      };
          
      $.abovethetop = function($element, settings) {
          if (settings.container === undefined || settings.container === window) {
              var fold = $(window).scrollTop();
          } else {
              var fold = $(settings.container).offset().top;
          }
          return fold >= $element.offset().top + settings.threshold  + $element.height();
      };
      
      $.inview = function($element, settings) {
          return ($.abovethetop($element,settings)!=true && $.belowthefold($element,settings)!=true)
      };
      
      /**
       * linear least squares regression
       * based on example by DracoBlue: http://dracoblue.net/dev/linear-least-squares-in-javascript/159/
       */
      $.fit_line = function(values_x, values_y, current_x) {
        var sum_x = 0;
        var sum_y = 0;
        var sum_xy = 0;
        var sum_xx = 0;
        var count = 0;
        
        var x = 0;
        var y = 0;
        var values_length = values_x.length;
        
        if (values_length != values_y.length) {
          throw new Error('The parameters values_x and values_y need to have same size!');
        }
        
        if (values_length === 0) {
          return false;
        }
        
        for (var v = 0; v < values_length; v++) {
          x = values_x[v];
          y = values_y[v];
          sum_x += x;
          sum_y += y;
          sum_xx += x*x;
          sum_xy += x*y;
          count++;
        }
        
        var m = (count*sum_xy - sum_x*sum_y) / (count*sum_xx - sum_x*sum_x);
        var b = (sum_y/count) - (m*sum_x)/count;
        
        var current_y = (m * current_x) + b;
        return current_y;
      };
      
      $.set_slide_height = function() {
        SLIDE_HEIGHT = Math.max(MIN_SLIDE_HEIGHT, $(window).height())
        $(".slide").css({'height':SLIDE_HEIGHT});
      };
      
  })(jQuery);

} // mobile check

