﻿var width = '256';
var height = '164';
var scrollingPanel;

$(document).ready(function() {
    var gallery = $('#image_wrap');
    if (gallery.length > 0 && gallery.find('.no-media').length == 0) {
        $("body").append('<div id="jwbox_background">&nbsp;</div>');
        $(window).resize(function() {
         $.jwbox.center();
         $('#jwbox_background').css('height', $(window).height() * 3 + 'px');
          });
        $("a[rev='video'], a[rev='videoadvert']").append($('<span class="overlay">&nbsp;</span>'));

        var render = true;

        var scrollPanel = $("#infinite");
        var scrollItems = $("#infinite img");
        if (scrollItems.length > 3) {
            scrollingPanel = scrollPanel
			.scrollable({ size: 3, loop: true, clickable: true, speed: 1 })
			.circular()
			.autoscroll({ interval: 10000, autoplay: false, autopause: true, api: true })
			.onSeek(handleScroll);
            render = false;
        }
        initGallery($("#infinite div.items a"), render);
        if (render) {
            var media = $("#infinite div.items a.active");
            if (media.length == 0) {
                media = $('#infinite div.items a');
            }
            RenderMedia($(media.not('.cloned')[0]), true);
        }
        else {
            scrollingPanel.play();
        }
    }
});

var mediaPlaying = false;
function initGallery(media, render) {
    media.click(function(event) {
        event.preventDefault();
        if (render && !mediaPlaying) {
            RenderMedia($(this), false);
        }
    });
}

function RenderMedia(mediaElement, init) {
    if (mediaElement && mediaElement.length > 0) {

        var mediaType = mediaElement.attr("rev");
        //remove previous image link 
        $('#image_wrap a').remove();
        //hide vid objects
        $('#image_wrap object').css('display', 'none').css('visibility', '');

        var linkUrl = mediaElement.attr('href');
        var linkText = mediaElement.find('img').attr('alt');
        var mediaUrl = mediaElement.attr('rel');
        var mediaId = mediaElement.attr('mid');
        var container = $('#image_wrap');
        
        if (mediaType) {
            mediaType = mediaType.toLowerCase();
            switch (mediaType) {
                case "image":
                    {
                        setupImage(container, linkUrl, linkText, mediaUrl, false, mediaId, mediaType);
                        break;
                    }
                case "imageadvert":
                    {
                        setupImage(container, linkUrl, linkText, mediaUrl, true, mediaId, mediaType);
                        break;
                    }
                case "video":
                    {
                        setupVideo(container, linkUrl, linkText, mediaUrl, false, mediaId);
                        isVideo = true;
                        break;
                    }
                case "videoadvert":
                    {
                        setupVideo(container, linkUrl, linkText, mediaUrl, true, mediaId);
                        isVideo = true;
                        break;
                    }
                case "flash":
                    {
                        flPlayerLoc = mediaElement.attr("href");

                        if (showVideo(container, mediaId)) {
                            var flashvars = {};
                            var params = {};
                            var attributes = {};
                            showSwf(flashvars, params, attributes);
                        }
                        setZoom(null);
                        setLink(null, null);
                        break;
                    }
            }
            $('.zoom').click(function(event) {
                event.preventDefault();
                showZoom(mediaId, mediaUrl, mediaType, linkUrl, linkText);
            });
        }
    }
}

var showVideo = function(container, vid) {
    if ($('object#' + vid).length == 0) {
        var vidElement = $('<div>&nbsp</div>').attr('id', vid);
        container.append(vidElement);
        return true; //new div for vid created
    }
    else {
        //show vid object
        $('object#' + vid).css('display', 'block').css('visibility', 'visible');
        return false;
    }
}
var setupVideo = function(container, linkUrl, linkText, mediaUrl, isAdvert, mediaId) {
    var vid = 'vid_' + mediaId;
    if (showVideo(container, vid)) {
        createPlayer(width, height, vid, mediaUrl);
    }
    setControls(linkUrl, linkText, mediaUrl, isAdvert);
}

var setupImage = function(container, linkUrl, linkText, mediaUrl, isAdvert, mediaId, mediaType) {
    var target = isUrlLocal(linkUrl) ? '' : ' target="_blank"';
    var image = $('<img />').attr('src', mediaUrl).attr('alt', linkText);
    var anchor = createAnchor(isAdvert ? linkUrl : mediaUrl, image, linkText, 'window', mediaUrl);
    if (!isAdvert) {
        anchor.click(function(event) {
            event.preventDefault();
            showZoom(mediaId, mediaUrl, mediaType, linkUrl, linkText);
        });
    }
    container.append(anchor);
    setControls(linkUrl, linkText, mediaUrl, isAdvert);
}

var setControls = function(linkUrl, linkText, mediaUrl, isAdvert) {
    var controls = $('.media .control');
    var zoom = setZoom(mediaUrl, linkText);
    var link = setLink(linkUrl, linkText, isAdvert);
    controls.empty();
    controls.append(link).append(zoom);
}

var setZoom = function(mediaUrl, linkText) {
    var title = 'Zoom';
    return mediaUrl ? createAnchor(mediaUrl, title, linkText, 'zoom', mediaUrl) : '';
}

var setLink = function(linkUrl, linkText, isAdvert) {
    return isAdvert && linkUrl ? createAnchor(linkUrl, linkText, linkText, 'link', '') : '';
}

var createAnchor = function(linkUrl, linkText, title, className, rel) {
    return $('<a></a>')
		.attr('class', className)
		.attr('title', title)
		.attr('href', linkUrl)
		.attr('target', isUrlLocal(linkUrl) ? '' : '_blank')
		.attr('rel', rel)
		.append(linkText);
}

var isUrlLocal = function(linkUrl) {
    var hostName = parseUrl(linkUrl).host.toLowerCase();
    return hostName == "" || hostName == window.location.host.toLowerCase();
}

var createPlayer = function(width, height, containerName, mediaUrl) {
    var flashvars = { file: mediaUrl, autostart: "false", image: mediaUrl.replace('.flv', '.jpg'), plugins: "gapro-1" };
    flashvars["gapro.accountid"] = analyticsAccount;
    var params = { allowscriptaccess: "always", menu: "false", scale: "noscale", allowfullscreen: "true", wmode: "opaque" };
    var attributes = { id: containerName, name: containerName };
    showSwf(flashvars, params, attributes, containerName, width, height);
}

var showSwf = function(flashvars, params, attributes, containerName, width, height) {
    swfobject.embedSWF(flPlayerLoc, containerName, width, height, "9.0.0", "expressInstall.swf", flashvars, params, attributes);
}

var handleScroll = function(event, currentIndex) {
    var items = this.getVisibleItems().removeClass('active');
    var newItem = $(items[1]).addClass('active');
    RenderMedia($(newItem[0]));
}

var currentmediaId = '';

var previousMediaId = ''
var previousMediaUrl = '';
var previousMediaType = '';
var previousLinkUrl = '';
var previousLinkText = '';

var nextMediaId = '';
var nextMediaUrl = '';
var nextMediaType = '';
var nextLinkUrl = '';
var nextLinkText = '';

var showZoom = function(mediaId, mediaUrl, mediaType, linkUrl, linkText) {
    if (scrollingPanel) {
        scrollingPanel.stop();
    }
    $('select:visible').addClass('hideDD').css('display', 'none');

    var media = $('.media');
    var jwContainer = media.find('.jwbox');
    if (jwContainer.length == 0) {
        jwContainer = $('<div class="jwbox"><div class="jwbox_hidden"><a class="close" href="#" title="Close">Close</a><div class="jwbox_body"><div class="jwbox_frame"><div class="navigation"></div><div class="jwbox_content">&nbsp;</div><div class="caption"></div></div><div class="jwbox_thumbnails"></div></div></div></div>');
        media.append(jwContainer);

        $('.jwbox_frame .navigation').append($('<ul><li class="previous"><a href="#">Previous</a></li><li class="count"></li><li class="next"><a href="#">Next</a></li></ul>'));

        $('.jwbox_thumbnails').append($('<a class="previous-set" href="#"></a><ul></ul><a class="next-set" href="#"></a>'));

        buildZoomThumbnails(mediaId);

        $('.jwbox_frame .navigation li.previous a').click(function(event) {
            event.preventDefault();
            moveToPrevious();
        });

        $('.jwbox_frame .navigation li.next a').click(function(event) {
            event.preventDefault();
            moveToNext();
        });

        $('.jwbox_thumbnails a.previous-set').click(function(event) {
            event.preventDefault();
            moveThumbnailsDown();
        });

        $('.jwbox_thumbnails a.next-set').click(function(event) {
            event.preventDefault();
            moveThumbnailsUp();
        });

        $("#jwbox_background").click(setToggle);
        $('.jwbox a.close').click(setToggle);
    }

    showZoomContent(mediaId, mediaUrl, mediaType, linkUrl, linkText);
    $.jwbox.toggle(jwContainer);
}

var moveToNext = function() {
    if (nextMediaId != '') {
        showZoomContent(nextMediaId, nextMediaUrl, nextMediaType, nextLinkUrl, nextLinkText);
    }
}
var moveToPrevious = function() {
    if (previousMediaId != '') {
        showZoomContent(previousMediaId, previousMediaUrl, previousMediaType, previousLinkUrl, previousLinkText);
    }
}

var moveThumbnailsTo = function(li) {
    $('.jwbox_thumbnails li:visible').slideUp('fast');
    $('.jwbox_thumbnails li').css('display', 'none');
    var count = 0;
    var firstNo = Math.floor((li.attr('no') -1) / 6) * 6 + 1;
    li = $('.jwbox_thumbnails li[no="' + firstNo + '"]');

    while (li.length > 0 && count < 6) {
        count++;
        li.slideDown('fast');
        li = li.next();
    }
}
var moveThumbnailsUp = function() {
    var items = $('.jwbox_thumbnails li:visible');
    var next = items.last().next();
    if (next.length > 0) {
        var count = 0;
        while (next.length > 0 && count < 6) {
            count++;
            next.css('display', 'block');
            next = next.next();
        }
        items.slideUp('slow');
    }
}

var moveThumbnailsDown = function() {
    var items = $('.jwbox_thumbnails li:visible');
    var prev = items.first().prev();
    if (prev.length > 0) {
        var count = 0;
        while (prev.length > 0 && count < 6) {
            count++;
            prev.slideDown('slow');
            prev = prev.prev();
        }
        items.css('display', 'none');
    }
}

var showZoomContent = function(mediaId, mediaUrl, mediaType, linkUrl, linkText) {
    if (currentmediaId != mediaId) {
        currentmediaId = mediaId;
        $('.jwbox_content a.zoomImgLink').remove();
        $('.jwbox_content img').remove();
        if (mediaType == 'image')
            linkUrl = mediaUrl;
        if (mediaType == 'video' || mediaType == 'videoadvert') {
            var zoomContainerName = 'zoom-vid';
            var zoomContainer = $('<div></div>').attr('id', zoomContainerName);
            $('.jwbox_frame object').remove();
            zoomContainer.insertBefore('.jwbox_content');
            createPlayer(760, 440, zoomContainerName, mediaUrl);
        }
        else if (mediaType == 'image' || mediaType == 'imageadvert') {
            $('.jwbox_frame object').css('display', 'none').css('visibility', '');
            var imgTag = $('<img />').attr('src', mediaUrl).attr('alt', linkText);
            if (linkUrl != '') {
                var anchor = createAnchor(linkUrl, '', linkText, 'zoomImgLink', '');
                anchor.append(imgTag);
                $('.jwbox_content').append(anchor);
            }
            else {
                $('.jwbox_content').append(imgTag);
            }
        } else if (mediaType == 'flash') {
        }
        $('.jwbox_body .caption').empty();
        if (linkText != '' && linkUrl != '') {
            var anchor = createAnchor(linkUrl, linkText, linkText, 'link', '');
            $('.jwbox_body .caption').append(anchor);
        }
        resetPreviousNextMedia(mediaId);
    }
}

var buildZoomThumbnails = function(mediaId) {
    var mediaItems = $('#infinite div.items a').not('.cloned');
    var count = 0;
    mediaItems.each(function() {
        count++;
        var li = $('<li><a href="#"><img /></a></li>').attr('no', count);
        if (count > 6) {
            li.css('display', 'none');
        }
        var thumbnailsContainer = $('.jwbox_thumbnails ul');
        var thisMediaId = $(this).attr('mid');
        var srcImg = $('img', $(this));
        $('img', li).attr('src', srcImg.attr('src')).attr('alt', srcImg.attr('alt')).attr('mid', thisMediaId);

        thumbnailsContainer.append(li);
        var thisLinkText = srcImg.attr('alt');
        var thisMediaUrl = $(this).attr('rel');
        var thisMediaType = $(this).attr('rev');
        var thisLinkUrl = $(this).attr('href');
        $('a', li).click(function(event) {
            event.preventDefault();
            showZoomContent(thisMediaId, thisMediaUrl, thisMediaType, thisLinkUrl, thisLinkText);
        });
    });
}

var resetPreviousNextMedia = function(mediaId) {
    $('.jwbox_thumbnails li a img.selected').removeClass('selected');
    var currentThumbnail = $('.jwbox_thumbnails li a img[mid="' + mediaId + '"]');
    currentThumbnail.addClass('selected');
    var li = currentThumbnail.parents('li');
    if (li.css('display') == 'none') {
        moveThumbnailsTo(li);
    }

    var mediaItems = $('#infinite div.items a').not('.cloned');
    var count = 0;
    var number = 0;
    nextMediaId = '';

    var mediaItem = null;
    var firstItem = null;
    var nextItem = null;
    var previousItem = null;

    mediaItems.each(function() {
        count++;
        mediaItem = $(this);
        if (count == 1) {
            firstItem = mediaItem;
        }
        if (mediaId == mediaItem.attr('mid')) {
            number = count;
        } else if (number == 0) {
            previousItem = mediaItem;
        }
        else if (nextItem == null) {
            nextItem = mediaItem;
        }
    });
    if (count == 1) {
        previousItem = null;
        nextItem = null;
        previousMediaId = '';
        nextMediaId = '';
    }
    else if (number == 1) {
        previousItem = mediaItem;
    }
    else if (number == count) {
        nextItem = firstItem;
    }
    if (previousItem != null) {
        previousMediaUrl = previousItem.attr('rel');
        previousMediaType = previousItem.attr('rev').toLowerCase();
        previousMediaId = previousItem.attr('mid');
        previousLinkUrl = previousItem.attr('href');
        previousLinkText = previousItem.find('img').attr('alt');
    }

    if (nextItem != null) {
        nextMediaUrl = nextItem.attr('rel');
        nextMediaType = nextItem.attr('rev').toLowerCase();
        nextMediaId = nextItem.attr('mid');
        nextLinkUrl = nextItem.attr('href');
        nextLinkText = nextItem.find('img').attr('alt');
    }
     $('.jwbox_frame .navigation li.count').text(number + ' of ' + count);
}


var setToggle = function(event) {
    event.preventDefault();
    $('select.hideDD').removeClass('hideDD').css('display', '');
    $.jwbox.toggle(this);
    if (scrollingPanel) {
        scrollingPanel.play();
    }
}
var unbindSeekPause = function() {
    if (scrollingPanel) {
        scrollingPanel.unbind('onBeforeSeek');
    };
};

/* =========== JW Player Callbacks ================= */
var theplayer;
function playerReady(player) {
    theplayer = player;
    addListeners();
}
function addListeners() {
    swfplayer = document.getElementById(theplayer.id);
    if (swfplayer) {
        swfplayer.addModelListener('STATE', 'playerCompleted');
        swfplayer.addViewListener('STOP', 'playerStopping');
        swfplayer.addViewListener('PLAY', 'playerPlaying');
        swfplayer.addViewListener('SEEK', 'playerPlaying');
        swfplayer.navigationAlert = function() { return false; };
    } else {
        setTimeout("addListeners()", 100);
    }
}
function playerCompleted(player) {
    if (player.newstate != 'COMPLETED') {
        return;
    }
    playerStopping(player);
}

function playerStopping(player) {
    mediaPlaying = false;
    setTimeout(unbindSeekPause, 1);
}

function playerPlaying(player) {
    mediaPlaying = true;
    if (scrollingPanel) {
        scrollingPanel.onBeforeSeek(function(event, currentIndex) {
            return false;
        });
    }
}

/* ================= JW Player Light Box ================== */

jQuery.fn.center = function() {
    // this.css("position", "fixed");
    var top = ($(window).height() - this.outerHeight()) / 4;
    if (top < 20)
        top = 20;
    this.css("top",  top + "px");
    this.css("left", ($(window).width() - this.outerWidth()) / 2 + "px");
    return this;
}

jQuery.jwbox = {
    lightbox: null,
    player: null,
    toggle: function(context) {
        if (!$.jwbox.lightbox) {
            $.jwbox.lightbox = $(".jwbox_hidden", context);
            $.jwbox.center();
            $("#jwbox_background").fadeIn("fast");
            $.jwbox.lightbox.css("display", "block")
            $.jwbox.center();
            $("#jwbox_background").fadeTo(0, 0.8);
            $('object', context).each(function() {
                $.jwbox.player = document.getElementById(this.id);
            });
            if (scrollingPanel) {
                scrollingPanel.onBeforeSeek(function(event, currentIndex) {
                    return false;
                });
            }
        } else if ((context.className == 'jwbox_content')) {
        } else {
            try {
                if ($.jwbox.player && $.jwbox.player.sendEvent) {
                    $.jwbox.player.sendEvent("STOP");
                    $.jwbox.player = null;
                }
                else {
                    var object = $('object', $('.jwbox'));
                    if (object.length == 1 && object.sendEvent) {
                        object.sendEvent("STOP");
                    }
                }
                setTimeout(unbindSeekPause, 1);
            } catch (err) {
            }
            $.jwbox.lightbox.css("display", "none");
            $.jwbox.lightbox = null;
            $("#jwbox_background").fadeOut("fast");
        }
    },
    center: function() {
        if ($.jwbox.lightbox) {
            $.jwbox.lightbox.center();
        }
    }
}

$(document).keyup(function(event) {
    if (event.keyCode == 27 && $.jwbox.lightbox) {
        $.jwbox.toggle($("#jwbox_background"));
    }
});
