//# 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                    : "easeOutCirc",
                        closeSpeed                             : 5,
                        openEaseAction                     : "easeOutCirc",
                        openSpeed                              : 5,
                        openOnLoad                                   : 2,
                        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                                           : false, // not integrated yet, will allow to cycle through tabs by interval
                        cycleInterval                           : 3000,
                        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+"'>"
                                         +"<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).hrzAccordionLoop();
                                }
                        });
                }
        });
})(jQuery);
