/**********************************************************************
 * jQuery - Horizontal Accordion
 * Version 2.00.00 Alpha 1
 *
 * portalZINE(R) - New Media Network
 * http://www.portalzine.de
 *
 * Alexander Graef
 * portalzine@gmail.com
 *
 * Copyright 2007-2009
**********************************************************************/
(function($){
  $.hrzAccordion = {
    setOnEvent: function(i, container, finalWidth, settings){
      $('#'+container+'Handle'+i).bind(settings.eventTrigger, function(){

        var status = $('[rel='+container+'ContainerSelected]').data('status');

        if(status == 1 && settings.eventWaitForAnim === true){
          return false;
        }

        if($('#'+container+'Handle'+i).attr('rel') != container+'HandleSelected'){
          settings.eventAction;

          // Pony Specific
          $('[id$=_thumbs]').css({'overflow':'hidden'});

          $('[id*='+container+'Handle]').attr('rel','');
          $('[id*='+container+'Handle]').attr('class',settings.handleClass);
          $('#'+container+'Handle'+i).addClass(settings.handleClassSelected);
          $('.'+settings.contentWrapper).css({width: finalWidth+'px' });

          switch(settings.closeOpenAnimation){
            case 1:
              if($('[rel='+container+'ContainerSelected]').get(0)){
                $('[rel='+container+'ContainerSelected]').data('status',1);
                //current_width = $('[rel='+container+'ContainerSelected]').width();
                $('[rel='+container+'ContainerSelected]').animate(
                  {
                    width     : '0',
                    opacity   : '0'
                  },
                  {
                    queue     : true,
                    duration  : settings.closeSpeed ,
                    easing    : settings.closeEaseAction,
                    complete  : function(){
                      $('[rel='+container+'ContainerSelected]').data('status',0);
                      // Pony Specific
                      //$('[rel='+container+'ContainerSelected]').find('[id$=_thumbs]').css({'overflow':'auto'});
                    },
                    step : function(now){
                      width = $(this).width();
                      //new_width = finalWidth- (finalWidth  * (width/current_width));
                      new_width = finalWidth - width;
                      $('#'+container+'Content'+i).width(Math.ceil(new_width)).css('opacity','1');
                    }
                  }
               );
              }
              else{
                $('[rel='+container+'ContainerSelected]').data('status',1);
                $('#'+container+'Content'+i).animate(
                  {
                    width     : finalWidth,
                    opacity   : '1'
                  },
                  {
                    queue     : false,
                    duration  : settings.closeSpeed ,
                    easing    : settings.closeEaseAction,
                    complete  : function(){
                      $('[rel='+container+'ContainerSelected]').data('status',0);
                      // Pony Specific
                      //$('[rel='+container+'ContainerSelected]').find('[id$=_thumbs]').css({'overflow':'auto'});
                    }
                  }
               );
              }
              break;
            case 2:
              $('[id*='+container+'Content]').css({width: '0'});
              $('#'+container+'Content'+i).animate({
                  width   : finalWidth+'px',
                  opacity : '1'
                },
                {
                  queue   : false,
                  duration: settings.openSpeed ,
                  easing  : settings.openEaseAction,
                  complete: settings.completeAction
                }
              );
              break;
          }

          $('[id*='+container+'Content]').attr('rel','');
          $('#'+container+'Handle'+i).attr('rel',container+'HandleSelected');
          $('#'+container+'Content'+i).attr('rel',container+'ContainerSelected');
        }
        return false;
      });
    }
  };

  $.fn.extend({
    hrzAccordionLoop: function(options){
      return this.each(function(a){

        var container     = $(this).attr('id') || $(this).attr('class');
        var elementCount  = $('#'+container+' > li, .'+container+' > li').size();
        var settings      = $(this).data('settings');

        variable_holder   = 'interval' + container;

        var i =0;
        var loopStatus  = 'start';

        variable_holder = window.setInterval(function(){
          $('#'+container+'Handle'+i).trigger(settings.eventTrigger);

          if(loopStatus =='start'){
            i = i + 1;
          }
          else{
            i = i-1;
          }

          if(i==elementCount && loopStatus  == 'start'){
            loopStatus  = 'end';
            i=elementCount-1;
          }

          if(i==0 && loopStatus  == 'end'){
            loopStatus  = 'start';
            i=0;
          }
        }, settings.cycleInterval);
      });
    },

    hrzAccordion: function(options) {
      this.settings = {
        eventTrigger            : 'click',
        containerClass          : 'container',
        listItemClass           : 'listItem',
        contentContainerClass   : 'contentContainer',
        contentWrapper          : 'contentWrapper',
        contentInnerWrapper     : 'contentInnerWrapper',
        handleClass             : 'handle',
        handleClassOver         : 'handleOver',
        handleClassSelected     : 'handleSelected',
        handlePosition          : 'right',
        handlePositionArray     : '', // left,left,right,right,right
        closeEaseAction         : 'swing',
        closeSpeed              : 500,
        openEaseAction          : 'swing',
        openSpeed               : 600,
        openOnLoad              : 2,
        hashPrefix              : 'tab',
        eventAction             : function(){
          //add your own extra clickAction function here
        },
        completeAction          : function(){
          //add your own onComplete function here
        },
        closeOpenAnimation      : 1,      // 1 - open and close at the same time / 2- close all and than open next
        cycle                   : false,  // not integrated yet, will allow to cycle through tabs by interval
        cycleInterval           : 10000,
        fixedWidth              : '',
        eventWaitForAnim        : true
      };

      if(options){
        $.extend(this.settings, options);
      }
      var settings = this.settings;

      return this.each(function(a){
        var container = $(this).attr('id') || $(this).attr('class');
        $(this).data('settings', settings);
        $(this).wrap('<div class="'+settings.containerClass+'"></div>');

        var elementCount    = $('#'+container+' > li, .'+container+' > li').size();
        var containerWidth  =  $('.'+settings.containerClass).width();
        var handleWidth     = $('.'+settings.handleClass).css('width');
        handleWidth         =  handleWidth.replace(/px/,'');

        var finalWidth;
        if(settings.fixedWidth){
          finalWidth = settings.fixedWidth;
        }
        else{
          finalWidth = containerWidth-(elementCount*handleWidth)-handleWidth;
        }

        $('#'+container+' > li, .'+container+' > li').each(function(i){

          $(this).attr('id', container+'ListItem'+i);
          $(this).attr('class',settings.listItemClass);
          $(this).html('<div class="'+settings.contentContainerClass+'" id="'+container+'Content'+i+'">'
            + '<div class="'+settings.contentWrapper+'">'
            + '<div class="'+settings.contentInnerWrapper+'">'
            + $(this).html()
            + '</div></div></div>');

          var handle;
          var containerHandleI = container + 'Handle' + i;
          if($('div', this).children().hasClass(settings.handleClass)){
            var html = $('div.'+settings.handleClass,this).attr('id',''+containerHandleI+'').html();
            $('div.'+settings.handleClass,this).remove();
            handle = '<div class="'+settings.handleClass+'" id="'+containerHandleI+'">'+html+'</div>';
          }
          else{
            handle = '<div class="'+settings.handleClass+'" id="'+containerHandleI+'"></div>';
          }

          if(settings.handlePositionArray){
            splitthis = settings.handlePositionArray.split(',');
            settings.handlePosition = splitthis[i];
          }

          switch(settings.handlePosition){
            case 'left':
              $(this).prepend(handle);
              break;
            case 'right':
              $(this).append(handle);
              break;
            case 'top':
              $('.'+container+'Top').append(handle);
              break;
            case 'bottom':
              $('.'+container+'Bottom').append(handle);
              break;
          }

          // Add hover over classes.
          $('#'+containerHandleI).bind('mouseover', function(){
            $('#'+containerHandleI).addClass(settings.handleClassOver);
          });
          $('#'+containerHandleI).bind('mouseout', function(){
            if($('#'+containerHandleI).attr('rel') != 'selected'){
              $('#'+containerHandleI).removeClass(settings.handleClassOver);
            }
          });

          // Bind the chosed event with the handles.
          $.hrzAccordion.setOnEvent(i, container, finalWidth, settings);

          if(i == elementCount-1){
            $('#'+container+',.'+container).show();
          }

          if(settings.openOnLoad !== false && i == elementCount-1){
            var location_hash = location.hash;
            location_hash  = location_hash.replace('#', '');

            if(location_hash.search(settings.hashPrefix) != '-1'){
              var tab = 1;
              location_hash  = location_hash.replace(settings.hashPrefix, '');
            }

            if(location_hash && tab ==1){
              $('#'+container+'Handle'+(location_hash)).attr('rel',container+'HandleSelected');
              $('#'+container+'Content'+(location_hash)).attr('rel',container+'ContainerSelected');
              $('#'+container+'Handle'+(location_hash-1)).trigger(settings.eventTrigger);
            }
            else{
              $('#'+container+'Handle'+(settings.openOnLoad)).attr('rel',container+'HandleSelected');
              $('#'+container+'Content'+(settings.openOnLoad)).attr('rel',container+'ContainerSelected');
              $('#'+container+'Handle'+(settings.openOnLoad-1)).trigger(settings.eventTrigger);
            }
          }
        });

        if(settings.cycle === true){
          $(this).hrzAccordionLoop();
        }
      });
    }
  });
})(jQuery);