$(document).ready(function(){
    $("body").addClass("jsOn");
    LIM.homeFeature('body.pageHome #feature',1500);
    LIM.shareBox('#shareBox');
    LIM.newsEventsTabs('#newsEvents h2');
    LIM.vCenter('.f_layout1, .f_layout1b', '.content');
    LIM.vCenter('.f_landingB, .f_layout2, .f_layout3', '.left');
    LIM.vCenter('.f_video', '.right');
    LIM.avPlayer('.videoPlayer', 'video');
}); // Bye-bye jQuery!
var LIM = {
    //  Homepage feature area
    homeFeature : function(el,timer) {
        var speed = 700;     //  Speed of animation
        var distance = 674;  //  Width of item
        var obj = $(el);
        var slider = obj.find('.slider');
        var startPos = parseInt(slider.css('left'));
        //  Create previous & next buttons
        obj.prepend('<a class="btnArrow prev" href="#">Previous</a>');
        obj.append('<a class="btnArrow next" href="#">Next</a>');
        slider.find('.item:last').clone().prependTo(slider);
        slider.find('.item:last').remove();
        var dIphone  = 'iphone';
        var dIpod    = 'ipod';
        var dAndroid = 'android';
        var uagent = navigator.userAgent.toLowerCase();
        if( uagent.search(dIphone) > -1 || uagent.search(dIpod) > -1 || uagent.search(dAndroid) > -1 ) {
            var mobile = true;
        }
        if(mobile) {
            if( uagent.search(dIphone) > -1 || uagent.search(dIpod) > -1 ) {
                $(el).find('video').removeAttr('poster');
            }
            $(el).find('video, .player').hide();
            $(el).find('.item:eq(1) video, .item:eq(1) .player').show();
        }
        //  Bind actions to prev/next button click
        obj.find('.btnArrow').bind('click', function(event) {
            event.preventDefault();
            if(!mobile) {
                $(el).find('video').hide();
                $(el).find('.poster').show();
            }
            if( !slider.is(':animated') ){
                if( $(this).hasClass('next') == true ) {
                    animateSlides('first','-','next');
                } else if( $(this).hasClass('prev') == true ) {
                    animateSlides('last','+','prev');
                }
            }
        });
        //  Only remove focus on mouseup (keeps keyboard navigation intact)
        obj.find('.btnArrow').bind('mouseup', function() {$(this).blur();});
        //  Slide animation
        function animateSlides(toMove,direction,button) {
            var newItem = slider.find('.item:'+toMove);
            var allVids = slider.find('video');
            for (var i=0; i<allVids.length; i++) {
                if(document.createElement('video').canPlayType) {
                    allVids[i].pause();
                    $(el).find('.btnPlay').addClass('paused');
                }
                slider.find('.item .right').fadeIn(750);
            }
            var video  = document.createElement('video');
            if(video.canPlayType) {
                var canPlayVideo = ( video.canPlayType('video/webm') !== '' || video.canPlayType('video/mp4') !== '' );
            } else {
                var canPlayVideo = false;
            }
            if(button == 'prev'){
                newItem.clone().prependTo(slider);
                slider.css('left', startPos-distance);
                if(canPlayVideo == true) {
                    if( newItem.find('video').length > 0 ){
                        slider.find('.item:first .right').show();
                        LIM.avPlayer(slider.find('.item:first .videoPlayer'), 'video');
                        slider.find('.item:first .avP_scrubberBar').css('width', '0')
                    }
                } else {
                    var newTile = slider.find('.item:first');
                    if( newTile.hasClass('f_video') == true ){
                        LIM.fallback(newTile);
                    }
                }
            }
            slider.animate({
                left: direction+'='+distance
            }, speed, function() {
                bulletSwitch(direction);
                if(button == 'next'){
                    newItem.clone().appendTo(slider);
                    slider.css('left',startPos);
                    if(canPlayVideo == true) {
                        if( newItem.find('video').length > 0 ){
                            slider.find('.item:last .right').show();
                            LIM.avPlayer(slider.find('.item:last .videoPlayer'), 'video');
                            slider.find('.item:last .avP_scrubberBar').css('width', '0')
                        }
                    } else {
                        var newTile = slider.find('.item:last');
                        if( newTile.hasClass('f_video') == true ){
                            LIM.fallback(newTile);
                        }
                    }
                    bulletSwitch('next');
                }
                newItem.remove();
                if( slider.find('.item:last video').length > 0 ){
                    slider.find('.item:last .right').show();
                }
                if(mobile) {
                    $(el).find('video, .player').hide();
                    $(el).find('.item:eq(1) video, .item:eq(1) .player').show();
                }
            });
        }
        //  Bullet navigation
        obj.append('<ul class="sliderNav"></ul>');
        var sliderNav = obj.find('.sliderNav');
        var items = slider.find('.item');
        for (var i=0; i<items.length; i++) {
            var c = items[i];
            $(c).attr('id', 'ftItem'+i);
            sliderNav.append('<li><a class="ftItem'+ i +'" href="#">&bull;</a></li>');
        }
        sliderNav.find('li:first').addClass('active');
        function bulletSwitch(dir) {
            var active = sliderNav.find('.active');
            var btnPrev = active.prev('li');
            var btnNext = active.next('li');
            switch (dir) {
                case '+':
                    active.removeClass('active');
                    if(btnPrev.html()){
                        btnPrev.addClass('active');
                    } else {
                        sliderNav.find('li:last').addClass('active');
                    }
                    break;
                case '-':
                    active.removeClass('active');
                    if(btnNext.html()){
                        btnNext.addClass('active');
                    } else {
                        sliderNav.find('li:first').addClass('active');
                    }
                    break;
            };
        }
        sliderNav.find('a').bind('click', function(event) {
            event.preventDefault();
//            alert( $(this).attr('class') )
        });
    },
    vCenter : function(el,child) {
        $(el).each(function() {
            var topMargin = ( $(this).height() - $(this).find(child).height() ) / 2;
            $(this).find(child).css('margin-top', topMargin)
        });    
    },
    //    ShareBox Hover Control
    shareBox : function(el) {
        $(el).hover (
            function() {
                $(this).addClass("over");
            },
            function() {
                $(this).removeClass("over");
            }
        );
    },
    //    News & Events Hover / Layer Toggle
    newsEventsTabs : function(el) {
        $(el).hover (
            function() {
                $(this).addClass("over");
            },
            function() {
                $(this).removeClass("over");
            }
        );
        $(el).click(function(){
            $("#newsEvents *").removeClass("active")
            $(this).addClass("active")
            $(this).next(".layer").addClass("active")
        })
    },
    avPlayer : function(el, type) {
        //  TEMPORARY FIREFOX FIX ========================================================================
        //  To launch with flash player in firefox while we solve encoding issues ========================
        //  also remove firefox!=true below ==============================================================
        var uagent = navigator.userAgent.toLowerCase();
        if( uagent.search('firefox') > -1 ) {var firefox = true;}
        //  Check for tag support
        var tagSupportQuery = document.createElement(type);
        if(tagSupportQuery.canPlayType && firefox!=true) {
            //  If the browser supports the tag, create our player
            var video  = $(el).find(type)[0];
            //  Check to see if the browser supports webm or mp4
            var canPlayVideo = ( video.canPlayType('video/webm') !== '' || video.canPlayType('video/mp4') !== '' );
            if(canPlayVideo == true) {
                //  webm or mp4? Okay cool.
                createPlayer(type);
            } else {
                $(el).find('video, .player').hide();
                setTimeout(function(){
                    LIM.fallback('.f_video');
                },500);
            }
        } else {
            $(el).find('.player').hide();
            setTimeout(function(){
                LIM.fallback('.f_video');
            },500);
        }
        //  Make the player
        function createPlayer(type){
                var dIphone  = 'iphone';
                var dIpod    = 'ipod';
                var dAndroid = 'android';
                var uagent = navigator.userAgent.toLowerCase();
                if( uagent.search(dIphone) > -1 || uagent.search(dIpod) > -1 || uagent.search(dAndroid) > -1 ) {
                    var mobile = true;
                }
            $(el).each(function() {
                var player = $(this);
                var nowPlaying      = player.find('.nowPlaying');
                var currentItem     = nowPlaying.find(type);
                var trackClass      = 'track';                          //  Class of audio or video tag container
                var timerToggle     = player.find('.avP_timer .toggle');
                var scrubber        = player.find('.avP_scrubber');
                var scrubberBar     = player.find('.avP_scrubberBar');
                var volumeControl   = player.find('.avP_volumeControl');
                var volumeBar       = player.find('.avP_volumeBar');
                var btnPlay         = player.find('.btnPlay');
                var btnPlayLayer    = player.parent().find('.right .btnPlay');
                var btnMute         = player.find('.avP_volumeMute');
                //  Setup
                var currentTrack;
                getTrack();
                setVolume(0.75);
//    COMMON FUNCTIONS
                //  Get the next track to play
                function getTrack() {
                    var track = currentItem.html();
                    currentTrack = nowPlaying.find(type)[0];
                    if( currentTrack == undefined ){
                        currentTrack = 0;
                    }
                };
                //  When track reaches the end
                function trackEnd(endHow){
                    $(currentTrack).bind('ended', function(event){
                        currentTrack.currentTime = 0;
                        scrubberBar.css('width', 0);
                        currentTrack.pause();
                        player.parent().find('.right').fadeIn(750);
                    });
                };
                if(!mobile){
                    $(currentTrack).hide();
                    var img = $(nowPlaying).find('.poster').attr('src');
                    if( !img ){
                        var poster = $(currentTrack).attr('poster');
                        $(nowPlaying).prepend('<img class="poster" src="' + poster + '" width="479" height="273" alt="">');
                    }
                }
                $(currentTrack).bind('click', function() {
                    $(btnPlay).trigger('click');
                });
//    BUTTONS
                //  Play buttons
                btnPlayLayer.bind('click', function(event) {
                    event.preventDefault();
                    $(btnPlay).trigger('click');
                });
                btnPlay.bind('click', function(event){
//                    event.preventDefault();
                    if(currentTrack.paused) {
                        //  When paused
                        currentTrack.play();
                        player.parent().find('.right').fadeOut(750);
                        trackEnd();
                    } else if(currentTrack == 0) {
                        player.parent().find('.right').fadeOut(750);
                    } else {
                        //  When playing
                        currentTrack.pause();
                    }
                    btnPlayClass();
                    if(!mobile){
                        $(nowPlaying).find('.poster').hide();
                        $(currentTrack).show();
                    }
                    return false;
                });
                function btnPlayClass(){
                    if( btnPlay.hasClass('paused') != true ) {
                        btnPlay.addClass('paused');
                    } else {
                        btnPlay.removeClass('paused');
                    }
                };
                //  Get click location relative to the target element
                function getClickLocation(event, target) {
                    var offset = 0;
                    if(!event) {
                        //  IE
                        event = window.event;
                        offset = event.offsetX;
                    } else {
                        //  Everything else
                        var volBar = event.target;
                        var leftEdge = 0;
                        while (volBar.offsetParent) {
                             leftEdge += volBar.offsetLeft;
                             volBar = volBar.offsetParent;
                         }
                        offset = event.pageX - leftEdge;
                    }
                    var location = offset / event.currentTarget.offsetWidth;
                    return location;
                };
//    SCRUBBER
                //  Animate the scrubber as the song is playing
                function scrubberUpdate() {
                    $(currentTrack).bind('timeupdate', function(){
                        //  Figure out how wide the scrubber bar should be now
                        var fraction = currentTrack.currentTime / currentTrack.duration;
                        var percent = ( fraction * 100 );
                        scrubberBar.css('width', percent + '%');
                    });
                };
                scrubberUpdate();
                scrubber.bind('click', function(event){
                    var percent = getClickLocation(event, $(this));
                    var trackSeek = percent * currentTrack.duration;
                    if( !currentTrack.error || !currentTrack.duration == 0 || !currentTrack.duration == NaN ){
                        currentTrack.currentTime = trackSeek;
                    }
                });
//    VOLUME
                volumeControl.bind('click', function(event){
                    //  Get the location of the click
                    var volume = getClickLocation(event, $(this));
                    setVolume(volume);
                    updateVolumeSize();
                    btnMute.removeClass('muted');
                });
                //  Set the new volume level
                function setVolume(newVolume, newMute) {
                    currentTrack.muted = ( newMute == true ) ? true : false;
                    currentTrack.volume = newVolume;
                    updateVolumeSize();
                };
                //  Change the volume bar to reflect the current volume
                function updateVolumeSize() {
                    var volume = currentTrack.volume;
                    var barWidth = volume*100;
                    volumeBar.css('width', barWidth + '%');
                };
                //  Mute or unmute
                btnMute.bind('click', function(){
                    currentTrack.muted = ( currentTrack.muted != true ) ? true : false;
                    btnMute.toggleClass('muted');
                });
            });
        }  //  End of tagSupportQuery
    }, //  End avPlayer
    fallback : function(item) {
        $(item).each(function() {
            var obj = $(this);
            if(document.createElement('video').canPlayType) {
                left = obj.find('.left')
                obj.find('video .fallback').clone().appendTo(left);
                obj.find('video').remove();
            }
            obj.append('<span class="target"></span>');
            var target = obj.find('.target');
            var thisPlayer = obj.find('.left object').attr('id');
            obj.find('.btnPlay, .target').bind('click', function(){
                obj.find('.right').fadeOut(750);
                $(target).hide();
                document.getElementById(thisPlayer).playVideo();
            });
            $('.btnArrow').bind('click', function() {
                obj.find('.right').fadeIn(750);
                $(target).show();
                try {document.getElementById(thisPlayer).pauseVideo();} catch(err) {}
            });
        })            
    }
}
