﻿/* Copyright (c) 2008 Kean Loong Tan http://www.gimiti.com/kltan
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* jTabFlow
* Version: 1.1 (May 22, 2008)
* Requires: jQuery 1.2+
*/

// On change tabs
// - Recalculate pageControl
// - Hide other tab-views

(function(A) {
    A.fn.jTabFlow = function(D) {
        var E = A.extend({}, A.fn.jTabFlow.defaults, D);
        var F = 0;

        E.slides = E.parent + " " + E.views + " " + E.slides;

        var ST = 0;                                                     // Selected tab
        var PST = 0;                                                    // Previously selected tab
        var AT = A(E.parent + " " + E.tabs + " td");                    // All Tabs
        var AV = A(E.slides);                                           // All Views
        var P = A(E.parent + " " + E.pageControl + " .pages ul");                        // The page control
        var CV;
        var CT;
        var B;

        var Init = function() {
            // Add paging
            P.html("");
            for (var i = 0; i < B; i++) {
                $("<li>&#8226;</li>").appendTo(P);
            }

            // Add animations
            A(E.slides).find(E.item).each(function(G) {
                A(this).click(function() {
                    A(E.slides + " " + E.item).removeClass("jTabFlowSelected");
                    A(this).addClass("jTabFlowSelected");
                    var H = Math.abs(F - G);
                    A(E.slides).animate(
                        { marginLeft: "-" + (G * A(E.slides).find(":first-child").width() + "px") },
                        E.duration * (H)); F = G
                })
            });

            A(E.parent + " " + E.pageControl + " li").eq(F).addClass("selected");
            A(E.parent + " " + E.item).eq(F).addClass("jTabFlowSelected");
            var C = function(G) {
                A(E.parent + " " + E.views).css({
                    position: "relative",
                    width: E.width,
                    height: E.height,
                    overflow: "hidden"
                });
                A(E.slides).eq(ST).css({
                    position: "relative",
                    width: ($(this).width() * B) + "px",
                    height: E.height,
                    overflow: "hidden"
                });
                A(E.slides).eq(ST).children(E.item).css({
                    position: "relative",
                    width: A(E.parent + " " + E.views).width() + "px",
                    height: A(E.parent + " " + E.views).height() + "px",
                    "float": "left"
                });
                A(E.slides).css({
                    marginLeft: "-" + (F * A(E.slides).find(":first-child").width() + "px")
                }
                )
            };
            C();
            A(window).resize(function() { C() });
        }

        var TC = function() { // Tab change
            CT = AT.eq(ST);                                             // Current Tab
            CV = AV.eq(ST);                                             // Current View
            CV.css("marginLeft", "0");                                  // Reset position of Current view
            B = CV.find(E.item).length;                                 // Length of current tab
            F = 0;

            // Set the tab selection
            //AT.eq(PST).find("h2").removeClass("cufonBold").addClass("cufonLight");
            AT.removeClass("maintabselected").addClass("maintabnormal");
            CT.removeClass("maintabnormal").addClass("maintabselected");
            //CT.find("h2").removeClass("cufonLight").addClass("cufonBold");

            Cufon.replace('h2.cufonLight', { fontFamily: 'Archer Light' });  // Archer Extra Light
            Cufon.replace('h2.cufonLightHover', { fontFamily: 'Archer Light', hover: true });
            //Cufon.replace('h2.cufonBold', { fontFamily: 'Archer Bold'});

            // Hide all views
            AV.hide();
            // Show current view
            CV.show();
            // Initialize
            Init();
        }

        TC();

        // Hook up the tab-clicks
        A(AT).each(function(I) {
            var index = I;
            A(this).click(function() {
                PST = ST;
                ST = index;
                TC();
            });
        });

        A(E.parent + " .jTabFlowPrev").click(function() {
            if (F > 0) { F-- } else { F = B - 1 }
            A(CV).find(E.item).removeClass("jTabFlowSelected");
            A(E.pageControl + " li").removeClass("selected");

            A(CV).animate({ marginLeft: "-" + (F * A(CV).find(":first-child").width() + "px") }, E.duration);

            A(CV).find(E.item).eq(F).addClass("jTabFlowSelected")
            A(E.pageControl + " li").eq(F).addClass("selected");
        });
        A(E.parent + " .jTabFlowNext").click(function() {
            if (F < B - 1) { F++ } else { F = 0 }
            A(CV).find(E.item).removeClass("jTabFlowSelected");
            A(E.pageControl + " li").removeClass("selected");

            A(CV).animate({ marginLeft: "-" + (F * A(CV).find(":first-child").width() + "px") }, E.duration);

            A(CV).find(E.item).eq(F).addClass("jTabFlowSelected")
            A(E.pageControl + " li").eq(F).addClass("selected");
        });
        
        
        var mouseIsOver = false;
        A(E.parent).hover(function() {
            mouseIsOver = true;
        }, function() {
            mouseIsOver = false;
        });
        var handler = function() {
            if (mouseIsOver) return;
            if (F < B - 1) { F++ } else { F = 0 }
            A(CV).find(E.item).removeClass("jTabFlowSelected");
            A(E.pageControl + " li").removeClass("selected");

            A(CV).animate({ marginLeft: "-" + (F * A(CV).find(":first-child").width() + "px") }, E.duration);

            A(CV).find(E.item).eq(F).addClass("jTabFlowSelected")
            A(E.pageControl + " li").eq(F).addClass("selected");
        }
        if (E.autoplay == "true") {
            setInterval(handler, E.interval * 1000);
        }

    };
    A.fn.jTabFlow.defaults = { easing: "swing", duration: 400, width: "100%", item: "tabItem" }
})(jQuery);