var sliderLenght = 0;
var sliderData = new Array();
var sliderTimer = null;

jQuery(document).ready(function()
{
  // edugadget info center
  jQuery("div.edugadget-item").click
  (
    function()
    {
      var $holder = jQuery("div#edugadget-holder");          
      var $next = jQuery(this).next();
      
      if ($next.css("display") != "none")
      {
        $next.slideToggle(200);
        return false;
      }
          
      $holder.children("div.edugadget-block").slideUp(200);
      $next.slideToggle(200);

      return false;
    }
  );
  
  if (typeof InitSliders != "undefined")
      InitSliders();     
});

function BcSlider($slideBlock, $hoverBlock, $upBlock, $downBlock, items, dataSource)
{
  this._currentElement = 0;
  this._elementsOnPage = items;
  this._buffer = new Array();
  this._scriptFile = dataSource;
  this._hover = false;
  this._ajax = false;
  this._animating = false;
  this._id = sliderLenght;
  this.$ndiv = null;
  this.$block = $slideBlock;
  
  sliderData.push(this);
  // Class reference 
  $upBlock.attr("rel", sliderLenght);  
  $downBlock.attr("rel", sliderLenght);  
  $slideBlock.attr("rel", sliderLenght);  
  $hoverBlock.attr("rel", sliderLenght);  
  
  // Slide page up
  $upBlock.click
  (
    function()
    {
      var slid = sliderData[$(this).attr("rel")];
      slid._currentElement -= slid._elementsOnPage;
      if (slid._currentElement < 0)
      {
        slid.WriteEvents(-slid._currentElement);
        slid._currentElement = 0;
      }      
      slid.AnimateToElement(slid._currentElement); 
      return false;
    }
  );
  
  // Hover 
  $hoverBlock.hover
  (
    function()
    {
      var slid = sliderData[$(this).attr("rel")];
      slid._hover = true;
    },
    function()
    {
      var slid = sliderData[$(this).attr("rel")];
      slid._hover = false;
    }
  );
  
  // Slide page down
  $downBlock.click
  (
    function()
    {
      var slid = sliderData[$(this).attr("rel")];
      slid._currentElement += slid._elementsOnPage;
      
      var allElements = slid.$block.children().length - 1;      
      var lastPageElement = allElements - (allElements % slid._elementsOnPage);
      
      if (lastPageElement < 0) 
          lastPageElement = 0;     
      
      if (slid._currentElement > lastPageElement)
          slid._currentElement = lastPageElement;
    
      slid.AnimateToElement(slid._currentElement); 
      return false;
    }  
  );  
  
  this.BufferEvents();      
  sliderLenght++;
}

BcSlider.prototype.BufferEvents = function() 
{
  while (this.$block.children().length > this._elementsOnPage)
  {
    this._buffer.push(this.$block.children().eq(0).html())
    this.$block.children().eq(0).remove();
  }
}

function AddSliderEvent() 
{
  for (z = 0; z < sliderLenght; z++)
  {
    var slid = sliderData[z];
    if (!slid._hover && !slid._animating)
    {    
      if (slid._currentElement != 0)
          slid.AnimateToElement(0);
      
      slid.WriteEvents(1);
    }
    else
    {
    }
  }
  
  sliderTimer = setTimeout("AddSliderEvent();", 2000);
}

function SlideTop(id)
{
  var slid = sliderData[id];
  slid._animating = true;
  
  var top = parseInt(slid.$ndiv.css("marginTop"));
  if (top > -1)
  {
    slid._animating = false;
    return;
  }
  
  top += 1;
  slid.$ndiv.css( { "marginTop" : top } );
  setTimeout("SlideTop(" + id + ")", 35);  
}

BcSlider.prototype.WriteEvents = function(eventCount) 
{
  var $startdiv = this.$block.children().eq(0);
  
  for (var z = 0; z < eventCount; z++)
  {
    $topdiv = this.$block.children().eq(0);    
    $newdiv = $topdiv.clone(true);
    
    // Check for style
    if ($topdiv.attr("class") == "block-row-grey") 
      $newdiv.removeClass("block-row-grey");
    else 
      $newdiv.addClass("block-row-grey");
    
    $newdiv.css( { marginTop: "-" + $startdiv.height() + "px" } );
    
    // Get with AJAX
    
    // pre zapnutie online nacitavania dat do scrollerov odpoznamkovat toto
    /*
    if (this._buffer.length < 2)
        this.GetNewData();
    */
    
    // Rotate mode
    if (this._buffer.length == 0)
    {
      $newdiv.html(this.$block.children().eq(this.$block.children().length-1).html());
      this.$block.children().eq(this.$block.children().length-1).remove();
    }
    
    // Set contents
    $newdiv.html(this._buffer.pop());
    $newdiv.insertBefore($topdiv);    
    
    this.$ndiv = $newdiv;
    
    if (eventCount == 1)
        setTimeout("SlideTop(" + this._id + ")", 0);
    else
        $newdiv.animate( { "marginTop": "0"  }, $newdiv.height() * 30, "linear"); 
  }
  
  // Limit display length
  if (this.$block.children().length > 100)
      this.$block.children().eq(100).remove();
}

BcSlider.prototype.AnimateToElement = function(event) 
{
  this._currentElement = event;      
      
  var targetOffset = this.$block.children().eq(event).offset().top;    
  var tableOffset =  this.$block.offset().top;
  
  targetHeight = - (targetOffset - tableOffset);      
  this.$block.animate( { marginTop: targetHeight + "px" }, 1000 , "swing");    
}


function AjaxCallback(txt, id) 
{
  var slid = sliderData[id];
  
  var temp = new Array();
  temp = txt.split('\n');
  temp.reverse();
  
  while (slid._buffer.length > 0)
     slid._buffer.pop();
  
  var z = 0;
  for (z = 0; z < temp.length; z++)
  {
    if (temp[z].replace(/^\s+|\s+$/g,"").length == 0)
        continue;
    slid._buffer.push(temp[z]);
  }
  
  slid._ajax = false;
}

BcSlider.prototype.GetNewData = function() 
{
  if (this._ajax == true)
      return;
      
  this._ajax = true;
  eval("$.get(this._scriptFile, function(data) { AjaxCallback(data, " + this._id + "); } );");    
}

