var RipenSite = function() {
    this._aryNavListItems = [];
    this._aryNavImages = [];
    this._intNavItemToChangeTo = 0;
    this._blnChangingNav = false;
    this._intCurrentNavItem = 0;
    this._aryPortfolioItems = [];
    this._aryPortfolioTextItems = [];
    this._arySections = [];
    this._intCurrentPortfolioItem = -1;
    this._intCurrentPortfolioPage = 0;
    this._intPortfolioTrackWidth = 690;
    this._intPortfolioPageDelta = 745;
    this._intPortfolioPerPage = 5;
    this._intTotalPortfolioPages;
    this.Animate = {
        FadeSpeed: 500
        , FadeOutOpacity: 0.75
    };
};

RipenSite.prototype = {

    init: function() {
        for (var i = 0, l = this._aryNavListItems.length; i < l; i++) {
            $("#" + this._aryNavListItems[i]).bind("click", { intItem: i }, $.proxy(this, "changeNavItem"));
        }
        $(".portfolioItem").each(function(i) {
            $RS._aryPortfolioItems[i] = $(this).context.id;
        });
        $(".portfolioText").each(function(i) {
            $RS._aryPortfolioTextItems[i] = $(this).context.id;
            $(this).hide();
            $(this).removeClass("invisible");
        });
        for (i = 0, l = this._aryPortfolioItems.length; i < l; i++) {
            $("#" + this._aryPortfolioItems[i]).bind("click", { intItem: i }, $.proxy(this, "changePortfolioItem"));
            $("#" + this._aryPortfolioItems[i]).bind("mouseover", { intItem: i }, $.proxy(this, "mouseOverPortfolioItem"));
            $("#" + this._aryPortfolioItems[i]).bind("mouseout", { intItem: i }, $.proxy(this, "mouseOutPortfolioItem"));
        }
        this._intTotalPortfolioPages = Math.ceil((this._aryPortfolioItems.length) / this._intPortfolioPerPage);
        $("#divPortfolioItems").css({ width: (this._intPortfolioPageDelta * this._intTotalPortfolioPages) + "px" });
        $("#divPortfolioLeft").bind("click", { intDelta: -1 }, $.proxy(this, "changePortfolioPage"));
        $("#divPortfolioRight").bind("click", { intDelta: 1 }, $.proxy(this, "changePortfolioPage"));
        $("#divPortfolioTrack").bind("click", null, $.proxy(this, "clickPortfolioTrack"));
        this.showPortfolioPage();
    },

    dispose: function() {
        for (var i = 0, l = this._aryNavListItems.length; i < l; i++) {
            $("#" + this._aryNavListItems[i]).unbind();
        }
        for (i = 0, l = this._aryPortfolioItems.length; i < l; i++) {
            $("#" + this._aryPortfolioItems[i]).unbind();
        }
        $("#divPortfolioLeft").unbind();
        $("#divPortfolioRight").unbind();
        $("#divPortfolioTrack").unbind();
        this._aryNavListItems = null;
        this._aryNavImages = null;
        this._aryPortfolioItems = null;
        this._aryPortfolioTextItems = null;
        this._arySections = null;
        this._intCurrentPortfolioItem = null;
        this._intCurrentPortfolioPage = null;
        this._intPortfolioTrackWidth = null;
        this._intPortfolioPageDelta = null;
        this._intPortfolioPerPage = null;
        this._intTotalPortfolioPages = null;
        this.Animate = null;
    },

    changeNavItem: function(args) {
        var intItem = args.data.intItem;
        if (intItem == this._intCurrentNavItem) return;
        if (this._blnChangingNav) return;
        this._blnChangingNav = true;
        for (var i = 0, l = this._aryNavListItems.length; i < l; i++) {
            var li = $("#" + this._aryNavListItems[i]);
            var img = $("#" + this._aryNavImages[i]);
            if (i == intItem) {
                li.addClass("topNavSelected");
                img.addClass("topNavSelected");
            } else {
                li.removeClass("topNavSelected");
                img.removeClass("topNavSelected");
            }
        }
        this._intNavItemToChangeTo = intItem;
        $("#" + this._arySections[this._intCurrentNavItem]).fadeOut(this.Animate.FadeSpeed, $.proxy(this, "finishChangeNavItem"));
        $("#" + this._arySections[intItem]).removeClass("invisible");
        $("#" + this._arySections[intItem]).fadeOut(0);
    },

    finishChangeNavItem: function() {
        $("#" + this._arySections[this._intNavItemToChangeTo]).fadeIn(this.Animate.FadeSpeed);
        this._intCurrentNavItem = this._intNavItemToChangeTo;
        this._blnChangingNav = false;
    },

    changePortfolioItem: function(args) {
        var intItem = args.data.intItem;
        for (var i = 0, l = this._aryPortfolioItems.length; i < l; i++) {
            if (i == intItem) {
                $("#" + this._aryPortfolioItems[i]).addClass("portfolioItemSelected");
                $("#" + this._aryPortfolioItems[i]).fadeTo(this.Animate.FadeSpeed, 1);
            } else {
                $("#" + this._aryPortfolioItems[i]).removeClass("portfolioItemSelected");
                $("#" + this._aryPortfolioItems[i]).fadeTo(this.Animate.FadeSpeed, this.Animate.FadeOutOpacity);
            }
        }
        if (intItem != this._intCurrentPortfolioItem) {
            $("#" + this._aryPortfolioTextItems[this._intCurrentPortfolioItem]).fadeOut(this.Animate.FadeSpeed);
            $("#" + this._aryPortfolioTextItems[intItem]).fadeIn(this.Animate.FadeSpeed);
        }
        this._intCurrentPortfolioItem = intItem;
    },
    
    mouseOverPortfolioItem: function(args) {
        var intItem = args.data.intItem;
        if (intItem != this._intCurrentPortfolioItem) {
            $("#" + this._aryPortfolioItems[intItem]).stop();
            $("#" + this._aryPortfolioItems[intItem]).fadeTo(this.Animate.FadeSpeed, 1);
        }
    },
    
    mouseOutPortfolioItem: function(args) {
        var intItem = args.data.intItem;
        if (intItem != this._intCurrentPortfolioItem) {
            $("#" + this._aryPortfolioItems[intItem]).stop();
            $("#" + this._aryPortfolioItems[intItem]).fadeTo(this.Animate.FadeSpeed, this.Animate.FadeOutOpacity);
        }
    },

    changePortfolioPage: function(args) {
        var intDelta = args.data.intDelta;
        this._intCurrentPortfolioPage += intDelta;
        if (this._intCurrentPortfolioPage >= this._intTotalPortfolioPages) this._intCurrentPortfolioPage = this._intTotalPortfolioPages - 1;
        if (this._intCurrentPortfolioPage < 0) this._intCurrentPortfolioPage = 0;
        this.showPortfolioPage();
        var intLeft = (this._intCurrentPortfolioPage * this._intPortfolioPageDelta * -1);
        $("#divPortfolioItems").animate({ left: intLeft + "px" });
    },

    showPortfolioPage: function() {
        var objTrack = this.calculatePortfolioTrack();
        $("#divPortfolioNavMarker").animate({ left: objTrack.Left + "px", width: objTrack.Width + "px" });
        this.changePortfolioItem({ data: { intItem: (this._intCurrentPortfolioPage * this._intPortfolioPerPage)} });
    },

    calculatePortfolioTrack: function() {
        var obj = { Width: 0, Left: 0 };
        obj.Width = Math.floor(this._intPortfolioTrackWidth / this._intTotalPortfolioPages);
        obj.Left = this._intCurrentPortfolioPage * obj.Width;
        return obj;
    },

    clickPortfolioTrack: function(e) {
        var intClickedX = e.layerX;
        var objTrack = this.calculatePortfolioTrack();
        if (intClickedX < objTrack.Left) this.changePortfolioPage({ data: { intDelta: -1} });
        if (intClickedX > (objTrack.Left + objTrack.Width)) this.changePortfolioPage({ data: { intDelta: 1} });
    }

};
