var circle_count = 0;
var index_prev = 0;
var anim_speed = 900;
var blured = false;

function fadeRandomCircle(){
  if(blured)
    return;
  
  var index = randomNumber(0, circle_count-1);
  while(index == index_prev || index == index_prev + 1){
    index = randomNumber(0, circle_count-1);
  }
  if(!Circles[index].selector.find(".circul").hasClass("circul_type_3"))
  {
    Circles[index].selector.find(".image").fadeIn(900);
    setTimeout("dummy()", 1400);
    Circles[index].selector.find(".image").fadeOut(900);
  }
  setTimeout("fadeRandomCircle()", 2000);
  index_prev = index;
}

function randomNumber (m,n)
{
  m = parseInt(m);
  n = parseInt(n);
  return Math.floor( Math.random() * (n - m + 1) ) + m;
}

function dummy(){}

function Circle(){
  this.selector = null;
  this.width = null;
  this.height = null;
  this.x = null;
  this.y = null;
  this.original_x = null;
  this.original_y = null;
  this.original_rel_x = null;
  this.original_rel_y = null;
  this.absolute_x = null;
  this.absolute_y = null;
  this.on_original_pos = true;
}

Circle.prototype.checkPositionAndMove = function(x, y) {
  if((x >= this.original_x && x <= (this.original_x + this.width)) && (y >= this.original_y && y <= (this.original_y + this.height)))
  {   
    this.selector.css("z-index", 19);
    
    var newx = (x - this.width/2) - this.absolute_x;
    var newy = (y - this.height/2) - this.absolute_y;
    
    this.selector.stop().animate({top: newy, left: newx}, {queue: false, duration: anim_speed});
    this.on_original_pos = false;
  }
  
  if(x > this.original_x + this.width || y > this.original_y + this.height)
    this.moveToOriginalPos();
  if(x < this.original_x || y < this.original_y)
    this.moveToOriginalPos();
}

Circle.prototype.moveToOriginalPos = function() {
  if(!this.on_original_pos) {
    this.selector.stop().animate({top: this.original_rel_y, left: this.original_rel_x}, {duration: anim_speed, easing: "easeOutQuad"});
    this.on_original_pos = true;
    this.selector.css("z-index", "auto");
  }
}

var Circles = [];

$(document).ready(function(){  
  var max_pos = 0; 
  
  $(".circul_wrapper").children(".circul").each(function(i, item){
    $(item).parent().width($(item).width());
    $(item).parent().height($(item).height());
  });
  
  $(".circul_wrapper").each(function(i, item){
    Circles[i] = new Circle();
    
    $(item).css("top", parseInt($(item).css("top"))+50);
    
    Circles[i].selector = $(item);
    Circles[i].original_x = parseInt($(item).offset().left);
    Circles[i].original_y = parseInt($(item).offset().top);
    
    Circles[i].original_rel_x = parseInt($(item).css("left"));
    Circles[i].original_rel_y = parseInt($(item).css("top"));
    
    Circles[i].absolute_x = Circles[i].original_x - Circles[i].original_rel_x;
    Circles[i].absolute_y = Circles[i].original_y - Circles[i].original_rel_y;
    
    Circles[i].width = $(item).width();
    Circles[i].height = $(item).height();    
    
    var cur_top = parseInt($(item).css("top"));
    if(cur_top > max_pos)
      max_pos = cur_top;
    
    circle_count++;
  });
  
  $(".circles").height(max_pos+150); 
  
  $("body").mousemove(function(e){
    for(i = 0; i < Circles.length; i++){
      Circles[i].checkPositionAndMove(e.pageX, e.pageY);
    }
  });
  
  $(window).blur(function() {
    blured = true;
  });
  $(window).focus(function() {
    blured = false;
    fadeRandomCircle();
  });
  
  setTimeout("fadeRandomCircle()", 1000);
});
