var ssplaying = false;
var sscurrent = '#slides-main';
var galls = [];
var curGall;
var ssopts = {
    fx:       'fade',
    timeout:   4000, // time between slides in ms, default is 4000 ms
    next:     '#next',
    prev:     '#prev',
    before:   onBefore
  };

function randomChildIndex(e)
{
   return Math.floor(Math.random() * $(e).children().size())
}

function startstop()
{
    if (ssplaying)
    {
       ssplaying = false;
       $(sscurrent).cycle('pause');
       $('#playpause').attr('src', "images/play.gif");
    }
    else
    {
       ssplaying = true;
       $(sscurrent).cycle('resume');
       $('#playpause').attr('src', "images/pause.gif");
    }
}

function mainstart()
{
//  ssopts['startingSlide'] = randomChildIndex($('#slides-main'));
  activateGallery(sscurrent);
  $('#slides-main').cycle(ssopts);
  ssplaying = true;
  $('#playpause').click(startstop);
  $('#ssdiv').click(startstop);
}

function addGallery(gallDiv)
{
  var jq = $(gallDiv);
  var name = jq.attr('id')
  var urls = [];
  jq.find('img').each(function() {
    urls.push($(this).attr('src'));
  });
  var gall = { inited: false, urls: urls, loadQueue: [],  loaded: [] };
  galls[name] = gall;
}

function initGalleryDivs()
{
  var ssdiv = $('#ssdiv');
  ssdiv.empty();
  for (var gall in galls)
  {
     ssdiv.append('<div id="' + gall + '" />');
  }
}

function loadNext()
{
  if (curGall.loadQueue.length > 0)
  {
    var image = new Image();
    $(image).bind('load', loadHandler);
    image.src = curGall.loadQueue.shift();
  }
}

function loadHandler()
{
    curGall.loaded.push(this);
    loadNext();
}


function loadGalleries(root, url)
{
  $.get(url, function(data) {
    $(data).find('div').each(function() {
      addGallery(this);
  });
  initGalleryDivs();
    mainstart();
  });
}

function activateGallery(curid)
{
  var curDiv = $(curid);
  curid = curid.substring(1); // remove leading '#'
  var gall = curGall = galls[curid];
  if (!gall.inited)
  {
    gall.inited = true;
    for (var i = 0 ; i < gall.urls.length ; i++)
    {
      if ( i == 0 )
      {
        curDiv.append('<img src="' + gall.urls[i] + '" />');
        (new Image()).src = gall.urls[i];
      }
      else if ( i == 1 )
      {
        curDiv.append('<img src="' + gall.urls[i] + '" style="display: none" />');
        (new Image()).src = gall.urls[i];
      }
      else
      {
        gall.loadQueue.push(gall.urls[i]);
      }
    }
   }
  loadNext();
}

// add images to slideshow 
function onBefore(curr, next, opts)
{ 
  if (opts.addSlide)  // <-- important! 
    while(curGall.loaded.length) 
      opts.addSlide(curGall.loaded.shift());
}

function ssswitch(ssnew)
{
  if (sscurrent != ssnew)
  {
       $(sscurrent).cycle('stop');
       $(sscurrent).addClass('sshide');
       sscurrent = ssnew;
       $(sscurrent).removeClass('sshide');
       activateGallery(sscurrent);
       $(sscurrent).cycle(ssopts);
       ssplaying = true;
  }
}
