/* =========================================================
* One_vShowMe - jQuery Plugin
* Great SlideShow Plugin AND Tabs Plugin
*
* Examples and documentation at: http://one-v.co.il
* 
* Copyright (c) 2010 Arnold Simha, http://one-v.co.il
*
* Version: 2.3.3 (07/12/2010)
* Requires: jQuery v1.3+
*
*/


(function ($) {

    $.fn.One_vShowMe = function (options) {
        return this.each(function () {
            $.One_vShowMe(this, options);
        });
    };
    $.One_vShowMe = function (container, options) {
        var settings = {
            animate: true,
            showSpeed: 'normal',
            hideSpeed: 'normal',
            Trigges: null,
            Items: '#Items',
            SelectedItem: 0,
            AutoPlay: true,
            DelayTime: 1500,
            selectedClass: "slectedBtn",
            fixZIndex: true,
            showAnchor: false,
            beforeChange: null
        };
        if (options) {
            $.extend(settings, options);
        };
        var elements = $(settings.Items);
        var trigges = (settings.Trigges) ? $(settings.Trigges) : settings.Trigges;
        var selectedIndex = settings.SelectedItem;
        var prevIndex = 0;
        var interval;

        //Init Control
        function init() {
            if (settings.fixZIndex) {
                //Create z-index layers
                elements.each(function (i) {
                    $(elements[i]).css('z-index', String(elements.length - i)).css('position', 'absolute').hide();
                });
            }

            buttonsOper(null, "click");
            buttonsOper(prevIndex, "addClass");
            $(elements[prevIndex]).show();

            if (settings.AutoPlay) {
                AutoPlay();
            }
        }
        init();


        // **** Remove Opacity-Filter in IE ****
        function removeFiltes(element) {
            if (element.style.removeAttribute) {
                element.style.removeAttribute('filter');
            }
        }


        // **** Show Element ****
        function SelectElement() {
            clearTimeout(interval);

            //add class to selected Trigger
            buttonsOper(selectedIndex, "addClass");

            if (prevIndex != selectedIndex) {
                buttonsOper(prevIndex, "removeClass");

                if (settings.animate) {
                    $(elements[prevIndex]).fadeOut(settings.hideSpeed, function () {
                        if (jQuery.browser.msie) {
                            removeFiltes($(this)[0]);
                        }
                    });


                    $(elements[selectedIndex]).fadeIn(settings.showSpeed, function () {
                        if (jQuery.browser.msie) {
                            removeFiltes($(this)[0]);

                        }
                        if (settings.AutoPlay) {
                            AutoPlay();
                        }
                    });
                } else {
                    $(elements[prevIndex]).hide();
                    $(elements[selectedIndex]).show();
                    if (settings.AutoPlay) {
                        AutoPlay();
                    }
                }
                prevIndex = selectedIndex;
            }
        }


        function AutoPlay() {
            clearTimeout(interval);
            interval = setTimeout(function () { MoveTo(); }, settings.DelayTime);
        }

        // **** Move to next Item - Auto move function only! ***
        function MoveTo() {
            if (settings.beforeChange != null && typeof (settings.beforeChange) == "function") {
                settings.beforeChange();
            }
            prevIndex = selectedIndex;
            selectedIndex++;
            var status = ((trigges) ? trigges.length : elements.length);
            if (selectedIndex == status) {
                selectedIndex = 0;
            }
            SelectElement();
            prevIndex = selectedIndex;

        }

        //**** Add events and Classes to Triggers ***
        function buttonsOper(index, option) {
            if (trigges) {
                switch (option) {
                    case "click":
                        if (trigges.is(":hidden")) {
                            trigges.fadeIn("fast");
                        }

                        trigges.click(function () {
                            if (settings.beforeChange != null && typeof (settings.beforeChange) == "function") {
                                settings.beforeChange();
                            }
                            selectedIndex = trigges.index(this);
                            SelectElement();
                            if (!settings.showAnchor) {
                                return false;
                            }
                        });
                        break;
                    case "addClass":
                        $(trigges[index]).addClass(settings.selectedClass);
                        break;
                    case "removeClass":
                        $(trigges[index]).removeClass(settings.selectedClass);
                        break;
                }
            }
        }
    };

})(jQuery);
