var ImageList = Class.create();
ImageList.prototype = {
  initialize: function(category) {
    this.cat = category;
    this.numbox = (imagegallery[this.cat].data.length / 16).ceil();
    this.tick = 0;
    this.port = 1;
    this.max = 15;
    this.counterer = 0;
    this.render_box();
  },
  render_box: function() {
    for(i=1;i<=this.numbox;i++){
      $('blockcontainer').insert('<div class="block" id="block-' + i + '"></div>', 'bottom');
      for(p=0;p<=this.max;p++){
        if(this.tick >= imagegallery[this.cat].data.length){
          break;
        } else {
          $('block-'+i).insert('<a href="/images/lightbox/loading.gif" title="Hi, my name is ' + imagegallery[this.cat].data[this.tick].nickname + '" class="lightwindow"><img id="block'+i+'-item'+(p+1)+'" src="/images/lightbox/loading.gif" alt="' + imagegallery[this.cat].data[this.tick].nickname + '" /></a>', 'bottom');
          this.tick += 1;
        }
      }
    }
    $('blockcontainer').setStyle({width: this.numbox*500 + 'px'});
    this.page_count(this.port);
    this.update_next(this.port);
  },
  move_back: function(){
    if (this.port <= this.numbox && this.port != 1){
      new Effect.MoveBy('blockcontainer', 0, 500 , {
        duration: 0.4,  
        transition: Effect.Transitions.sinoidal,
        queue: 'end'
      });
      this.port -= 1;
      this.page_count(this.port);
    }
  },
  move_forward: function(){
    if (this.port <= this.numbox && this.port != this.numbox) {
      new Effect.MoveBy('blockcontainer', 0, -500 , {
        duration: 0.4,  
        transition: Effect.Transitions.sinoidal, 
        queue: 'end'
      });
      this.port += 1;
      this.page_count(this.port);
      this.update_next(this.port);
    }
  },
  pause: function(millis){
    var date = new Date();
    var curDate = null;
    do{ curDate = new Date();}
    while(curDate-date < millis);
  },
  update_next: function(viewport){
    var block = viewport;
    for(m=1;m<=16;m++){
      if(this.counterer >= imagegallery[this.cat].data.length){
        break;
      } else {
        new Effect.Opacity('block'+block+'-item'+m,{duration:0.0, from: 1, to: 0});
        $('block'+block+'-item'+m).writeAttribute('src', '/images/gallery/' + imagegallery[this.cat].data[this.counterer].thm);
        $('block'+block+'-item'+m).ancestors()[0].writeAttribute('href', '/images/gallery/' + imagegallery[this.cat].data[this.counterer].thm);
        new Effect.Opacity('block'+block+'-item'+m,{duration:0.2, from: 0, to: 1, queue: 'end'});
        this.counterer += 1;
      }
    }
  },
  page_count: function(page){
    var pagecount = page;
    $('page-count').update('Page <span>'+pagecount+'</span> of <span>'+this.numbox+'</span>');
  }
};
var NameList = Class.create();
NameList.prototype = {
  initialize: function(category) {
    this.cat = category;
    this.numbox = (namegallery[this.cat].data.length / 32).ceil();
    this.tick = 0;
    this.port = 1;
    this.max = 31;
    this.counterer = 0;
    this.initialized = [];
    this.boxsize = 590;
    this.render_box();
  },
  render_box: function() {
    for(i=1;i<=this.numbox;i++){
      $('blockcontainer').insert('<div class="block" id="block-div-' + i + '"></div>', 'bottom');
      $('block-div-'+i).insert('<ul id="block-ul-'+i+'"></ul>', 'bottom');
      $('block-div-'+i).insert('<div class="clearer"></div>', 'bottom')
      this.initialized[i] = false;
    }
    $('blockcontainer').setStyle({width: this.numbox*this.boxsize + 'px'});
    this.page_count(this.port);
    this.update_next(this.port);
    if (loaded != true){
      for(c=0;c<=namegallery.length-1;c++){
        $('letter-list').insert('<li><a onClick="galleryname.switch_cat('+c+')">'+namegallery[c].category+'</a></li>', 'bottom');
        loaded = true;
      }
    }
  },
  switch_cat: function(letter){
    var newcat = letter;
    new Effect.MoveBy('blockcontainer', 0, this.boxsize*(this.port-1) , {
      duration: 0.4,  
      transition: Effect.Transitions.sinoidal,
      queue: 'end',
      afterFinish: function(){
        new Effect.BlindUp('blockcontainer', {
          duration: 0.5, 
          queue:'end', 
          afterFinish: function(){
            $('blockcontainer').update('');
            galleryname = new NameList(newcat); 
            new Effect.BlindDown('blockcontainer', {duration: 0.5, queue: 'end'});
        }});
    }});
  },
  move_back: function(){
    if (this.port <= this.numbox && this.port != 1){
      new Effect.MoveBy('blockcontainer', 0, this.boxsize , {
        duration: 0.4,  
        transition: Effect.Transitions.sinoidal,
        queue: 'end'
      });
      this.port -= 1;
      this.page_count(this.port);
    }
  },
  move_forward: function(){
    if (this.port <= this.numbox && this.port != this.numbox) {
      new Effect.MoveBy('blockcontainer', 0, -this.boxsize , {
        duration: 0.4,  
        transition: Effect.Transitions.sinoidal, 
        queue: 'end'
      });
      this.port += 1;
      this.update_next(this.port);
      this.page_count(this.port);
    }
  },
  update_next: function(viewport){
    var updatethis = viewport;
    this.tick = ((updatethis - 1) * this.max);
    if(!this.initialized[updatethis]){
      for(p=0;p<=this.max;p++){
        if(this.tick >= namegallery[this.cat].data.length){
          break;
        } else {
          $('block-ul-'+updatethis).insert('<li id="block'+updatethis+'-item'+(p+1)+'"><span>' + namegallery[this.cat].data[this.tick].name + '</span><cite>From: ' + namegallery[this.cat].data[this.tick].nn + '</cite></li>', 'bottom');
          this.tick += 1;
        }
      }
      this.initialized[updatethis] = true; 
    }
  },
  page_count: function(page){
    var pagecount = page;
    $('page-count').update('Page <span>'+pagecount+'</span> of <span>'+this.numbox+'</span>');
  }
};
