var fhProjects =
{
  init: function()
  {
    var projectsSpotlight = $('#projects-spotlight');

    if(projectsSpotlight.length && projectsSpotlight.css('display') != 'none')
    {
      projectsSpotlight.load(baseUrl + '/spotlight', function()
      {
        $('#spotlight-header').cycle({
          timeout: 8000
        });
      });
    };
  }
};

var ellipses =
{
  init: function()
  {
    $('#blog li p.content').fhEllipses(
    {
      lines: 4,
      readMoreElement:
      {
        className: '.read-more',
        extraHeight: 4
      }
    });
    $('#projects li p.content').fhEllipses(
    {
      lines: 3,
      readMoreElement:
      {
        className: '.read-more',
        extraHeight: 4
      }
    });
  }
};

var fhKonami =
{
  keysArray: Array(38, 38, 40, 40, 37, 39, 37, 39, 66, 65),
  keysCounter: 0,
  interval: null,
  gravity: 1,
  friction: -0.02,
  offsetx: 10,
  offsety: 0,
  x: 0,
  y: 0,
  radius: 28,

  init: function()
  {
    $(document).keyup(function(e)
    {
      if(fhKonami.keysArray[fhKonami.keysCounter] == e.which)
      {
        fhKonami.keysCounter++;
        if(fhKonami.keysCounter == fhKonami.keysArray.length)
        {
          $('<div style="background: #333333; text-align: center; color: #ffffff; position: fixed; top: 20px; left: 20px; font-size: 14px; font-weight: bold; padding: 10px; -webkit-border-radius: 5px; -moz-border-radius: 5px;"><h2>Arrow keys / spacebar</h2><a href="http://erkie.github.com/" target="_blank">Thanks to Erkie</a></div>').appendTo($('body'));
          javascript:var s = document.createElement('script');
          s.type='text/javascript';
          document.body.appendChild(s);
          s.src='http://erkie.github.com/asteroids.min.js';
          void(0);
        };
      }
      else
      {
        fhKonami.keysCounter = 0;
      };
    });
  }
};

var googleMaps =
{
  init: function()
  {
    $('#google-map').each(function()
    {
      var element = $(this);
      var data = element.data();
      var myOptions = {
        zoom: 7,
        center: new google.maps.LatLng(52.2, 5.2),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        sensor: 'true'
      }
      var map = new google.maps.Map(element.get(0), myOptions);

      var image = new google.maps.MarkerImage(
        data.markerImage,
        new google.maps.Size(26,26),
        new google.maps.Point(0,0),
        new google.maps.Point(13,13)
      );

      var shadow = new google.maps.MarkerImage(
        data.markerShadow,
        new google.maps.Size(46,38),
        new google.maps.Point(0,0),
        new google.maps.Point(15,15)
      );

      var infoWindow = new google.maps.InfoWindow();
      var markers = [];

      var marker = new google.maps.Marker({
        icon: image,
        shadow: shadow,
        map: map,
        position: new google.maps.LatLng(data.latTilburg, data.longTilburg),
        info: '<div class="location">' +
            '<strong>Freshheads Tilburg</strong><br/>' +
            'Wilhelminapark 21<br/>' +
            '5041 EB Tilburg<br/>' +
            '<br/>' +
            '<a href="http://maps.google.nl/maps?daddr=Wilhelminapark+21,+5041+Tilburg&hl=nl&sll=51.5664,5.07722&sspn=0.010404,0.023925&geocode=CXUkWWMTZgk4FUDXEgMd5HhNACmNHImiJb7GRzG9FPamgeyM7g&mra=ls&t=m&z=16" rel="external">Route plannen</a>' +
          '</div>'
      });
      markers.push(marker);
      var marker = new google.maps.Marker({
        icon: image,
        shadow: shadow,
        map: map,
        position: new google.maps.LatLng(data.latAmsterdam, data.longAmsterdam),
        info: '<div class="location">' +
            '<strong>Freshheads Amsterdam</strong><br/>' +
            'Wibautstraat 150<br/>' +
            '1091 GR Amsterdam<br/>' +
            '<br/>' +
            '<a href="http://maps.google.nl/maps?daddr=Wibautstraat+150,+1091+Amsterdam&hl=nl&sll=52.353804,4.91198&sspn=0.012097,0.03047&geocode=CWLuD_fLREl1FQzbHgMdbPNKAClr0aqfhAnGRzGf6snxZqpyHg&mra=ls&t=m&z=16" rel="external">Route plannen</a>' +
          '</div>'
      });
      markers.push(marker);

      for(i in markers)
      {
        var marker = markers[i];
        google.maps.event.addListener(marker, "click", function(e) {
          infoWindow.setContent(this.info);
          infoWindow.open(map, this);
        });
      }
    });
    $('#route .tabs').tabify();
  }
};

var seminars  =
{
  setArchive: function()
  {
    if($('#archive').length > 0)
    {
      var triggers = $('#archive .trigger');
      triggers.click(function(e)
      {
        e.preventDefault();
        triggers.next().slideUp();
        $(this).next().slideDown();
      });
    };
  }
};

var jumpto =
{
  button: null,

  init: function()
  {
    var self = this;
    self.button = $('#btn-top');

    if(self.button.length)
    {
      self.button.click(function(e)
      {
        e.preventDefault();

        $('html, body').animate({
          scrollTop: 0
        }, 400);
      });

      self.position();
      $(window).bind('scroll load resize', function()
      {
        self.position();
      });
    }
  },

  position: function()
  {
    var self = this;
    var position = $(window).scrollTop();

    if(position > $(window).height() / 4)
    {
      self.button.fadeIn();
    }
    else
    {
      self.button.fadeOut();
    }
  }
};

var projectControls =
{
  init: function()
  {
    var prev = $('#btn-prev'),
        next = $('#btn-next');
        // -20 is browser scrollbar

    if(prev.attr('href') != undefined || next.attr('href') != undefined) {
      if($(window).width() - 20 < 1180)
      {
        prev.hide();
        next.hide();
      }

      $('html').keydown(function(e)
      {
        if(e.keyCode === 37)
        {
          window.location = prev.attr('href');
        }
        if(e.keyCode === 39)
        {
          window.location = next.attr('href');
        }
      });
    }
  }
};

var cycle = {
  interval: null,
  timer: 8000,
  elapsedTime: 0,
  speed: 1000,

  init: function(carousels)
  {
    if($.fn.cycle)
    {
      var carousels = (carousels ? carousels : $('[rel*=cycle]'));
      carousels.each(function()
      {
        var element = $(this);
        if(element.find('li').length > 1)
        {

          var options = $.extend(element.data(), {
            timeout: cycle.timer,
            pager:  '#spotlight-nav',
            speed: cycle.speed,
            pagerAnchorBuilder: function(idx, slide) {
                return '<div>' + idx + '</div>';
            },
            updateActivePagerLink: function(pager, index)
            {
              clearInterval(cycle.interval);
              cycle.elapsedTime = 0;
              $('#spotlight-timer').remove();

              var $el = $(pager)
              var $activeLink = $el.find('div')
                .removeClass('active')
                .filter(function(i)
                {
                  return i == index;
                });

              if($.browser.msie)
              {
                $activeLink.addClass('active');
              }
              else
              {
                $activeLink.append('<canvas id="spotlight-timer" width="40" height="40"></canvas>');
                cycle.canvas = document.getElementById('spotlight-timer');
                cycle.width = 15;
                cycle.height = 15;
                cycle.ctx = cycle.canvas.getContext('2d');

                cycle.interval = setInterval(function() {
                  cycle.elapsedTime+= 100;
                  var deg = (cycle.elapsedTime / (cycle.timer - (cycle.speed / 2))) * 360;
                  cycle.drawTimer(deg);
                }, 100);
              }
            }
          });
          element.cycle(options);
        }
      });
    };
  },

  drawTimer: function(deg) {
    var x = cycle.width / 2, // center x
        y = cycle.height / 2, // center y
        radius = 7,
        startAngle = -90 * (Math.PI/180),
        endAngle = (deg - 90) * (Math.PI/180),
        counterClockwise = true;

    cycle.ctx.clearRect(0, 0, cycle.height, cycle.width);

    cycle.ctx.beginPath();
    cycle.ctx.lineTo(radius, radius);
    cycle.ctx.arc(radius, radius, radius, startAngle, endAngle, false);
    cycle.ctx.closePath();
    cycle.ctx.fillStyle = "#248cce";
    cycle.ctx.fill();
  }
};

$(function($)
{
  $('body').addClass('js');
  ellipses.init();
  $('#projects-overview li, #heads-overview li, #clients-list li, #personal-projects li, #blog-articles li, #christmas-heads-overview li, #product .product-thumb, #blog li, .person').fhHover();

  fhProjects.init();
  fhKonami.init();
  $('.clearInput').fhInputClear();

  googleMaps.init();
  cycle.init();
  seminars.setArchive();
  jumpto.init();
  projectControls.init();

  $('[rel*=external]').live('click', function()
  {
    $(this).attr('target', '_blank');
  });

});
