_content_loader = {
  fx_duration : 250,
  fx_transition : Fx.Transitions.Sine.easeOut,
  fx_standardHeight : 400,
  fx_chain : new Chain,
  
  isloading : false,
  objects: new Object(),
  newContentObj: null,
  curContentObj: null,

  
  init : function()
  {
//    if(Browser.Engine.trident && Browser.Engine.version<=4)
//      return false;

    this.createLinks($('page'));

    if($chk(CUR_OBJ))
    {
      this.objects['article'+CUR_OBJ.href] = this.newContentObj = this.curContentObj = CUR_OBJ;
      delete CUR_OBJ;
    }
    this.server = SERVER;
    
    if(Browser.Engine.trident)
      $$('a').addEvent('focus',function(){this.blur();});
    
    this.loaderOff();
    
    $('content').set('rel',$('content').getScrollSize().y-$$('#content .inner')[0].getSize().y);
    // $$('#navigation .inner').set('rel',$('navigation').getScrollSize().y-$$('#navigation .inner')[0].getSize().y);

    this.fx_chain.chain(function(){this.resizeElement($('content'));}.bind(this));
    this.fx_chain.chain(function(){this.resizeElement($('navigation'));}.bind(this));
    this.fx_chain.chain(function(){
      $('navigation').setStyles({
        'overflow':'visible',
        'height':'auto'
      });
      $$('#navigation .content')[0].setStyles({
        'overflow':'hidden',
        'height':$$('#navigation .inner')[0].getSize().y+$$('#navigation .logo')[0].getSize().y
      });
    }.bind(this));
    this.doChain();
  },
  
  load : function(link)
  {
    if($chk(link = $(link)) && !this.isloading && $(link).get('href') != this.curContentObj.href && $(link).get('href')!='')
    {
     // $(link).get('href')!=''
      this.loaderOn();

      if(!$chk(this.objects[$(link).get('href')]))
      {
        // load the new object if it is not already stored in the objects-object
        this.currentLink = $(link).get('href')
        link = this.currentLink+(this.currentLink.indexOf('?')>-1 ? '&' : '?')+'json=1';
        new Request.JSON({url: link,
          onComplete: function(obj){
            if($chk(obj))
            {
              _content_loader.objects[_content_loader.currentLink] = _content_loader.newContentObj = obj;
              delete _content_loader.currentLink;
            }
            else
              _content_loader.newContentObj = _content_loader.curContentObj;

            _content_loader.switchContent();
          }
        }).get();
      }       
      else
      {
        this.newContentObj = this.objects[$(link).get('href')];
        this.switchContent();
      }
    }
  },
  
  switchContent: function()
  {
    this.fx_chain.clearChain();
    
    // fade out the old content and navigation box
    this.fx_chain.chain(function(){
      if(this.newContentObj.cnt_navi != this.curContentObj.cnt_navi)
      {
        this.hideElement($$('#navigation .inner')[0]);
      }
      else
        this.doChain();
    }.bind(this));
    this.fx_chain.chain(function(){this.hideElement($$('#content .inner')[0]);}.bind(this));

    // insert the new content
    this.fx_chain.chain(function(){this.insertContent();}.bind(this));
    
    // resize the content and navigation box
    this.fx_chain.chain(function(){this.resizeElement($('content'));}.bind(this));
    this.fx_chain.chain(function(){this.resizeElement($$('#navigation .content')[0],$$('#navigation .inner')[0].getScrollSize().y+88);}.bind(this));

    // fade in the content and navigation box
    this.fx_chain.chain(function(){this.showElement($$('#content .inner')[0]);}.bind(this));
    this.fx_chain.chain(function(){this.showElement($$('#navigation .inner')[0]);}.bind(this));
    
    // finish loading
    this.fx_chain.chain(function(){this.finishLoading();}.bind(this));
    
    // execute the chain
    this.doChain();
  },

  finishLoading : function()
  {
    this.curContentObj = this.newContentObj;
    this.newContentObj = null;
    this.loaderOff();
    
    $$('#content .resizeimage a').each(function(el,index)
    {
      el.set('class','resize'+index);
      new MultiBox('resize'+index,{
        path:'http://localhost/www.stoffelholding.com/files/addons/admintools/',
        skin:'http://localhost/www.stoffelholding.com/files/addons/admintools/flash/jwplayer/modieus.swf',
        name:'lb'+index}
      );
    });
    
    this.doChain();
  },
  
  
  insertContent : function()
  {
    // insert content
    $$('#content .inner')[0].empty();
    if($chk(this.newContentObj.cnt_text))
    {
      container.set('html',this.newContentObj.cnt_text);
      this.createLinks(container);
    }
    
    // insert navigation
    if($chk(this.newContentObj.cnt_navi))
    {
      container = $$('#navigation .inner')[0].empty();
      // normal text container
      container.set('html',this.newContentObj.cnt_navi);
      this.createLinks(container);
    }

    this.doChain();
  },
  
  createLinks : function(box)
  {
    if($chk($(box)))
    {
      $(box).getElements('a').each(function(link)
      {
        if($chk(linkhref = link.get('href')) && !link.hasClass('dontjs'))
        {
          if(linkhref.indexOf(window.location.host)>-1)
          {
            linkhref = linkhref.split(window.location.host)[1];
            link.set('href',linkhref);
          }
          
          if(linkhref.indexOf('json=1')>-1 || linkhref.indexOf('http:')>-1 || linkhref.indexOf('mailto:')>-1 || linkhref.indexOf('javascript:')>-1 || linkhref.indexOf('files/')>-1)
          {
            linkhref = '';
          }
          
          
  
          if(linkhref!='')
          {
            // link.set('href',(linkhref.indexOf('?')>-1 ? '&' : '?')+'json=1'),
            linkhref+(linkhref.indexOf('?')>-1 ? '&' : '?')+'json=1',
  
            link.addEvent('click',function(){
              _content_loader.load(this);
              return false;
            });
  
            if(Browser.Engine.trident)
              link.addEvent('focus',function(){this.blur();});
          }
        }
      });
    }
  },
  
  hideElement : function(element)
  {
    if($chk(container = $(element)))
    {
      new Fx.Morph(
        container,
        {
          duration: this.fx_duration/2,
          transition: this.fx_transition,
          onComplete: function()
          {
            _content_loader.doChain();
          }.bind(container)
        }
      )
      .start({
        'opacity':[container.getStyle('opacity'),0]
      });
    }
    else
      this.doChain();
  },

  showElement : function(element)
  {
    if($chk(container = $(element)))
    {
      if(container.getStyle('opacity')<=0)
      {
        new Fx.Morph(
          container,
          {
            duration: this.fx_duration/2,
            transition: this.fx_transition,
            onComplete: function()
            {
              _content_loader.doChain();
            }.bind(container)
          }
        )
        .start({
          'opacity':[container.getStyle('opacity'),1]
        });
      }
      else
        this.doChain();
    }
    else
      this.doChain();
  },
  
  resizeElement : function(element,height)
  {
    if($chk(container = $(element)))
    {
      if(typeof(height)=='undefined')
      {
        if($chk(height = container.get('rel')) && $chk(obj = container.getElement('.inner')))
          height = obj.getSize().y + parseInt(height);
        else
          height = container.getScrollSize().y;
      }

      new Fx.Morph(
        container,
        {
          duration: this.fx_duration * (height/this.fx_standardHeight),
          transition: this.fx_transition,
          onComplete: function()
          {
            _content_loader.doChain();
          }.bind(container)
        }
      )
      .start({
        'height':[container.getStyle('height'),height]
      });
    }
    else
      this.doChain();
  },
  
  loaderOn : function()
  {
    this.isloading = true;
/*
    if(!$chk($('loader')))
    {
      new Element('div',{
        'id':'loader'
      })
      .setStyle('z-index','29')
      .inject($('page'),'top');
    }    
*/
  },
  loaderOff : function()
  {
    this.isloading = false;
/*
    if($chk($('loader')))
    {
      $('loader').destroy();      
    }
*/    
  },

  doChain : function()
  {
    this.fx_chain.callChain();
  }
}

window.addEvent('domready',function(){
  _content_loader.init();
});
