var CommikSlideShow = {
	timeouts_intro : new Hash,
  timeouts_move : new Hash,
  transition : 'slide',
  click_disabled : false,
  
  generate: function(){
    var pictures;
    var intro;
    var menu_position;
    var menu_sel = 1;
    var timeout_move;
    
    $$('div.slideshow').each(function(slideshow){
      CommikSlideShow.timeouts_intro.set(slideshow.id, null);
      
      menu_position = 1;
      
      slideshow.select('ul.slide-menu li').each(function(item){
        item.addClassName('menu-' + menu_position);
        Event.observe(item, 'click', function(){
          CommikSlideShow.select_picture(slideshow, item);
        });
        if(item.hasClassName('selected')){
          menu_sel = menu_position;  
        }
        
        menu_position += 1;
      });
      
      intro = slideshow.select('div.wrapper-text').first();
      if(intro){
        Event.observe(intro, 'mouseover', function(){CommikSlideShow.cancel_hide_intro(slideshow);});
        Event.observe(intro, 'mouseout', CommikSlideShow.out.bindAsEventListener(CommikSlideShow));
              
        pictures = slideshow.select('div.pictures').first();
        Event.observe(pictures, 'mouseover', CommikSlideShow.over.bindAsEventListener(CommikSlideShow));
        Event.observe(pictures, 'mousemove', function(){CommikSlideShow.cancel_hide_intro(slideshow);});
        Event.observe(pictures, 'mouseout', CommikSlideShow.out.bindAsEventListener(CommikSlideShow));	
        
        CommikSlideShow.select_text_intro(slideshow, menu_sel);
      }     

      CommikSlideShow.set_timeout_move(slideshow.id);
		});
	}, 
	
	over: function(e){
    var slideshow = Event.element(e).up('div.slideshow');
    CommikSlideShow.show_intro(slideshow);
  },
  
	out: function(e){
    var slideshow = Event.element(e).up('div.slideshow');
    var timeout = setTimeout('CommikSlideShow.hide_intro("' + slideshow.id + '")', 300);
    
    CommikSlideShow.timeouts_intro.set(slideshow.id, timeout);
  },
  
  cancel_hide_intro: function(slideshow){
    clearTimeout(CommikSlideShow.timeouts_intro.get(slideshow.id));
  },
  
  hide_intro: function(slideshow){
    var intro = $(slideshow).select('div.wrapper-text').first();

    CommikSlideShow.set_timeout_move($(slideshow).id);
    
    new Effect.BlindUp(intro, {duration: 0.4, queue: {position: 'end', scope: 'slideshow-intro-' + slideshow, limit: 1}});          
  },
  
  show_intro: function(slideshow){
    var intro = slideshow.select('div.wrapper-text').first();
    
    clearTimeout(CommikSlideShow.timeouts_move.get(slideshow.id));
    
    CommikSlideShow.cancel_hide_intro(slideshow.id);
    
    if(!intro.visible()){
      new Effect.BlindDown(intro, {duration: 0.4, queue: {position: 'end', scope: 'slideshow-intro-' + slideshow.id, limit: 1}});            
    }
  },
  
  move_next: function(slideshow){
    slideshow = $(slideshow);
    var current_menu_sel = slideshow.select('ul.slide-menu li.selected').first();
    var current_position = CommikSlideShow.get_position_menu(current_menu_sel.className);
    var new_position = Number(current_position) + 1;
    var new_menu;

    if(slideshow.select('ul.slide-menu li.menu-' + new_position).first()){
      new_menu = slideshow.select('ul.slide-menu li.menu-' + new_position).first();
    }else{
      new_menu = slideshow.select('ul.slide-menu li.menu-1').first();
    }
    
    CommikSlideShow.select_picture(slideshow, new_menu);
  },
  
  
  select_picture: function(slideshow, new_menu_sel){
    var move = 0;
    var current_menu_sel = slideshow.select('ul.slide-menu li.selected').first();
    var current_position = CommikSlideShow.get_position_menu(current_menu_sel.className);
    var new_position = CommikSlideShow.get_position_menu(new_menu_sel.className);
    var transition = "slide";
    
    if(slideshow.hasClassName('disabled')){return;}
    
    if(current_menu_sel.className == new_menu_sel.className){return;}

    move = current_position - new_position;   
    
    current_menu_sel.removeClassName('selected');
    new_menu_sel.addClassName('selected');
    
    if(slideshow.select('input.transition').first()){
      transition = slideshow.select('input.transition').first().value;
    }
    
    if(transition == 'fade'){
      CommikSlideShow.fade_picture(slideshow, move);
    }else{
      CommikSlideShow.move_picture(slideshow, move);
    }
    
    CommikSlideShow.select_text_intro(slideshow, new_position);
    
    CommikSlideShow.set_timeout_move(slideshow.id);
  },
  
  select_text_intro: function(slideshow, position){
    slideshow.select('div.wrapper-text div.text').each(function(text){
      text.hide();
    });
    
    if(slideshow.select('div.wrapper-text div.picture' + position).first()){
      slideshow.select('div.wrapper-text div.picture' + position).first().show();
    }else if(slideshow.select('div.wrapper-text div.all').first()){
      slideshow.select('div.wrapper-text div.all').first().show();
    }else{
      slideshow.select('div.wrapper-text div.text').first().show();
    }
  },
  
  fade_picture: function(slideshow, move){
    var pictures = slideshow.select('div.pictures').first();
    var slider = slideshow.select('div.pictures div.slide').first();
    var width_picture = slideshow.select('div.pictures img').first().getWidth();
    
    slideshow.addClassName('disabled');
    
    pictures.fade({ 
      duration: 0.5, 
      afterFinish: function (obj) { 
        new Effect.Move (slider,{ 
          duration: 0, 
          x: move * width_picture, 
          mode: 'relative',
          afterFinish: function (obj) {
            pictures.appear({ 
              duration: 0.5,
              afterFinish: function (obj) {
                slideshow.removeClassName('disabled');
              }
            });
          }
        });
      }, 
      queue: {position: 'end',scope: 'slider',limit: 6} 
    });
  },
  
  move_picture: function(slideshow, move){
    var duration = 1.0;
    var slider = slideshow.select('div.pictures div.slide').first();
    var move_unsigned = move;
    var width_picture = slideshow.select('div.pictures img').first().getWidth();
    
    if(move < 0){move_unsigned *= -1;}
    duration += (duration * (move_unsigned-1)) / 2;
    
    new Effect.Move (slider,{ 
      duration: duration, 
      x: move * width_picture, 
      mode: 'relative', 
      queue: {position: 'end',scope: 'slider',limit: 5}
    });
    
  },
  
  set_timeout_move: function(slideshow_id){
    var slideshow = $(slideshow_id);
    var seconds = 10;
    var timeout_move;
    
    if(slideshow.select('input.timer').first()){
      seconds = Number(slideshow.select('input.timer').first().value);
      if(seconds == 0){return;}
    }

    timeout_move = setTimeout('CommikSlideShow.move_next("' + slideshow_id + '")', seconds * 1000);
    
    clearTimeout(CommikSlideShow.timeouts_move.get(slideshow_id));
    CommikSlideShow.timeouts_move.set(slideshow_id, timeout_move);
  },
  
  get_position_menu: function(menu_class){
    var start_data;
    var end_data;
    var values;
    
    start_data = menu_class.indexOf('menu') + 5;
    end_data = menu_class.indexOf(' ', start_data);
    if(end_data == -1) {end_data = 9999;}
    
    return menu_class.substring(start_data, end_data);
  }
}

Event.observe(window, 'load', CommikSlideShow.generate);