var start_parallax = function() {
  var customLayerOptions = {
      'mooncake-sprite-product': { left: 300, right: 320, level: 1 },
      'mooncake-sprite-title2': { left: 210, right: 240, level: 2, original: 225 },
      'mooncake-sprite-title3': { left: 235, right: 260, level: 2, original: 252 },
      'mooncake-sprite-stripes-1': { left: 220, right: 250, level: 3 },
      'mooncake-sprite-stripes-2': { left: 214, right: 256, level: 4 },
      'mooncake-sprite-stripes-3': { left: 210, right: 254, level: 5 },
      'mooncake-sprite-moon': { left: 35, right: 75, level: 6 },
      'mooncake-sprite-sign': { left: 731, right: 781, level: 7 },

      'barretta-sprite-product': { left: 442, right: 488, level: 1 }, // 495
      'barretta-sprite-gate': { left: 151, right: 171, level: 2 }, // 171
      'barretta-sprite-rails': { left: 197, right: 233, level: 3 }, // 225
      'barretta-sprite-title': { left: 470, right: 440, level: 4 }, // 460
      'barretta-sprite-chimney': { left: 534, right: 564, level: 5 }, // 544
      'barretta-sprite-steam': { left: 417, right: 457, level: 6 }, // 447

      'torta-sprite-product': { left: 153, right: 173, level: 1 }, // 163
      'torta-sprite-title': { left: 280, right: 310, level: 2 }, // 295
      'torta-sprite-watering-can': { left: 618, right: 634, level: 3 }, // 646
      'torta-sprite-sign': { left: 163, right: 193, level: 4 }, // 178
      'torta-sprite-star-1': { left: 52, right: 112, level: 5 }, // 82
      'torta-sprite-star-2': { left: 327, right: 397, level: 6 }, // 362
      'torta-sprite-star-3': { left: 100, right: 120, level: 7 }, // 110
      'torta-sprite-star-4': { left: 470, right: 486, level: 8 }, // 478
      'torta-sprite-star-5': { left: 841, right: 881, level: 9 }, // 861

      'merenda-sprite-product': { left: 360, right: 380, level: 1 }, // 450
      'merenda-sprite-title': { left: 172, right: 204, level: 2 }, // 268
      'merenda-sprite-cloud': { left: 305, right: 355, level: 3 }, // 410
      'merenda-sprite-cloud-big': { left: 621, right: 701, level: 4 }, // 741
      'merenda-sprite-cloud-small': { left: 50, right: 150, level: 5 }, // 185
      'merenda-sprite-balloon': { left: 720, right: 778, level: 6 }, // 829
      'merenda-sprite-stairs': { left: 511, right: 551, level: 7 }, // 611

      'cereali-sprite-product': { left: 382, right: 402, level: 1 }, // 412
      'cereali-sprite-title': { left: 174, right: 194, level: 2 }, // 204
      'cereali-sprite-left-wing': { left: 273, right: 293, level: 3 }, // 203
      'cereali-sprite-right-wing': { left: 705, right: 737, level: 4 }, // 701
      'cereali-sprite-1': { left: 109, right: 149, level: 5 }, // 149
      'cereali-sprite-2': { left: 288, right: 308, level: 6 }, // 318
      'cereali-sprite-3': { left: 390, right: 418, level: 7 }, // 424
      'cereali-sprite-4': { left: 854, right: 874, level: 8 }, // 884
      'cereali-sprite-5': { left: 870, right: 886, level: 9 }, // 898
      'cereali-sprite-6': { left: 770, right: 810, level: 10 }, // 810
      'cereali-sprite-7': { left: 30, right: 78, level: 11 }, // 79

      'biscotto-sprite-product': { left: 456, right: 486, level: 1 }, // 506
      'biscotto-sprite-title': { left: 171, right: 201, level: 2 }, // 226
      'biscotto-sprite-balloon': { left: 817, right: 847, level: 3 }, // 872
      'biscotto-sprite-kite': { left: 24, right: 60, level: 4 }, // 82
      'biscotto-sprite-cloud': { left: 262, right: 322, level: 5 }, // 332
      'biscotto-sprite-basket': { left: 469, right: 515, level: 6 } // 532
    };

  var enableClick = true;

  // temporary disable carousel
  //var carousel = setInterval(function() {
    //var star = $('.star-parallax').filter('.active'),
      //nextStar = star.next();

    //if (! nextStar.length) {
      //nextStar = $('.star-parallax').first();
    //}
    //onStarClick(nextStar);
  //}, 5000);

  function onStarClick(star) {
    var panel = $(star.attr('href'));

    $('.star-parallax').removeClass('active');
    star.addClass('active').blur();

    hideActiveThenDisplay(panel);
  }

  function bindStars() {
    $('.star-parallax').click(function() {
      var star = $(this);

      if (star.hasClass('active') || !enableClick) {
        return false;
      }

      enableClick = false;
      // temporary disable carousel
      //clearInterval(carousel);
      onStarClick(star);
      return false;
    });
  }

  function integerBetween(a, b) {
    return Math.floor(a + Math.random() * (b - a));		
  }

  function hideActiveThenDisplay(nextPanel) {
    var panel = $('.parallax').filter('.active'),
      toAnimate = panel.children().length;

    function onAnimationEnd() {
      toAnimate -= 1;
      if (toAnimate === 0) {
        panel.removeClass('active');
        panel.hide();
        panel.children().each(function() {
          restore($(this));
        });
        displayPanel(nextPanel);
      }
    }

    function restore(element) {
      var customOption = customLayerOptions[element.attr('id')] || { left: element.width() },
        left = customOption.left;
      element.show();
      element.css({
        left: left,
        opacity: 1
      });
    }

    enableClick = false;
    $().parallax('stop');
    $().parallax('clear');
    panel.children().each(function() {
      var left = integerBetween(-700, -400),
        delay = integerBetween(0, 750);

      $(this)
        .delay(delay)
        .animate({
          left: -600 + $(this).width(),
          opacity: 0
        }, {
          complete: onAnimationEnd
        })
    });
  }

  function displayPanel(panel) {
    panel
      .css({
          left: 600 + panel.width(),
          opacity: 0
        })
      .addClass('active')
      .show()
      .animate({
          left: 0,
          opacity: 1
        }, {
          duration: 1000,
          complete: function() {
            activateParallax(panel);
            enableClick = true;
          }
        });
  }

  function activateParallax(panel) {
    panel.children().each(function() {
      var customOptions = customLayerOptions[$(this).attr('id')] || {},
        options = $.extend({}, {
          left: -150,
          right: 1000
        }, customOptions);

      $(this).parallax(options);
    });
    $().parallax('start');
  }
  function runParallax(panel) {
    panel.children().each(function() {
      var customOptions = customLayerOptions[$(this).attr('id')] || {},
        options = $.extend({}, {
          left: -150,
          right: 1000
        }, customOptions);

      $(this).parallax(options);
    });
    $().parallax('run');
  }

  function init() {
    var activeId = $('.intro .slider .active').attr('href'),
      panel = $(activeId);

    panel.addClass('active');
    runParallax(panel);
  };

  bindStars();
  init();
};

var animate_balloon = function() {
  var should_animate_balloon = false;
  var balloon_goes_down = function() {
    $('.papertoy-2-img').animate({
       top: '+=35px'
    }, {
       duration: 400
      ,complete: function() {
        if (should_animate_balloon) {
          balloon_goes_up();
        }
      }
    });
  };
  var balloon_goes_up = function() {
    $('.papertoy-2-img').animate({
      top: '-=35px'
    }, {
       duration: 600
      ,specialEasing: {
        top: 'linear'
      }
      ,complete: balloon_goes_down
    });
  };
  $('.rumble').hover(function() {
      if (should_animate_balloon) {
      } else {
        should_animate_balloon = true;
        balloon_goes_up();
      }
    }, function(){
      should_animate_balloon = false;
  });
};

var slider = function(block) {
  $('.star-'+block).bind('click', function() {
    var href = $(this).attr('href');
    var rel = $(this).attr('rel');
    $('.'+rel).removeClass('active');
    $(href).addClass('active');
    $('.star-'+rel).removeClass('active');
    $(this).addClass('active');
    return false;
  });
};

var get_facebook_feed = function() {
  var format_date = function(date) {
    var d = new Date(date);
    return d.f('dd MMM, yyyy hh:mm:ss');
  };
  var parse_content = function(content) {
    var re = /\<a href.*\>/;
    return content.replace(re, '');
  };
  var inject = function(entry, id) {
    $('#panel-date-'+id).html(format_date(entry.published));
    $('#panel-content-'+id).html(parse_content(entry.content));
  };
  var url = '/facebook.json';
  jQuery.ajax({
     url: url
    ,dataType: "json"
    ,type: 'get'
    ,success: function(json) {
      inject(json.entries[2], 2);
      inject(json.entries[1], 1);
      inject(json.entries[0], 0);
    }
    ,error: function(jqHdr, textStatus, errorThrown){
    }
  });
};

var get_instagram_feed = function() {
  var parse_content = function(content) {
    var re = /\<a href.*\>/;
    return content.replace(re, '');
  };
  var inject = function(entry, id) {
    $('#instagram-img-'+id).html('<img src="' + entry + '"/>');
  };
  var get_random_elements = function(len) {
    var rand = function() {
      return Math.floor(Math.random() * len);
    };
    var values = [rand(), rand(), rand()];

    while (values[1] == values[0]) {
      values[1] = rand();
    }
    while (values[2] == values[0] || values[2] == values[1]) {
      values[2] = rand();
    }
    return values;
  };
  var url = '/instagram.json';
  jQuery.ajax({
     url: url
    ,dataType: "json"
    ,type: 'get'
    ,success: function(json) {
      var values = get_random_elements(json.data.length);

      inject(json.data[values[0]].images.low_resolution.url, 3);
      inject(json.data[values[1]].images.low_resolution.url, 2);
      inject(json.data[values[2]].images.low_resolution.url, 1);
      $('.instagram-loading').remove();
      $('.instagram-panels').show();
    }
    ,error: function(jqHdr, textStatus, errorThrown){
    }
  });
};

$(function(){
  animate_balloon();
	slider('instagram-img');
	slider('facebook-panel');
  get_facebook_feed();
  get_instagram_feed();
});

