function getElementsByClass( searchClass, domNode, tagName) {
  if (domNode == null) domNode = document;
   if (tagName == null) tagName = '*';
  var el = new Array();
  var tags = domNode.getElementsByTagName(tagName);
  var tcl = " "+searchClass+" ";
  for(i=0,j=0; i<tags.length; i++) {
    var test = " " + tags[i].className + " ";
    if (test.indexOf(tcl) != -1)
      el[j++] = tags[i];
  }
  return el;
}

var PAGE_NEXT = 0;
var PAGE_PREVIOUS = 1;
var pagination_init_list = new Array();
var pagination_intervals = new Array();
var ongoing_effects = new Array();

function pagination_init_all() {
  for (var i = 0; i < pagination_init_list.length; i++) {
    var galleryId = pagination_init_list[i];
    ongoing_effects[galleryId] = new Array();
    pagination_show_page(galleryId, 0);
    pagination_init.delay(i*5, galleryId, i);
  }
}

function pagination_init(galleryId) {
  var pages = getElementsByClass('galeria2_content_' + galleryId);

  //for (var i = 0; i < pages.length; i++) {
    //pagination_hide_page(pages[i]);
  //}
  intervalId = setInterval('pagination_next(' + galleryId + ', true)', 10*1000);
  pagination_intervals[galleryId] = intervalId;
}

function pagination_next(galleryId, isAuto) {
  pagination_change(galleryId, PAGE_NEXT, isAuto);
}

function pagination_previous(galleryId, isAuto) {
  pagination_change(galleryId, PAGE_PREVIOUS, isAuto);
}

function pagination_change(galleryId, direction, isAuto) {
  if (isAuto !== true)
    clearInterval(pagination_intervals[galleryId]);

  var pages = getElementsByClass('galeria2_content_' + galleryId);

  var currentPage = parseInt(getElementsByClass('galeria2_data_' + galleryId)[0].innerHTML);

  var newPage = -1;
  if (currentPage == -1)
    newPage = 0;
  else if (direction == PAGE_NEXT)
    newPage = currentPage + 1;
  else if (direction == PAGE_PREVIOUS)
    newPage = currentPage - 1;

  if (newPage < 0)
    newPage = pages.length - 1;
  else if (newPage > pages.length - 1)
    newPage = 0;

//  dbg(currentPage + '->' + newPage + '(' + pages.length + ')');

  //dbg('=====');
  if (currentPage != newPage) {
    //dbg('will cancel effects');
    while (ongoing_effects[galleryId].length > 0) {
      var effect = ongoing_effects[galleryId].pop()
      //dbg(effect);
      effect.cancel();
    }
    //dbg('canceled effects');

    //dbg('will hide all');
    for (var i = 0; i < pages.length; i++) {
      if (i != newPage && i != currentPage) {
        pagination_hide_page(galleryId, i);
      }
    }
    if (isVisible(galleryId, currentPage)) {
      pagination_hide_page(galleryId, currentPage, function() {
        //dbg('will show page');
        pagination_show_page(galleryId, newPage);
        //dbg('page visible');
      });
    }
    else {
      pagination_show_page(galleryId, newPage);
    }
    //dbg('effects are hidden');
  }
}

function isVisible(galleryId, index) {
  var pages = getElementsByClass('galeria2_content_' + galleryId);
  return pages[index].style.display != 'none';
}

function pagination_show_page(galleryId, index) {
  var pages = getElementsByClass('galeria2_content_' + galleryId);
  var element = pages[index];
  var currentPageElement = getElementsByClass('galeria2_data_' + galleryId)[0];
  currentPageElement.innerHTML = index;
  
  var effect = new Effect.Appear(element, { duration: 0.5, to: 1});
  ongoing_effects[galleryId].push(effect);
}

function pagination_hide_page(galleryId, index, afterFinishFunction) {
  var pages = getElementsByClass('galeria2_content_' + galleryId);
  var element = pages[index];
  
  if (element.style.display != 'none') {
    var effect = new Effect.Appear(element, { duration: 0.5, to: 0, afterFinish: function() {
      //dbg('executing af');
      //dbg('aff: ' + afterFinishFunction);
      if (afterFinishFunction) {
        //dbg('executing aff');
        afterFinishFunction();
      }
      element.style.display = 'none';
    } });
    ongoing_effects[galleryId].push(effect);
  }
}

