//# 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 ($) {
    var stopanimation = false;
    $.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 (stopanimation == 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: "100" }, { queue: true, duration: settings.closeSpeed, easing: settings.closeEaseAction,
                                    complete: function () {
                                        $('[rel=' + container + 'ContainerSelected]').data('status', 0);
                                        // $("#" + container + "Handle" + i).bind("click", function () { alert("Good Bye"); });

                                    }
                                    , 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");
                   
                    }
                }

            });
            //$("#" + container + "Handle" + i-1).bind("click", function() { alert("Hello"); });
        },
        setClickEvent: function (i, container, finalWidth, settings) {
            $("#" + container + "Handle" + i).bind("click", function () {
                stopanimation = true; 
            
            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: "100" }, { queue: true, duration: settings.closeSpeed, easing: settings.closeEaseAction,
                                    complete: function () {
                                        $('[rel=' + container + 'ContainerSelected]').data('status', 0);
                                        // $("#" + container + "Handle" + i).bind("click", function () { alert("Good Bye"); });

                                    }
                                    , 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");
                    
                    }
            });
            //            if (i > 0) {
            //                $("#" + container + "Content" + i - 1).bind("click", function() {
            //                    alert("Hello");
            //                });
            //            }
        }
    };

    $.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');
                var loopStatus;
                variable_holder = "interval" + container;
                var i = 0;

                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: "focus",
                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 () {

                },
                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;
                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);
                    $.hrzAccordion.setClickEvent(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);	

