//# 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;
              
              $('[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: "0px",opacity:"0"}, { queue:true, duration:settings.closeSpeed ,easing:settings.closeEaseAction,complete: function(){  
                                                                           
              $('[rel='+container+'ContainerSelected]').data('status',0);                                                                                      } ,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);  
                                                                                                    }});
              
                
              }
              
              break;
              case 2:
                $('[id*='+container+'Content]').css({width: "0px"});
                $('#'+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");          
              
            
            }
            
          });  
}
      };
  
  $.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        : "",
      closeSpeed           : 500,
      openEaseAction         : "",
      openSpeed            : 500,
      openOnLoad           : 5, // sets which tab to open onLoad @jrivera
      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        : "690", // controls the size of the inner content @jrivera
      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;
        var handle;
        
        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>");
             
          if($("div",this).hasClass(settings.handleClass)){
          
          var html = $("div."+settings.handleClass,this).attr("id",""+container+"Handle"+i+"").html();
          $("div."+settings.handleClass,this).remove();
          
           handle = "<div class=\""+settings.handleClass+"\" id='"+container+"Handle"+i+"'>"+html+"</div>";
          }else{
           handle = "<div class=\""+settings.handleClass+"\" id='"+container+"Handle"+i+"'></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;
          }          
        
          $("#"+container+"Handle"+i).bind("mouseover", function(){
            $("#"+container+"Handle"+i).addClass(settings.handleClassOver);
          });
          
          $("#"+container+"Handle"+i).bind("mouseout", function(){
            if( $("#"+container+"Handle"+i).attr("rel") != "selected"){
              $("#"+container+"Handle"+i).removeClass(settings.handleClassOver);
            }
          });
          
        
          $.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);  
