(function ($){ /* For compatibility with other frameworks*/
  var heightAnimationSpeed = 250;
  var pageAnimationSpeed = 500;
  try {document.execCommand("BackgroundImageCache",false,true);} catch(e) {}

  
  var filterURL = function(url)
  {
    return url.substr(1);
  }

  $.fn._tabmenu_add_link_handler = function(sendRequest)
  {
    var $this = this;
    $('h2 a', this).click(function()
    {
      var $a = $(this);
      $('h2 li.selected', $this).removeClass('selected');
      $a.parent('li').addClass('selected')
      
      sendRequest(filterURL($a.attr('href')));
      return false;
    });
    return this;
  }
  
  $.fn._tabmenu_show = function(params)
  {
    this.content.html($CACHE.get(params));
  }
  
  $.fn.tabmenu = function()
  {

    return this.each(function() {
      var $b = $(this); // .block.tabmenu
      $b.content = $('.content', $b);
      $b.loading = $('.loading', $b);

      /** block requesting **/
      var sendRequest = function (params)
      {
        var $d = new Date();

        if ( $CACHE.isset(params) )
        {
          $b._tabmenu_show(params);
        }
        else
        {
          $b.content.html($b.loading.clone().show().css({marginLeft: ($b.content.width() - $b.loading.width()) / 2 , marginTop: ($b.content.height() - $b.loading.height()) / 2 }));
          
          $.get(
            params, 
            { v: $d.getTime() },
            function(data) {
              if ( 'content' in data )
              {
                $CACHE.set(params, data.content);
                $b._tabmenu_show(params);
              }
            }, 
            'json'
          );
        }
      };
      
      /** caching generated html on init **/
      $CACHE.set(filterURL($('h2 .selected a', $b).attr('href')), $b.content.html());
      
      /** <a> onclick event **/
      $b._tabmenu_add_link_handler(sendRequest);
        
    });
  }
  $(document).ready(function() {
    $('.tabmenu').tabmenu();
  });
})(jQuery); /* For compatibility with other frameworks*/
