if (!window.console) {
  window.console = {
    log: function() {}
  };
};

$(function() {
  //$.nametake.debug = true;
  var useDebugger = false
    , isiPad = navigator.userAgent.match(/iPad/i)
    , swipeEnabled = true;

  var $preloader = $('#preloader')
    , $container = $('#container')
    , $window = $(window)
    , $document = $(document)
    , $scrollBar = $('#scrollBar')
    , $leftArrow = $('#leftArrow')
    , $rightArrow = $('#rightArrow')
    , $navigation = $('#navigation')
    , $profAnchor = $('#profAnchor')
    , $scrollables;

  var manager = $.nametake('#container', {ajaxElement: 'ajaxContent', enablePreloader: true})
    , mekury = $window.mekury().data('mekuryApi');

  manager.on('preinitialize', function(preloader) {
    $preloader.fadeIn();

    preloader.on('progress', function() {
      $preloader.find('span').text(Math.floor(preloader.getProportion() * 100));
    });

    preloader.on('complete', function() {
      manager.initialize();
    });
  });

  manager.on('initialize', function() {
    $leftArrow.bind('click', function(e) {
      e.preventDefault();
      manager.moveToPrev();
    });
    
    $rightArrow.bind('click', function(e) {
      e.preventDefault();
      manager.moveToNext();
    });

    if (!isiPad) {
      $window
        .bind('mekuryleft', function(e) {
          if (manager.currentScene.hasPrev()) {
            $container.animate({left: - $container.width() * manager.currentScene.index() + 10}, 100,
              'easeInOutQuad',
              function() { $container.unbind('click').bind('click', onClick); }
            );
          }
        })
        .bind('mekuryright', function(e) {
          if (manager.currentScene.hasNext()) {
            $container.animate({left: - $container.width() * manager.currentScene.index() - 10}, 100,
              'easeInOutQuad',
              function() { $container.unbind('click').bind('click', onClick); }
            );
          }
        })
        .bind('mekuryout', function(e) {
          $container.animate({left: - $container.width() * manager.currentScene.index()}, 100, 'easeInOutQuad');
        });
    } else {
      //この部分はコードがきれいではないので暇を見つけて直す
      $document.swipe((function() {
        var isFirstMove = true
          , initialDirection;
        return {
          swipeStatus: function(e, phase, direction, distance) {
            if (!swipeEnabled) return;
            debug('swipeDirection', direction);
            if (phase === 'move') {
              debug('swipeStatus', 'move');
              if (!(direction === 'left' || direction == 'right')) return;
              if (direction === 'left') distance = -distance;
              if (isFirstMove) $scrollBar.fadeTo(200, 0);
              $container.css({left:  - $container.width() * manager.currentScene.index() + distance});
              debug('swipeDistance', distance);
              isFirstMove = false;
            } else if (phase === 'cancel') {
              debug('swipeDistance', 0);
              debug('swipeStatus', 'cancel');
              $container.stop().animate({left:  - $container.width() * manager.currentScene.index()}, 300);
              $scrollBar.fadeTo(200, 1);
              isFirstMove = true;
            } else if (phase === 'end') {
              debug('swipeStatus', 'end');
              if (direction === 'left') {
                if (manager.currentScene.hasNext()) {
                  manager.moveToNext();
                } else {
                  $container.stop().animate({left:  - $container.width() * manager.currentScene.index()}, 300,
                    function() {
                      $scrollBar.fadeTo(200, 1);
                      debug('swipeDistance', 0);
                    });
                }
                isFirstMove = true;
              } else if (direction === 'right') {
                if (manager.currentScene.hasPrev()) {
                  manager.moveToPrev();
                } else {
                  $container.stop().animate({left:  - $container.width() * manager.currentScene.index()}, 300,
                    function() {
                      $scrollBar.fadeTo(200, 1);
                      debug('swipeDistance', 0);
                    });
                }
                isFirstMove = true;
              } else {
                $container.stop().animate({left:  - $container.width() * manager.currentScene.index()}, 300);
                $scrollBar.fadeTo(200, 1);
                isFirstMove = true;
              }
            }
          },
          threshold: 100
        };
      })());
    }

    if (window.Processing) {
      new Processing($('#eizostaff').get(0), $('#eizostaffScript').html());
      new Processing($('#conceptCanvas').get(0), $('#conceptScript').html());
    }
    $scrollables = $('.page').scrollable({
      visibleHeight: $window.height(),
      externalScrollBar: '#scrollBar'
    });

    $scrollables.scrollable.api($('#staff')).on('scroll', function(pos) {
      if ((this.scrollTop() > $('#profile01').position().top) && $profAnchor.css('display') === 'none') {
        $profAnchor.fadeIn();
      } else if ((this.scrollTop() < $('#profile01').position().top) && $profAnchor.css('display') === 'block') {
        $profAnchor.fadeOut();
      }
    });

    $navigation.fadeIn();
    manager.moveTo(manager.initialScene);
  });

  manager.on('transitionend', function() {
    mekury.reset();
  });

  manager.of('/', function(scene) {
    scene.toChild(function(to, next) {
      $container.css({
        left:  - $container.width() * to.index(),
        visibility: 'visible'
      });
      $navigation.fadeIn();
      $preloader.fadeOut(next);
    });
  });

  manager.of(/\/.+/, function(scene) {
    scene
      .toSibling(function(to, next) {
        $container.stop().animate({
          left: - $container.width() * to.index()
        }, 700, 'easeInOutExpo', next);
      })
      .start(function(next) {
        $window.unbind('click');
        mekury.stop();
        $navigation.find('.' + scene.id.slice(1)).removeClass('active');
        $scrollBar.fadeTo(200, 0);
        $leftArrow.fadeOut();
        $rightArrow.fadeOut();
        next();
      })
      .end(function(next) {
        debug('swipeDistance', 0);
        $scrollables.scrollable.api(scene.index()).reset({visibleHeight: $window.height()});
        $navigation.find('.' + scene.id.slice(1)).addClass('active');
        $scrollBar.fadeTo(200, 1);
        if (scene.hasPrev()) $leftArrow.fadeIn();
        if (scene.hasNext()) $rightArrow.fadeIn();
        next();
      });
  });
    
  manager.of('/staff', function(scene) {
    scene
      .start(function(next) {
        next();
        $profAnchor.fadeOut();
      })
      .end(function(next) {
        if (($scrollables.scrollable.api(scene.index()).scrollTop() > $('#profile01').position().top)) {
          $profAnchor.fadeIn();
        }
        next();
      });
  });  

  $('#salonGallery a').live('click', function(e) {
    var anchor = '#' + this.href.split('#')[1]
      , i = $('.page').index($(anchor).parents('.page'));
    e.preventDefault();
    $scrollables.scrollable.api(i).scrollTo(anchor);
  });

  $('.staffList .icon a').live('click', function(e) {
    var anchor = '#' + this.href.split('#')[1]
      , i = $('.page').index($(anchor).parents('.page'));
    e.preventDefault();
    $scrollables.scrollable.api(i).scrollTo(anchor);
  });

  $('#profAnchor a').live('click', function(e) {
    var anchor = '#' + this.href.split('#')[1]
      , i = $('.page').index($(anchor).parents('.page'));
    e.preventDefault();
    $scrollables.scrollable.api(i).scrollTo(anchor);
  });

  var onClick = function(e) {
    var $target = $(e.target)
      , queue = $target.parents('.simpleScrollContent').queue();
    if ($target.hasClass('noclick') || (queue && queue.length > 0)) return;
    if (e.pageX < $window.width() / 2) {
      manager.moveToPrev();
    } else {
      manager.moveToNext();
    }
    $container.unbind('click');
  };

  $window
    .bind('resize', function(e) {
      $('#wrapper').css({width: $window.width(), height: $window.height()});
      $('#scrollBar').height($window.height() * 0.7);
      $container.css('left', - $container.width() * manager.currentScene.index());
      $('.page')
        .css('width', $window.width())
        .each(function(i, elem) {
          $(elem).css('left', i * $window.width());
        });
      if ($scrollables) $scrollables.scrollable.api(manager.currentScene.index()).reset({visibleHeight: $window.height()});
    })
    .trigger('resize');

  window.scrollTo = function(anchor) {
    var i = $('.page').index($(anchor).parents('.page'));
    $scrollables.scrollable.api(i).scrollTo(anchor);
  };

  var debug = function(type, val) {
    if (useDebugger) $('#' + type).text(val);
  };
});
