﻿/// <reference path="jquery.intellisense.js"/>  
// Video Gallery Manager

(function($) {

    $.fn.videoGallery = function(options) {
        var opts = $.extend({}, $.fn.videoGallery.defaults, options);
    }


    function renderGallery(pageToDisplay) {
        // render the page of the gallery selected
        $("#video-gallery").empty();

        var rowSize = Math.ceil($.fn.videoGallery.defaults.pageSize / $.fn.videoGallery.defaults.rows);

        var startIndex = $.fn.videoGallery.defaults.pageSize * pageToDisplay;
        var endIndex = startIndex + $.fn.videoGallery.defaults.pageSize;

        // check that the end index isn't greater than the list of media items
        if (endIndex > $.fn.videoGallery.defaults.jsonFile.length - 1) {
            endIndex = $.fn.videoGallery.defaults.jsonFile.length;
        }

        for (i = startIndex; i < endIndex; i++) {
            var item = $.fn.videoGallery.defaults.jsonFile[i];

            // grab the media details.  There should be only one, else throw exception                           

            // default class name for the row
            var classname = "";

            // set the class name for the last element of the row
            if ((i + 1) % rowSize == 0) {
                classname = "row-end";
            }

            insertItem(item, item.Title, classname, i);



            updatePaging();


        }

        // no tool tips for videos
        //applyTooltips ( );
    }


    function applyTooltips() {
        $("#video-gallery a").tooltip({
            track: true,
            delay: 0,
            showURL: false,
            extraClass: "tooltip-gallery",
            opacity: 1,
            top: -70,
            left: -30
        });
    }



    function insertItem(mediaDetails, imageTitle, className, index) {

        $("<li class='" + className + "'></li>")
            .append($("<a title='" + imageTitle + "' href='#video'/>")
                .append(
                    $("<img/>")
                    .attr("src", getMediaUrlThumb(mediaDetails.ImageManager))
                    .attr("width", 123)
                    .attr("height", 92)
                    .attr("id", $.fn.videoGallery.defaults.thumbImagePrefix + 'i' + index).bind("click", thumbImage_click)
                ).append($("<strong/>").html(stripslashes(imageTitle)).attr("id",
						$.fn.videoGallery.defaults.thumbImagePrefix + 's' + index).bind("click", thumbImage_click))
					.append($("<span/>").html(stripslashes(mediaDetails.Summary.substring(0, 50)) + (mediaDetails.Summary.length > 50 ? "..." : ""))
					.attr("id",
						$.fn.videoGallery.defaults.thumbImagePrefix + 'p' + index).bind("click", thumbImage_click))

            ).appendTo("#video-gallery");

    }


    function pagingControl_click(element) {
        selectedIndex = parseInt(element.target.id) * $.fn.videoGallery.defaults.pageSize;
        renderGallery(element.target.id);
    }

    function thumbImage_click(element) {
        var mediaIndex = element.target.id.substring($.fn.videoGallery.defaults.thumbImagePrefix.length + 1);
        displayMediaDetails(mediaIndex);
    }




    function renderSideGallery(mediaIndex) {

        // hide the view button if there's no entries
        if ($.fn.videoGallery.totalNumberOfMediaItems() == 0) {
            $('#video-media-link').parent().hide();
            return;
        }


        var mediaItem = $.fn.videoGallery.defaults.jsonFile[mediaIndex];

        $('#video-media-caption').html(mediaItem.Title);

        $("#video-media-thumb").animate({ opacity: 0 }, 250, function() {
            $("#video-media-thumb").attr("src", getMediaUrlSide(mediaItem.ImageManager));
            $("#video-media-thumb").animate({ opacity: 1 }, 250);
        });


        $('#video-media-link').attr('href', $.fn.videoGallery.defaults.sideVideoLaunchPath + '?play=' + mediaItem.Id);


        selectedIndex = mediaIndex;

    }


    function displayMediaDetails(mediaIndex) {

        if (mediaIndex < $.fn.videoGallery.defaults.jsonFile.length) {
            // loads the video
            var mediaItem = $.fn.videoGallery.defaults.jsonFile[mediaIndex];
            showMedia(mediaItem);
        }
    }


    function showMedia(mediaItem) {


        $('#video-title').html(mediaItem.Title);

        $('#video-summary').html(mediaItem.BodyCopy);


        if (mediaItem.Format == null) {
            $('.formatInfo').html("");
        }
        else {
            $('.formatInfo').html(mediaItem.Format);
        }

        if (mediaItem.Duration == null) {
            $('.durationInfo').html("");
        }
        else {
            $('.durationInfo').html(mediaItem.Duration);
        }

        if (mediaItem.Genre == null) {
            $('.genreInfo').html("");
        }
        else {
            $('.genreInfo').html(mediaItem.Genre);
        }

        if (mediaItem.LifeMembers == null) {
            //$('.projectTeamInfo').html("");
        }
        else {
            //$('.projectTeamInfo').html(mediaItem.LifeMembers);            
        }

        if (mediaItem.ProjectTeam == null) {
            $('.projectTeamInfo').html("");
        }
        else {
            $('.projectTeamInfo').html(mediaItem.ProjectTeam);
        }



        //Determine to show YouTube or Normal Video
        if (mediaItem.FileLocation.indexOf("youtube.com") >= 0 || mediaItem.FileLocation.indexOf("vimeo.com") >= 0) {
            var so = new SWFObject(mediaItem.FileLocation, "videoPlayer", "488", "396", "7", "#000000");
            so.addParam("movie", mediaItem.FileLocation);
            so.addParam("wmode", "transparent");
            so.addParam("allowFullScreen", "true");
            so.write($.fn.videoGallery.defaults.videoPane);
        }
        else {
            var so = new SWFObject($.fn.videoGallery.defaults.videoWidget, "videoPlayer", "488", "396", "7", "#000000");
            so.addVariable("base_url", "/");
            so.addParam("wmode", "transparent");
            so.addVariable("video_path", $.fn.videoGallery.defaults.videoPath + mediaItem.FileLocation);

            so.write($.fn.videoGallery.defaults.videoPane);
        }

        updatePaging();
    }

    function updatePaging() {
        $('#' + $.fn.videoGallery.defaults.paging).empty();
        var first = true;
        var currentPage = Math.floor(selectedIndex / $.fn.videoGallery.defaults.pageSize);
        // render the paging
        for (page = 0; page < ($.fn.videoGallery.defaults.jsonFile.length / $.fn.videoGallery.defaults.pageSize); page++) {
            var classname = '';
            if (first) {
                classname = 'first';
                first = false;
            }
            // if current page, add strong tags and no click event
            if (currentPage == page) {
                $("<li><a class='current'>" + parseInt(page + 1) + "</a></li>").addClass(classname).appendTo('#' + $.fn.videoGallery.defaults.paging).attr("id", page);
            }
            else {
                $("<a href='javascript:;'></a>").html(parseInt(page + 1)).bind("click", pagingControl_click).appendTo('#' + $.fn.videoGallery.defaults.paging).attr("id", page).wrap("<li class='" + classname + "'></li>");
            }
        }
    }

    function getMediaUrlThumb(imageFileName) {
        return $.fn.videoGallery.defaults.imageUrl + $.fn.videoGallery.defaults.thumbPrefix + imageFileName;
    }

    function getMediaUrlSide(imageFileName) {
        return $.fn.videoGallery.defaults.imageUrl + $.fn.videoGallery.defaults.sidebarPrefix + imageFileName;
    }


    $.fn.videoGallery.totalNumberOfMediaItems = function() {
        return $.fn.videoGallery.defaults.jsonFile.length;
    };

    $.fn.videoGallery.displayNextSideItem = function() {
        if (selectedIndex < $.fn.videoGallery.totalNumberOfMediaItems() - 1) {
            renderSideGallery(selectedIndex + 1);
        }
    }

    $.fn.videoGallery.displayPreviousSideItem = function() {
        if (selectedIndex > 0) {
            renderSideGallery(selectedIndex - 1);
        }
    }

    // end private methods

    var selectedIndex = 0;

    $.fn.videoGallery.createGallery = function() {
        renderGallery(0);
        displayMediaDetails(0);
    }

    $.fn.videoGallery.createSideGallery = function() {
        renderSideGallery(selectedIndex);
    }

    $.fn.videoGallery.showMedia = function(mediaItem) {
        showMedia(mediaItem);
    }


    $.fn.videoGallery.defaults = {
        // the JSON file containing all the images
        jsonFile: '',
        // how many to display of a page
        pageSize: 3,
        // number of rows in a page
        rows: 1,
        // page to start on
        page: 1,
        // the id of the element to contain the media count information
        mediaCount: 'mediaCount',
        // the id of the element to contain the paging information
        paging: 'galleryPaging',
        // the url to where images are kept in
        imageUrl: '',
        //  not used for the actual image only to get the id
        thumbImagePrefix: 'videoThumb',
        // the location of the video player
        videoWidget: '',
        videoPath: '',
        videoPane: 'video-holder',
        mediumPrefix: 'medium_',
        sidebarPrefix: 'sidebar_',
        thumbPrefix: 'thumb_',
        sideVideoPath: ''
    };


})(jQuery);


