// On initialization, store Bits on the Run players in an array for later use.
var bitsPlayers = [];
function playerReady(obj) {
    bitsPlayers.push(document.getElementById(obj['id']));
};

HansonDodge.Home = {
    featuresContainer: null,
    features: null,
    overlays: null,
    thumbnails: null,
    slideInner: null,
    canShiftFeatures: true,
    currentFeatureIndex: 0,
    specialFeature: '<object type="application/x-shockwave-flash" width="300" height="400" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="intl_lang=en-us&photo_secret=d6a34896a0&photo_id=2867811449"></param> <param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param> <param name="bgcolor" value="#000000"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&photo_secret=d6a34896a0&photo_id=2867811449" height="400" width="300"></embed></object>',

    init: function () {
        var featuresContainer = HansonDodge.Home.featuresContainer = jQuery('#features');
        var slideInner = HansonDodge.Home.slideInner = jQuery('#slider>div.inner');
        var features = HansonDodge.Home.features = featuresContainer.find('div.feature');
        var overlays = HansonDodge.Home.overlays = features.find('span.overlay');
        var thumbnails = HansonDodge.Home.thumbnails = featuresContainer.find('div.thumbs ul li a');

        thumbnails.click(HansonDodge.Home.onThumbnailClick);
        overlays.eq(0).css('opacity', 0);
        overlays.css('display', 'block').not(':first').css('opacity', 0.5);

        features.find('div.caption').hide();

        features.eq(0).hover(HansonDodge.Home.onFeatureOver, HansonDodge.Home.onFeatureOut);

        featuresContainer.find('a.btnNext').click(HansonDodge.Home.onBtnNextClick);
        featuresContainer.find('a.btnPrev').click(HansonDodge.Home.onBtnPrevClick);

        if (showFeature = HansonDodge.Home.getStartingFeature()) {
            thumbnails.each(function () {
                var self = jQuery(this);
                if (self.attr('href').indexOf(showFeature.id) != -1) {
                    self.click();
                    if (showFeature.hasOwnProperty('autoActivate') && showFeature.autoActivate) {
                        //console.log('autoActivate');
                        //console.log(showFeature.id);
                        jQuery('#' + showFeature.id).find('a').eq(0).click();
                    }
                }
            });
        }
    },

    getStartingFeature: function () {
        var result = {};
        var queryVars = HansonDodge.Home.getHashQueryVars();
        if (queryVars.hasOwnProperty('showFeature')) {
            result['id'] = queryVars.showFeature;
            if (queryVars.hasOwnProperty('autoActivate')) {
                result['autoActivate'] = queryVars.autoActivate;
            }
            return result;
        }
        return false;
    },

    getHashQueryVars: function () {
        var queryVars = {};
        if (location.hash.indexOf('?') != -1) {
            var hashSplit = location.hash.split('?')[1].split('&');

            for (var i = 0; i < hashSplit.length; i++) {
                var pair = hashSplit[i].split('=');
                queryVars[pair[0]] = pair[1];
            }
        }
        return queryVars;
    },

    bindFeatureHoverState: function (index) {
        HansonDodge.Home.features.eq(index).hover(HansonDodge.Home.onFeatureOver, HansonDodge.Home.onFeatureOut);
    },

    unbindFeatureHoverState: function (index) {
        var feature = HansonDodge.Home.features.eq(index);
        feature.unbind('mouseenter', HansonDodge.Home.onFeatureOver);
        feature.unbind('mouseleave', HansonDodge.Home.onFeatureOut);
    },

    onBtnNextClick: function (e) {
        var canShiftFeatures = HansonDodge.Home.canShiftFeatures;
        if (canShiftFeatures) {
            HansonDodge.Home.stopVideoPlayers();
            HansonDodge.Home.canShiftFeatures = false;
            HansonDodge.Home.unbindFeatureHoverState(HansonDodge.Home.currentFeatureIndex);
            var x = HansonDodge.Home.slideInner.position().left;
            var nextFeatureIndex = (HansonDodge.Home.currentFeatureIndex + 1 < HansonDodge.Home.features.length) ? ++HansonDodge.Home.currentFeatureIndex : 0;
            var nextFeature = HansonDodge.Home.features.eq(nextFeatureIndex);
            var nextOverlay = HansonDodge.Home.overlays.eq(nextFeatureIndex);
            if (nextFeatureIndex > 0) {
                HansonDodge.Home.slideInner.animate({
                    left: x - 790
                }, 500, null, HansonDodge.Home.onFeatureShiftComplete);

            } else {
                HansonDodge.Home.slideInner.animate({
                    left: 0
                }, 1000, null, HansonDodge.Home.onFeatureShiftComplete);
            }
            HansonDodge.Home.features.unbind('click');
            HansonDodge.Home.features.find('div.caption').slideUp();
            HansonDodge.Home.overlays.not(nextOverlay).css('z-index', 9).animate({ opacity: 0.5 }, 400);
            jQuery(nextOverlay).animate({ opacity: 0 }, 400, null, function () { nextOverlay.css('z-index', 0); });
            currentFeature = nextFeature;
            HansonDodge.Home.currentFeatureIndex = nextFeatureIndex;
        }
        return false;
    },

    onBtnPrevClick: function (e) {
        var canShiftFeatures = HansonDodge.Home.canShiftFeatures;
        if (canShiftFeatures) {
            HansonDodge.Home.stopVideoPlayers();
            HansonDodge.Home.canShiftFeatures = false;
            HansonDodge.Home.unbindFeatureHoverState(HansonDodge.Home.currentFeatureIndex);
            var x = HansonDodge.Home.slideInner.position().left;
            var prevFeatureIndex = (HansonDodge.Home.currentFeatureIndex - 1 >= 0) ? --HansonDodge.Home.currentFeatureIndex : (HansonDodge.Home.features.length - 1);
            var prevFeature = HansonDodge.Home.features.eq(prevFeatureIndex);
            var prevOverlay = HansonDodge.Home.overlays.eq(prevFeatureIndex);
            if (prevFeatureIndex < HansonDodge.Home.features.length - 1) {
                HansonDodge.Home.slideInner.animate({
                    left: x + 790
                }, 500, null, HansonDodge.Home.onFeatureShiftComplete);

            } else {
                HansonDodge.Home.slideInner.animate({
                    left: -(790 * (HansonDodge.Home.features.length - 1))
                }, 1000, null, HansonDodge.Home.onFeatureShiftComplete);
            }
            HansonDodge.Home.features.unbind('click');
            HansonDodge.Home.features.find('div.caption').slideUp();
            HansonDodge.Home.overlays.not(prevOverlay).css('z-index', 9).animate({ opacity: 0.5 }, 400);
            prevOverlay.animate({ opacity: 0 }, 400, null, function () { prevOverlay.css('z-index', 0); });
            currentFeature = prevFeature;
            HansonDodge.Home.currentFeatureIndex = prevFeatureIndex;
        }
        return false;
    },

    setCurrentFeature: function (featureId) {
        var nextFeatureIndex;
        var features = HansonDodge.Home.features;
        var feature = jQuery('#' + featureId);
        var nextOverlay;
        var i;
        for (i = 0; i < features.length; i++) {
            if (features.eq(i).attr('id') == featureId) {
                HansonDodge.Home.currentFeatureIndex = i;
                nextOverlay = HansonDodge.Home.overlays.eq(i);
                break;
            }
        }
        HansonDodge.Home.slideInner.animate({
            left: -(feature.position().left)
        }, 400, null, HansonDodge.Home.onFeatureShiftComplete);
        HansonDodge.Home.overlays.not(nextOverlay).css('z-index', 9).animate({ opacity: 0.5 }, 400);
        nextOverlay.animate({ opacity: 0 }, 400, null, function () { nextOverlay.css('z-index', 0); });
    },

    setCurrentThumbnail: function () {
        var thumbnails = HansonDodge.Home.thumbnails;
        thumbnails.removeClass('current');
        thumbnails.eq(HansonDodge.Home.currentFeatureIndex).addClass('current')
    },

    onFeatureOver: function () {
        var self = jQuery(this);
        var caption = self.find('div.caption');
        caption.stop().fadeTo(400, 1);
    },

    onFeatureOut: function () {
        var self = jQuery(this);
        var caption = self.find('div.caption');
        caption.stop().fadeTo(400, 0);
    },

    onThumbnailClick: function (e) {
        if (e.shiftKey) {
            HansonDodge.Home.features.eq(HansonDodge.Home.currentFeatureIndex).html(HansonDodge.Home.specialFeature);
            return false;
        }
        if (HansonDodge.Home.canShiftFeatures) {
            HansonDodge.Home.stopVideoPlayers();
            HansonDodge.Home.canShiftFeatures = false;
            var featureId = jQuery(this).attr('href').split('#')[1];
            HansonDodge.Home.setCurrentFeature(featureId);
        }
        return false;
    },

    onFeatureShiftComplete: function () {
        HansonDodge.Home.bindFeatureHoverState(HansonDodge.Home.currentFeatureIndex);
        HansonDodge.Home.canShiftFeatures = true;
        HansonDodge.Home.setCurrentThumbnail();
    },

    stopVideoPlayers: function () {
        for (var i = 0; i < bitsPlayers.length; i++) {
            var player = bitsPlayers[i];
            player.sendEvent("PLAY", "false");
        }
    }
}

jQuery(HansonDodge.Home.init);
