//# 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]').css("opacity", "1");	
                                    //$('[rel=' + container + 'ContainerSelected]').show();
                                settings.completeAction(i);
                                    $('[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", "");
                                    $('#' + container + 'Content' + i).width(Math.ceil(new_width)).show();

                                }
                                });







                            } 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() {
                                    settings.completeAction(i);
                                    $('[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: "swing",
                closeSpeed: 500,
                openEaseAction: "swing",
                openSpeed: 500,
                openOnLoad: 2,
                hashPrefix: "tab",
                eventAction: function(i) {
                    //add your own extra clickAction function here

                },
                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: 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;
                var handle;

                if (settings.fixedWidth) {
                    finalWidth = settings.fixedWidth;
                } else {
                    finalWidth = containerWidth - (elementCount * handleWidth) - handleWidth;
                    finalWidth = 770;
                }

                $('#' + 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);	

