var regFindNum = /cadeau\/(\d*)$/;
var curPorteNum = -1;

var leBed = null;
var leMono = null;

soundManager.url = '/images/2011/swf/';
soundManager.flashVersion = 9;
soundManager.useFlashBlock = false;
soundManager.audioFormats.mp3.required = false;

var VOL_MAX = 60;

soundManager.onready(function() {
  var leFichierBed = "/images/2011/beds/Avent2011_Bed_1";
  if($("#its-a-decorum").length){
    leBed = soundManager.createSound({
      id: "leBed",
      url: leFichierBed + ".mp3",
      autoLoad: true,
      volume: 0,
      loops: 60,
      onload: function() {
        this.play();
        if($("#its-a-decorum").is(":hover")) {
          fadeInSound('leBed', 8);
        }
      }
    });
  }
});

var fadeTimeout = null;

function fadeInSound(soundID, amount) {
  clearTimeout(fadeTimeout);
  if(amount <= 0) return;  
  var s = soundManager.getSoundById(soundID);
  var vol = s.volume;
  if (vol == VOL_MAX) return false;
  s.setVolume(Math.min(VOL_MAX,vol+amount));
  fadeTimeout = setTimeout(function(){fadeInSound(soundID,amount)}, 50);
}


function fadeOutSound(soundID, amount) {
  clearTimeout(fadeTimeout);
  if(amount >= 0) return;
  var s = soundManager.getSoundById(soundID);
  var vol = s.volume;
  if (vol - amount <= 0) { s.setVolume(0); return false; };
  s.setVolume(Math.max(0,vol+amount));
  fadeTimeout = setTimeout(function(){fadeOutSound(soundID,amount)}, 50);
}

function loadPorte(href){
  console.log("Chargement de " + window.location.hash);
  var porteNum = regFindNum.exec(href)[1];
  if(!porteNum || curPorteNum == porteNum) return;
  $.get("cadeau/" + porteNum, function(data){
      $("#not-a-singleton").addClass("modalised");
      $("#not-a-singleton").append(data);
      $("#its-a-decorum").addClass("disabled");
      
      var currentporte = $(".fragment a[data-num-element=" + porteNum + "] .bmouseover");
      var posLeft = 0;
      var posRight = 0;
      var width = $("#grandeporte").width() + 232;
      var height = Math.max($("#grandeporte").height(), $("#grandeporte .plus-sur-auteur").height() + 10);
      
      posTop = currentporte.position().top + currentporte.height() / 2 - height / 2 + 10; // Centrer verticalement
      
      posLeft = currentporte.position().left - width - 10; // À gauche de l'objet
      
      if(posLeft < 0){
        posLeft = currentporte.position().left + ((currentporte.width()) ? currentporte.width() : 30) + 10; // À droite de l'objet
      }
      if(posLeft + width > $("#not-a-singleton").width() - 15){
        posLeft = $("#not-a-singleton").width() / 2 - width / 2; // Centrer horizontalement sur la page
        posTop = posTop + currentporte.height() / 2 + height / 2 + 10; // Sous l'objet
      }
      
      if(posTop < 10) {
        posTop = 10;
      }
      
      if(posTop + height > $("#not-a-singleton").height() - 15) {
        posTop = currentporte.position().top - 10 - height; // Au dessus de l'objet
      }
      
      currentporte.parents(".fragment").addClass("current-porte").find(".the-fade-in").css("opacity", "1");
      
            
      $("#grandeporte")
        .css({"left": posLeft,
              "top": posTop
             });
             
      if(leBed){
        fadeOutSound('leBed', -8);
      }
      
      $("#grandeporte").hide();
      
      $("#grandeporte").animate({"opacity": "show"});
      
      curPorteNum = porteNum;
  });
}

function unloadPorte(){
  if(curPorteNum == -1) return;
  curPorteNum = -1;
  $("#its-a-decorum").removeClass("disabled");
  $("#grandeporte").remove();
  $("#not-a-singleton").removeClass("modalised");
  $(".the-fade-in").animate({"opacity": "0"});
  $(".current-porte").removeClass("current-porte");
  window.location.hash = "";
  //$("#jplayer-bed").jPlayer("play");
  leBed.resume();
  fadeInSound('leBed', 8);
}


$(document).ready(function(){
  var calendarOffset = $("#not-a-singleton").offset();
  var topCalendar =  ((calendarOffset) ? calendarOffset.top : 0) + 120;
  var leftCalendar = ((calendarOffset) ? calendarOffset.left : 0) + 15;
  var DISTANCE_MAX = 150;
  
  if(!($("#vitraux").size())){
      $("#global-infos, #partages").css("top", "-10px").hide();
      window.setTimeout(function(){ 
        $("#___plusone_0").css("width", "35px");
        $("#global-infos, #partages").animate({opacity: "show", top: -29}, 1000); 
      }, 1000);
  }
  
  $("#not-a-singleton").mousemove(function(e){
    if(!($(this).is(".modalised"))){
      $(".fragment .the-fade-in").each(function(el){ 
        var distance = Math.sqrt(Math.pow(topCalendar + $(this).position().top + ($(this).height() / 2) - e.pageY, 2) + 
                                 Math.pow(leftCalendar + $(this).position().left + ($(this).width()) - e.pageX, 2));
        if(distance < DISTANCE_MAX) {
          $(this).stop().css("opacity", (DISTANCE_MAX - distance) / DISTANCE_MAX * 1.25);
        } else {
          $(this).css("opacity", "0");
        }
      }); 
    }else{
      $(".fragment .the-fade-in").css("opacity", "");
    }
  }).mouseout(function(e){
    if(!($(this).is(".modalised"))){
      window.setTimeout(function(){
          if(!$("#not-a-singleton").is(":hover")){
            $(".fragment .the-fade-in").css({"opacity": "0"});
          }
      }, 200);
    }
  }).hover(function(e){
    if(!$("#not-a-singleton").is(".modalised")){
      leBed.resume();
      fadeInSound('leBed', 8);
    }
  }, function(e){
    fadeOutSound('leBed', -8);
  });
  
  $(".fragment a").click(function(event){
    event.preventDefault();
    var porteNum = regFindNum.exec($(this).attr("href"))[1];
    window.location.hash = "cadeau/" + porteNum;
    if(!$("#not-a-singleton").is(".modalised")){
      loadPorte($(this).attr("href"));
    }
  });
  
  $("#its-a-decorum").click(function(){
    unloadPorte();
  });
  
  $("#header h1 a").click(function(event){
    if(curPorteNum != -1){
      unloadPorte();
      event.preventDefault();
    }
  });
  
  var matches = regFindNum.exec(window.location.hash);
  if(matches && matches[1]){
    console.log("Prise en compte du hash " + window.location.hash);
    window.setTimeout(function(){ loadPorte(window.location.hash); }, 500);
  }
  
  $("#wraptext .previous-calendar")
    .css({height: 130, paddingTop: 440})
    .find("div").css({backgroundPosition: "50% -510px"}).end()
  .hover(function(){
    $(this).animate({height: 330, paddingTop: 240}, 200);
    $(this).find("div").animate({backgroundPosition: "50% -310px"}, 200);
  }, function(){
    $(this).animate({height: 130, paddingTop: 440}, 200);
    $(this).find("div").animate({backgroundPosition: "50% -510px"}, 200);
  });
  
  if($("#vitraux").size()){
    $("#not-a-singleton").hide();
    $("#please-wait").show();
    $("#please-wait").hide().text("Chargement en cours...").fadeIn();
    $("#not-a-singleton").waitForImages(
        function() {
            $("#please-wait").text("Chargement terminé.").fadeOut();
            $("#global-infos p").text("Le calendrier continue, avec des bonus chaque jour jusqu'en janvier !");
            
            $("#not-a-singleton").show();
            
            $("#global-infos, #partages").css("top", "-10px").css("opacity", "0");
            window.setTimeout(function(){ 
              $("#___plusone_0").css("width", "35px");
              $("#global-infos, #partages").css("display", "block").animate({opacity: 1, top: -29}, 1000, function(){
                $("#global-infos, #partages").animate({opacity: 0.6}, 1000);
               }); 
            }, 1000);
            
            $(".vitrail:not(.vitrail-unterminated)").each(function(){
                var el = this;
                window.setTimeout(function(){ 
                    $(el).animate({opacity: 0}, 1000, function(){ $(el).hide() }); 
                }, 1000 + 200 * $(el).attr("data-numero"));
            });
            
            var scintillement = function(){
                $("#global-infos").css("display", "block").animate({opacity: 1}, 500, function(){
                    window.setTimeout(function(){ $("#global-infos").animate({opacity: 0.6}, 1000); }, 5000 );
                }); 
            
                $(".fragment a").each(function(){
                    var el = this;
                    if(!($("#its-a-decorum").is("disabled"))){
                        window.setTimeout(function(){ 
                            $(el).find(".bmouseover").animate({opacity: 0.75}, 250, function(){ 
                                $(el).find(".bmouseover").animate({opacity: 0}, 500, function(){
                                    $(el).find(".bmouseover").css("opacity", "");
                                }); 
                            }); 
                        }, 200 * $(el).attr("data-num-element"));
                    };
                });
            };
            
            window.setTimeout(function(){ scintillement(); }, 6000);
            window.setInterval(function(){ scintillement(); }, 20000);
        },
        function(loaded, count, success) {
            $("#please-wait").text("Chargement en cours... (" + Math.round(loaded / count * 100) + "%)");
        },
        true
    );
  }
});

$("#not-a-singleton").hide();

