//# 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(i);
                                                        
                                                        $('[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);     
                                                        settings.completeAction(i);
                                                        } ,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);   
                                                                                                                                                                                                                                                                                                                                                                                                          settings.completeAction(i);   
                                                                                                                                                                                                                                                                                                                                                                                                          }});
                                                        
                                                                
                                                        }
                                                        
                                                        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(i)                                                                                                                                                                                                                                                                                                                                                                                                                                                                     });                                             
                                                        
                                                        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",
                        handleInnerWrapper              : "handleInnerWrapper",
                        handleClassOver                 : "handleOver",
                        handleClassSelected             : "handleSelected",
                        handlePosition                  : "right",
                        handlePositionArray             : "", // left,left,right,right,right
                        closeEaseAction                 : "swing",
                        closeSpeed                      : 1000,
                        openEaseAction                  : "swing",
                        openSpeed                       : 1000,
                        openOnLoad                              : 1,
                        hashPrefix                              : "tab",
                        eventAction                             : function(i){
                                                                        
                                                                        },
                        completeAction                  : function(i){
                                                                        //add your own onComplete function here
                                                                        },
                        closeOpenAnimation              : 1,// 1 - open and close at the same time / 2- close all and than open next
                        cycle                                   : true, // not integrated yet, will allow to cycle through tabs by interval
                        cycleInterval                   : 6000,
                        fixedWidth                              : "",
                        eventWaitForAnim                : false
                                
                };
        
                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/,"");
                                if(handleWidth=='auto')handleWidth=$('.handle')[0].offsetWidth;

                          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+"'>"
                                         +"<div class=\""+settings.handleInnerWrapper+"\">"
                                         +html+"</div></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=$(this);
                                        $(window).load(function(){
                                                $this.hrzAccordionLoop();
                                        });
                                }
                        });                             
                }               
        });
})(jQuery);   
