﻿/// <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 );
			}			
	        
	        
	        
	        
	        //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);


