$(document).ready( function() {

  drawLayout(1);

  var resizeTimer = null;

  $(window).bind('resize', function() {
    if (resizeTimer) clearTimeout(resizeTimer);
      resizeTimer = setTimeout("drawLayout(1)", 100);
  });

  $(".dia").find('.open_dia').hide();

  $(".dia_expanding, .dia_expanding .closed_dia a").click(function(){

    if ($(this).attr('rel'))
      var el = $(this).parent().parent().parent();
    else
      var el = $(this);

    if ($(el).hasClass('closed')) {
      switchDia($(".dia.open"), $(el));
    }

    if ($(this).attr('rel'))
      return false;
  });
  
  
  $(".dia_expanding, .dia_expanding .closed_dia a").click(function(){
    if ($(this).attr('rel'))
      var el = $(this).parent().parent().parent();
    else
      var el = $(this);

    if ($(el).hasClass('closed')) {
      switchDia($(".dia.open"), $(el));
    }

    if ($(this).attr('rel'))
      return false;
  });

  $(".dia_expanding .open_dia").click(function(event){
    event.stopPropagation();
  });


  // close dia
  $(".dia_act_close").click(function() {

    var dia = $(this).parent().parent().parent().parent();

    $(dia).find('.open_dia').hide();
    $(dia).find('.closed_dia').show();

    $(dia).addClass('closed');
    $(dia).removeClass('open');

    drawLayout(1);

    return false;
  });

  // next dia
  $(".dia_act_next").click(function() {
    var dia = $(this).parent().parent().parent().parent();
    var next_dia = $(dia).next();
    if ($(next_dia).hasClass('dia_expanding')) {
      switchDia(dia, next_dia);
    }
    return false;
  });

  // previous dia
  $(".dia_act_prev").click(function() {
    var dia = $(this).parent().parent().parent().parent();
    var prev_dia = $(dia).prev();
    if ($(prev_dia).hasClass('dia_expanding')) {
      switchDia(dia, prev_dia);
    }
    return false;
  });
  
  // toggle comments
  $(".toggle_comments_amount").click(function() {  
    $(this).next().click();
    return false;
  });
  $(".toggle_comments").click(function() {
    if ($(this).hasClass("comments_show")) {
      $(this).removeClass("comments_show");
      $(this).parent().next().css("display", "block");
      drawLayout(0);
      $(this).parent().next().fadeTo(300, 1);
    }
    else {
      $(this).addClass("comments_show");
      $(this).parent().next().fadeTo(100, 0);
      //drawLayout(0);
      $(this).parent().next().hide();
      drawLayout(0);
    }
    
    return false;
    
  });  
  
  // ga
	if(typeof(pageTracker) != 'undefined') {
		$('div.button a').click(function() {
      pageTracker._trackPageview('/xmas09/buttons/external/'+$(this).attr('href'));
    });
		$('div.open_content a').click(function() {
      if ($(this).attr('href') != "#")
        pageTracker._trackPageview('/xmas09/post/external/'+$(this).attr('href'));
    });    
  } 

  // flickr images by tag
  flickr_config = {
    api_key: '17bae9b43a4d9fdc98683b6dd502ac16',
    link_to_size: 'm',
    user_id: '36745937@N06'
  }  

  // open default dia

  if (active_calendar_day)
    $("#dia-"+active_calendar_day).click();

  /*var currentTime = new Date();
  var currentYear = currentTime.getFullYear();
  var currentMonth = currentTime.getMonth() + 1;
  var currentDay = currentTime.getDate();*/

  /*var loc_hash = getLocationHash();
  loc_hash = loc_hash.replace("#", "");
  if (isNumeric(loc_hash)) {
    $("#dia-"+loc_hash).click();
  }
  else if (currentYear == 2009 && currentMonth == 12 && currentDay < 25) {
    if (currentDay < 25)
      $("#dia-"+ currentDay).click();
    else
      $("#dia-24").click();
  }
  else {
    $("#dia-1").click();
  }*/
});


/******************************************/

function switchDia(prev, next) {
  $(prev).find('.open_dia').hide();
  $(prev).find('.closed_dia').show();

  $(prev).addClass('closed');
  $(prev).removeClass('open');

  // open new
  $(next).addClass('open');
  $(next).removeClass('closed');
  $(next).find('.closed_dia').hide();

  drawLayout(1);

  $(next).find('.open_dia').show();
  /*$(next).show().css("opacity",1);
  $(next).animate( { opacity: 1 }, 100);*/  
  
  if (!$.browser.msie) {
    $(next).show().css("opacity",0);
    $(next).animate( { opacity: 1 }, 300);  
  }
  
  /*var dia_id = $(next).attr('id');
  dia_id = dia_id.replace("dia-", "");
  if (isNumeric(dia_id))
    setLocationHash(dia_id);
  */

  if (!$(next).find(".flickr_photos").hasClass("flickr_loaded")) {
    var post_tags = $(next).find(".post_tags span").text();
    if (post_tags) {
      $(next).find(".flickr_photos").addClass("flickr_loaded");
      $(next).find(".flickr_photos").flickr(flickr_config).photosSearch({user_id: flickr_config['user_id'], count: 8, tags: post_tags});
    }
  }
}

function getLocationHash(){
  return window.location.hash;
}

function setLocationHash(_hash) {
  window.location.hash = "#"+_hash;
}

function isNumeric(sText) {
  if (!sText)
    return false;
    
  var ValidChars = "0123456789.";
  var IsNumber=true;
  var Char;
 
  for (i = 0; i < sText.length && IsNumber == true; i++)  { 
    Char = sText.charAt(i); 
    if (ValidChars.indexOf(Char) == -1) {
      IsNumber = false;
    }
  }
  
  return IsNumber;
}

function drawLayout(scrollBody) {

  var diaWidth  = 220;
  var diaHeight = 220;

  var w = $(".content").width();

  var columns = Math.floor(w / diaWidth);
  var columnsTop = new Array(columns);

  var contentLeft = (w - (columns*diaWidth))*0.5;
  contentLeft += 20; // body margin
  var contentTop = 280; // top margin


  var drop = false;
  for (var ca = 0; ca < columns; ca++){
    if(columns == ca+1) {drop=true} else {drop=false};
    columnsTop[ca] = {top:0,col:ca,drop:drop};
  }


  // V2 check if opened dia is the last column add dia if so.
  /*var opened = $(".dia").index( $(".dia.open") );
  if ((opened != -1) && (opened % columns) == (columns-1)){
   columnsTop[0].top = diaHeight;
  }*/


  var col = 0;
  var top = 0;

  // build the Grid
  $(".dia").each(function(i){
    var slot = findNextSlot();
    if ($(this).hasClass("open")) {
    
	    // V1 check if opened dia is the last column create empty slot before it
			if (slot.drop){
				slot.top += diaHeight;	
			    var slot = findNextSlot();
			} 
	

      col = slot.col;
      top = slot.top;

      var openHeight = $(this).find('.open_dia').height();
      var ceiled = Math.ceil(openHeight / diaHeight) * diaHeight;
      $(this).css("height",(ceiled-10) + "px");

      if (scrollBody == 1)
        $('html, body').animate({ "scrollTop": slot.top + 50 }, { "duration": 200, "easing": "swing" });

      slot.top += ceiled;
      findNextSlot().top += ceiled;

  }
  else {
    col = slot.col;
    top = slot.top;

    slot.top += diaHeight;
  };


  $(this).animate({
      top: top + contentTop,
      left: (col * diaWidth) + contentLeft
       }, { "duration": 200, "easing": "swing" } );
  });

  $(".footer").animate({ top: findLastSlot().top + contentTop }, { "duration": 200, "easing": "swing" } );

  // Grid tools
  function findNextSlot () {
    // find next free location
    columnsTop.sort(function(a,b){
      return (100*(a.top - b.top)) + (a.col - b.col);
    })
    return columnsTop[0];
  }


  function findLastSlot () {
    // find last free location
    columnsTop.sort(function(a,b){
      return (b.top - a.top);
    })
    return columnsTop[0];
  }
};









