var indicatorFadeTime = 500;
var sitename = location.protocol + '//' + location.host + '/';
var loaderBusy = false;

$(document).ready(function()
{
  hideIndicator();
  fakeMainPage();
  createAjaxLinks();
  $.ajaxHistory.initialize();
});

var contentLoaded = true;
var imageLoaded = true;

function Thread(f) {
  this.func = f;
}

Thread.prototype.Start = function () {
  if (typeof this.func == 'function') {
    setTimeout(this.func, 0);
  }
};

function createAjaxLinks(mainOnly)
{
  scroller.init();
  var elements = '#contentContainer a';

  if (!mainOnly)
    elements += ', #fakeMainPage, #topMenu a';

  $(elements).each(function(i, a)
  {
    var href = $(a).attr('href');
    if (href.indexOf(sitename) == 0)
      href = href.substring(sitename.length);

    var parts = href.match(/\/(.*?)\/(\d+),(\d+),(.*)$/);
    if (parts && parts.length == 5) {
      $(a).addClass('remote')
          .attr('title', parts[2] + ',' + parts[3] + ',' + parts[4])
          .attr('href', '?class=' + parts[2] + '&id=' + parts[3] + '&opt=' + parts[4] + '&culture=' + parts[1] + '&content=true')
          .remote('#contentContainer', function()
           {
             contentLoaded = true;
             new Thread(hideIndicator).Start();
             new Thread(createAjaxLinks(true)).Start();
           })
          .click(function (e)
           {
             if (!e.ctrlKey) {
               if (loaderBusy) {
                 return false;
               }
               loaderBusy = true;
               contentLoaded = false;
               imageLoaded   = false;
               new Thread(showIndicator).Start();
               new Thread(getPageImage(parts[3])).Start();
             }
           });
    }
  });
}

function showIndicator()
{
  $('#ajaxIndicator').css('height', '540px')
                     .fadeTo(indicatorFadeTime, 0.5);
}

function hideIndicator()
{
  if (!contentLoaded || !imageLoaded)
    return;

  $('#ajaxIndicator').fadeTo(indicatorFadeTime, 0, function()
  {
     $('#ajaxIndicator').css('height', '0');
     new Thread(slideImage).Start();
  });
}

function fakeMainPage()
{
  var parts = location.href.match(/(.*?)(\d+),(\d+),([^#]+)/);
  var href = sitename;

  href += (parts) ? '?class=' + parts[2] + '&id=' + parts[3] + '&opt=' + parts[4] + '&' : '?';
  href += 'content=true';

  $(document.body).append('<a href="' + href + '" id="fakeMainPage"></a>');
  $('#fakeMainPage').addClass('remote')
                    .remote('#contentContainer', function()
                     {
                       contentLoaded = true;
                       hideIndicator();
                       createAjaxLinks(true);
                     })
                    .click(function()
                     {
                       showIndicator();
                     });
}

function slideImage()
{
  var animationTime = 500;

  if ($('#leftImageContainer img').length < 2)
    return;

  var newImg = $('#leftImageContainer img:last');
  var imgContainer = $(newImg).parent();
  
  $(imgContainer).prepend($(newImg))
                 .css('marginLeft', '-360px')
                 .animate(
                  {
                    'marginLeft': '0'
                  },
                  animationTime,
                  'swing',
                  removeOldImage
                 );
}

function removeOldImage()
{
  $('#leftImageContainer img:gt(0)').remove();
};

function getPageImage(id)
{
  removeOldImage();
  var src = 'cmd.php?cmd=img&class=page&field=page_left&id=' + id;
  var clone = $( '#leftImageContainer img:first').clone().attr('src', '');
  $(clone).attr('src', src).ready(function()
  {
    $('#leftImageContainer div').append($(clone));
    loaderBusy = false;
    new Thread(hideIndicator).Start();
    /* we've finished loading everything so we're not busy any more */
    imageLoaded = true;
  });
}


