/*
  This script is (c) 2009 by Armin Dressler
  You may not copy, reuse or alter the code without my admission.
  E-Mail: adressler [at] web [dot] de
*/

function showImage(path)
{
  var new_image = new Asset.image([path]);
  new_image.setStyle('opacity', 0.01);
  new_image_fader = new Fx.Morph(new_image, {'duration':500, 'fps':24, 'link':'cancel'});
  new_image.store('Fader', new_image_fader);
  
  var old_image = $('bigview').getElement('img');
  
  var fadeIn = function()
  {
    new_image_fader.start({'opacity':1.0});
  }
  
  var delayedFadeIn = fadeIn.create({delay:250});

  if(old_image==null)
  {
    new_image.inject($('bigview'));
    delayedFadeIn();
  }
  else
  {
    var old_image_fader = old_image.retrieve('Fader');
    if(old_image_fader==null)
    {
      old_image_fader = new Fx.Morph(old_image, {'duration':500, 'fps':24, 'link':'cancel'})
      old_image.store('Fader', old_image_fader);
    }
    
    old_image_fader.start({'opacity':0.01}).chain(function(){
      $('bigview').innerHTML='';
      new_image.inject($('bigview'));
      delayedFadeIn();
    });
  }
}

function prepareGallery()
{
  var accordions = $$('.ce_accordion');
  if(accordions.length>0)
  {
    accordions[0].addClass('accordion_top');
    injectImageZoom();
    injectPagination(accordions);
    prepareAccordion();
    prepareMustHave();
  }
}

function pageHighlight(container, pagenumber)
{
  var links = container.getElements('a');
  links.setStyles({'font-weight':'normal', 'font-size':'100%'});
  links[pagenumber-1].setStyles({'font-weight':'bold', 'font-size':'125%'});
}

function prepareAccordion()
{
  new Accordion($$('div.toggler'), $$('div.accordion'),
  {
    opacity: false,
    onActive: function(toggler, accordion) {
      toggler.addClass('opened');
      var pagination = toggler.getElement('div.pagination');
      if(pagination!=null)
      {
        pagination.setStyle('visibility', 'visible');
        pageHighlight(pagination, 1);
      }
      accordion.getElement('div.ce_gallery').setStyle('left', 0);
      if(accordion.getElement('a')!=null) showImage(accordion.getElement('a').href);
    },
    onBackground: function(toggler, accordion) {
      toggler.removeClass('opened');
      var pagination = toggler.getElement('div.pagination');
      if(pagination!=null)
      {
        pagination.setStyle('visibility','hidden');
      }
    }
  });
}

function injectImageZoom()
{
  allpiclinks = $$('#thumbs a');
  if(allpiclinks.length>0)
  {
    firstpicpath = allpiclinks[0].href;
    showImage(firstpicpath); 
  }
  allpiclinks.each(function(item)
  {
    item.addEvent('click', function()
    {
      showImage(item.href);
      return false;
    })
  });
}

function injectPagination(allaccordions)
{
  allaccordions.each(function(item)
  {
    var toggler = item.getElement('div.toggler');
    var imagecount = item.getElement('div.accordion').getElements('img').length;
    var pagecount = Math.ceil(imagecount/6);
    
    var gallery = item.getElement('div.ce_gallery');
    gallery.setStyle('left', 0);
    gallery_scroller = new Fx.Morph(gallery, {
      'duration': 750,
      'fps': 30,
      'link': 'cancel',
      'transition': Fx.Transitions.Quad.easeInOut})
    gallery.store('Scroller', gallery_scroller);

    if(pagecount>1)
    {
      var pagination = new Element('div').set({'class':'pagination'});
      pagination.setStyle('visibility', 'hidden');
      pagination.inject(toggler, 'top');
      
      for(i=1;i<=pagecount;i++)
      {
        page = new Element('a').set({
          'href': '#',
          'html': i,
          'events': {
            'click': function(){
              var page = arguments[0];
              var gal = arguments[1];
              var tog = arguments[2];
              var pag = arguments[3];
              var scroller = gal.retrieve('Scroller');
              scroller.start({'left':-420*(page-1)});
              pageHighlight(pag, page);
              return false;
            }.pass([i, gallery, toggler, pagination])
          }
        })
        page.inject(pagination);
      }
    } 
  })
}

function prepareMustHave()
{
  var musthave = $$('.musthave');
  if(musthave.length>0)
  {
    musthave.each(function(item)
    {
      item.getParent('.ce_accordion').getChildren('.toggler').setStyle('font-weight', 'bold');
    });
  }
}