﻿//Constants
//Syncronized with enums in MediaBase.cs

var MediaManager = {
    ContentTypes: {
        IMAGE: 10,
        YOUTUBEVIDEO: 20
    },
    RenderingModes: {
        PREVIEW: 10,
        VIEW: 20
    },
    GetCssClass: function (ContentType) {
        switch (ContentType) {
            case MediaManager.ContentTypes.IMAGE:
                return 'Image';
            case MediaManager.ContentTypes.YOUTUBEVIDEO:
                return 'YouTubeVideo';
        }
    },
    GetSelector: function (ContentType) {
        return '.' + MediaManager.GetCssClass(ContentType);
    },
    YouTubeCallbacks: [],
    YouTubePlayerIDs: [],
    ViewerSize: {
        Width: 744,
        Height: 446
    },
    ImageMaxHeight: 480,
    LoadingCssClass: 'loading'
};

function onYouTubePlayerReady(playerId) {
    MediaManager.YouTubePlayerIDs[MediaManager.YouTubePlayerIDs.length] = playerId;
    if (MediaManager.YouTubeCallbacks[playerId]) {
        MediaManager.YouTubeCallbacks[playerId]();
        MediaManager.YouTubeCallbacks[playerId] = undefined;
    }
}

function getImagesPreview(array, callback) {
    var imgids = [];
    for(var id in array){
        if(!getLoaded(array[id])){
            imgids.push(id);
        }
    }
                
    if(imgids.length == 0)
        return;
    jQuery.ajax("/Functions/MediaGallery/MediaService.asmx/GetImagesPreview", {
        data: "{'imageIds':'" + imgids.join(',') + "'}",
        type: 'POST',
        dataType: 'JSON',
        contentType: 'application/json; charset=utf-8',
        success: function (msg)
        {
            var results = jQuery.parseJSON(msg.d);
            for (var i in results)
                if (results[i] != "")
                {
                    var $element = array[i];
                    $element.find('img').load({ element: $element }, function (e)
                    {
                        e.data.element.removeClass(MediaManager.LoadingCssClass);
                        if (callback)
                        {
                            callback($element);
                        }
                    }).attr('src', results[i]);
                    setLoaded($element);
                }
        },
        error: function (msg)
        {

        }
    });
                
                
}
function setLoaded($element) {
    jQuery($element).data('loaded', true);
}

function getLoaded($element) {
    return jQuery($element).data('loaded');
}
//MediaArray
(function ($) {

    var methods = {
        init: function (options) {

            var settings = {
            };

            //options
            if (options) {
                jQuery.extend(settings, options);
            }

            //MediaArray object

            function MediaArray(MediaEntryArray) {
                var that = this;

                var data = MediaEntryArray;
                this.Entries = function () { return data; }
                //GetFilteredArray
                //returns MediaArray object, containing only allowed content types
                this.GetSingle = function (index) { return new MediaArray([that.Entries()[index]]); }
                this.GetFiltered = function (ContentTypes) {

                    function contains(array, value) {
                        var result = false;
                        for (var i = 0; i < array.length; i++) {
                            if (array[i] === value) {
                                result = true;
                                break;
                            }
                        }
                        return result;
                    }

                    if (!ContentTypes || ContentTypes.length == 0) {
                        return new MediaArray(that.Entries());
                    }
                    else {
                        var filtered = [];
                        var data = that.Entries();
                        for (var i = 0; i < data.length; i++) {
                            if (contains(ContentTypes, data[i].ContentType)) {
                                filtered[filtered.length] = data[i];
                            }
                        }
                        return new MediaArray(filtered);
                    }
                }
            };

            //functionality

            var $this = jQuery(this);
            var data = $this.data("MediaArray");
            if (!data) {
                var data = jQuery.parseJSON($this.val());
                if (!data)
                {
                    data = { Entries: [] };
                }
                $this.data("MediaArray", new MediaArray(data.Entries));
                return $this.data("MediaArray");
            }
            else {
                return data;
            }
        }
    };

    $.fn.MediaArray = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.MediaArray');
        }

    };

})(jQuery);

//MediaEntry
(function ($) {

    var methods = {
        //Returns MediaEntry object assotiated with current DOM element
        init: function (options) {

            //functionality

            var $this = jQuery(this);
            return $this.data("MediaEntry");
        },
        render: function (options) {
            var settings = {
                mode: MediaManager.RenderingModes.PREVIEW,
                mediaArray: [],
                showPrintButton: false
            };
            //options
            if (options) {
                jQuery.extend(settings, options);
            }            

            //MediaRender
            
            /*
            container = jQuery object
            mediaArray = MediaArray
            */
            function MediaRender(container, mediaArray) {
                //Initialization
                var that = this;
                //Rendering methods
                var RenderImagePreview = function (mediaEntry, container) {
                    var newElement = 
                        '<div class="MediaEntry ' 
                        + MediaManager.GetCssClass(MediaManager.ContentTypes.IMAGE) + ' ' 
                        + MediaManager.LoadingCssClass
                        + '"><img src="" alt="" />'
                        + (settings.showPrintButton 
                            ? '<div class="Print"><a class="iconLink printLink fr" href="">Печать</a></div>'
                            : '')
                        + '<p><span></span></p></div>';
                    if (container.html() === '')
                    {
                        var html = container.html();
                        html += newElement;
                        container.html(html);
                    }
                    else
                    {
                        container.find('.MediaEntry:last').after(newElement);   
                    }
                    //attache data and events to the rendered element
                    var $entry = container.find(
                        '.MediaEntry' 
                        + MediaManager.GetSelector(MediaManager.ContentTypes.IMAGE) + 
                        ':last');

                    $entry.data('MediaEntry', mediaEntry);
                }
                var RenderImageView = function (mediaEntry, container) {
                    RenderImagePreview(mediaEntry, container);
                }
                var RenderYouTubeVideoPreview = function (mediaEntry, container) {
                    var newElement = '<div class="MediaEntry ' 
                        + MediaManager.GetCssClass(MediaManager.ContentTypes.YOUTUBEVIDEO) + ' ' 
                        + MediaManager.LoadingCssClass + 
                        '"></div>';
                    if (container.html() === '')
                    {
                        var html = container.html();
                        html += newElement;
                        container.html(html);
                    }
                    else
                    {
                        container.find('.MediaEntry:last').after(newElement);   
                    }
                    //attache data and events to the rendered element
                    var $entry = container.find(
                        '.MediaEntry' 
                        + MediaManager.GetSelector(MediaManager.ContentTypes.YOUTUBEVIDEO) + 
                        ':last');
                    $entry.data('MediaEntry', mediaEntry);
                }
                var RenderYouTubeVideoView = function (mediaEntry, container) {
                    var now = new Date();
                    var uniqueId  = 'YouTubeVideo' + Math.round(Math.random() * 1000000);
                    var altContent = '';
                    if (!swfobject.hasFlashPlayerVersion("8"))
                    {
                        altContent = '<div class="FlashAlternateContent">' +
                            '<a href="http://www.adobe.com/go/getflashplayer/">' +
                            '<img title="Get Flash Player" alt="Get Flash Player" src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/flashplayer/images/get_flashplayer_promo.jpg.adimg.mh.220.mw.220.png">' +
                            '</a>' +
                            '</div>';
                    }                  
                    var newElement = '<div class="MediaEntry ' 
                        + MediaManager.GetCssClass(MediaManager.ContentTypes.YOUTUBEVIDEO) + ' ' 
                        + (altContent.length == 0 ? MediaManager.LoadingCssClass : '') + 
                        '"><div id="' + uniqueId + '">' + altContent + '</div></div>';
                    if (container.html() === '')
                    {
                        var html = container.html();
                        html += newElement;
                        container.html(html);
                    }
                    else
                    {
                        container.find('.MediaEntry:last').after(newElement);   
                    }
                    //attache data and events to the rendered element
                    var $entry = container.find(
                        '.MediaEntry' 
                        + MediaManager.GetSelector(MediaManager.ContentTypes.YOUTUBEVIDEO) + 
                        ':last');
                    $entry.data('MediaEntry', mediaEntry);
                }
                //Render
                this.Render = function () {
                    //Cleanup
                    container.html('');
                    //Actual rendering
                    var data = mediaArray.Entries();
                    for (var i = 0; i < data.length; i++) {
                        switch (data[i].ContentType) {
                            case MediaManager.ContentTypes.IMAGE:
                                switch (settings.mode) {
                                    case MediaManager.RenderingModes.PREVIEW:
                                        RenderImagePreview(data[i], container);
                                        break;
                                    case MediaManager.RenderingModes.VIEW:
                                        RenderImageView(data[i], container);
                                        break;   
                                }
                                break;
                            case MediaManager.ContentTypes.YOUTUBEVIDEO:
                                switch (settings.mode) {
                                    case MediaManager.RenderingModes.PREVIEW:    
                                        RenderYouTubeVideoPreview(data[i], container);
                                        break;
                                    case MediaManager.RenderingModes.VIEW:
                                        RenderYouTubeVideoView(data[i], container);
                                        break;
                                }
                                break;
                        }
                    }
                }
            };
            if (settings.mediaArray) {
                this.each( function() {
                    var $this = jQuery(this);
                    var render = new MediaRender($this, settings.mediaArray);
                    render.Render();
                });
            }
        },
        load: function (options) {
            var settings = {
                mode: MediaManager.RenderingModes.PREVIEW,
                callback: undefined,
                ImageWebServiceUrl: '/Functions/MediaGallery/MediaService.asmx'
            };
            //options
            if (options) {
                jQuery.extend(settings, options);
            }
            //functionality



            function getImagePreview(id, $element, callback) {
                if (!getLoaded($element))
                {
                    jQuery.ajax(settings.ImageWebServiceUrl + "/GetImagePreview", {
                        data: "{'imageId':'" + id + "'}",
                        type: 'POST',
                        dataType: 'JSON',
                        contentType: 'application/json; charset=utf-8',
                        success: function (msg) {
                            $element.find('img').load( function() {
                                $element.removeClass(MediaManager.LoadingCssClass);
                                if (callback) {
                                    callback($element);
                                }
                            }).attr('src', msg.d);
                            setLoaded($element);
                        },
                        error: function (msg) {
                        }
                    });
                    return false;
                }
                else {
                    return true;
                }
            }
            
            function getImageView(id, $element, callback) {
                if (!getLoaded($element))
                {
                    jQuery.ajax(settings.ImageWebServiceUrl + "/GetImageView", {
                        data: "{'imageId':'" + id + "'}",
                        type: 'POST',
                        dataType: 'JSON',
                        contentType: 'application/json; charset=utf-8',
                        success: function (msg) {
                        var imgsrc = msg.d;

                        var addinfo = "";
                            var arr = imgsrc.split("&&");
                            if(arr.length == 2){
                                addinfo = arr[0];
                                imgsrc = arr[1];
                                $element.find('span').html(addinfo);
                            }
                            else{
                                imgsrc == arr[0];
                            }                            
                            $element.find('img').load( function() {
                                $element.removeClass(MediaManager.LoadingCssClass);
                                if (callback) {
                                    callback($element);
                                }
                            }).attr('src', imgsrc);
                            setLoaded($element);
                        },
                        error: function (msg) {
                        }
                    });
                    jQuery.ajax(settings.ImageWebServiceUrl + "/GetImageSource", {
                        data: "{'imageId':'" + id + "'}",
                        type: 'POST',
                        dataType: 'JSON',
                        contentType: 'application/json; charset=utf-8',
                        success: function (msg) {
                            $element.find('.Print > a')
                                .attr('href', msg.d)
                                .click(function()
                                {
                                    window.location = jQuery(this).attr('href') + '#print';
                                    return false;
                                });

                            setLoaded($element);
                        },
                        error: function (msg) {
                        }
                    });
                    return false;
                }
                else {
                    return true;
                }
            }

            function getYouTubeVideoPreview($element, mediaEntry, callback) {
                if (!getLoaded($element))
                {
                    $element.css('background-image', "url('" + mediaEntry.PreviewUrl + "')");
                    $element.removeClass(MediaManager.LoadingCssClass);
                    setLoaded($element);
                    if (callback) {
                        callback($element);
                    }
                    return false;
                }
                else {
                    return true;
                }
            }

            function getYouTubeVideoView($element, mediaEntry, callback) {
                if (!getLoaded($element))
                {
                    var uniqueId = $this.find('div').attr('id');
                    //embed flash player
                    var params = { 
                        allowScriptAccess: 'always',
                        allowfullscreen: 'true',
                        rel: 0,
                        iv_load_policy: 3,
                        showinfo: 0,
                        wmode: 'transparent'
                    };
                    var atts = { 
                        id: uniqueId
                    };
                    swfobject.embedSWF(mediaEntry.Url + '?enablejsapi=1&playerapiid=' + uniqueId, 
                                       uniqueId, MediaManager.ViewerSize.Width, 
                                       MediaManager.ViewerSize.Height, "8", null, null, params, atts);
                    var onLoadCallback = function() {
                        $element.removeClass(MediaManager.LoadingCssClass);
                        setLoaded($element);
                        if (callback) {
                            callback($element);
                        }
                    }
                    MediaManager.YouTubeCallbacks[uniqueId] = onLoadCallback;
                    return false;
                }
                else {
                    return true;
                }
            }

            var $this = jQuery(this);
            
            

            $this.each( function() {
                var $this = jQuery(this);
                var data = $this.MediaEntry();
                switch (data.ContentType) {
                    case MediaManager.ContentTypes.IMAGE:
                        switch (settings.mode) {
                            case MediaManager.RenderingModes.PREVIEW:
                                
                                break;
                            case MediaManager.RenderingModes.VIEW:
                                getImageView(data.Id, $this, settings.callback);
                                break;   
                        }
                        break;
                    case MediaManager.ContentTypes.YOUTUBEVIDEO:
                        switch (settings.mode) {
                            case MediaManager.RenderingModes.PREVIEW:
                                getYouTubeVideoPreview($this, data, settings.callback);
                                break;
                            case MediaManager.RenderingModes.VIEW:
                                getYouTubeVideoView($this, data, settings.callback);
                                break;  
                        }
                        break;
                }
            });
            
        }
    };

    $.fn.MediaEntry = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.MediaEntry');
        }

    };

})(jQuery);

//MediaStripe
(function ($) {

    var Settings = function ($this) {
        return $this.data('Settings');
    };

    var LoadPartial = function ($this, index, pagesCount, loadSettings) {
        var $pages = $this.find('.page', '.items');
        var startIndex = (index - pagesCount >= 0) ? (index - pagesCount) : 0;
        var endIndex = (index + pagesCount <= $pages.length - 1) ? (index + pagesCount) : $pages.length - 1;
        var loadresult = false;
        var previewArray = {};
        if (startIndex == endIndex){
            loadresult = jQuery($pages[index]).find('.MediaEntry').MediaEntry('load', loadSettings);
        }
        else {
            
            //Apparently this cycle loads preview to stripe
            for (var i = startIndex; i <= endIndex + 1; i++) {
            if (i == index) {
                previewArray = {};
                var tmp = jQuery($pages[i]).find('.MediaEntry').MediaEntry('load', loadSettings);
                
                    loadresult = tmp;
                }
            }
        }
        for(var j = startIndex; j <= endIndex + 1; j++)
        {
            jQuery($pages[j]).find('.MediaEntry').each(function(iindex, element){
                var $element = jQuery(element);
                var data = $element.MediaEntry();
                if (
                    data.ContentType == MediaManager.ContentTypes.IMAGE && 
                    loadSettings.mode == MediaManager.RenderingModes.PREVIEW){
                    if(!getLoaded($element)){
                        previewArray[data.Id] = $element;
                    }
                }
            });
        }
        getImagesPreview(previewArray, loadSettings.callback);
        return loadresult;
    };

    var SetHeightTo = function  ($this, index) {
        var $pages = $this.find('.page', '.items');
        var newHeight = jQuery($pages[index]).height();
        if (newHeight == 0) {
            //Tweak of invisible images on first load
            if (jQuery($pages[index]).find('img').length > 0)
            {
                newHeight = jQuery($pages[index]).find('img')[0].height;
            }
        }
        $this.height(newHeight);
        $this.find('.scrollable').height(newHeight);

        //tweak for too high images
        /*if (jQuery($pages[index]).find('img').length > 0 && Settings($this).Mode == MediaManager.RenderingModes.VIEW)
        {
            if (jQuery($pages[index]).find('img').height() == MediaManager.ImageMaxHeight) {
                jQuery($pages[index]).find('img').width('auto').height(MediaManager.ImageMaxHeight);
            }
        }*/
    };

    var PrepareAt = function ($this, index) {
        var loadSettings;
        var resizeCallback = function($element) {         
            var mediaEntry = $element.MediaEntry();
            var index = jQuery.inArray(mediaEntry, jQuery(Settings($this).MediaArraySelector).MediaArray().Entries());
            if (Settings($this).AutoHeight && index == $this.find('.scrollable').scrollable().getIndex()) {
                SetHeightTo($this, index);
                $this.resize();
            }
        }
        loadSettings = {
            mode: Settings($this).Mode, 
            callback: resizeCallback,
            ImageWebServiceUrl: Settings($this).ImageWebServiceUrl
        }
        LoadPartial($this, index, Settings($this).PrecacheSize * Settings($this).PageSize, loadSettings);
        if (Settings($this).AutoHeight) {
            SetHeightTo($this, index);
            $this.resize();
        }

        //YouTubeVideo management
        jQuery.each(MediaManager.YouTubePlayerIDs, function () {
            ytplayer = document.getElementById(this);
            if (ytplayer.getPlayerState) //Player can be not ready
            {
                if (ytplayer.getPlayerState() == 1) //Pause if playing
                {
                    ytplayer.pauseVideo();
                }
            }
        });
    }

    var methods = {
        init: function (options) {

            var settings = {
                MediaArraySelector: '#fakeMediaArray',
                Precache: true,
                PrecacheSize: 0,
                PageIndex: 0,
                PageSize: 6,
                ContentTypes: [],
                Mode: MediaManager.RenderingModes.PREVIEW,
                AutoHeight: false,
                AlternateContentControlId: 'fake',
                ImageWebServiceUrl: '/Functions/MediaGallery/MediaService.asmx',
                ShowPrintButton: false
            };

            //options
            if (options) {
                jQuery.extend(settings, options);
            }
            var $this = jQuery(this);
            $this.data('Settings', settings);

            //functionality
            
            var mediaArray = jQuery(settings.MediaArraySelector).MediaArray().GetFiltered(settings.ContentTypes);

            //Start rendering media

            var renderSettings = {
                mode: settings.Mode,
                mediaArray: mediaArray,
                showPrintButton: settings.ShowPrintButton
            };

            $this.find('.items').MediaEntry('render', renderSettings);

            //Disable navigation buttons if too little entries
            if ($this.find('.items > .MediaEntry').length <= settings.PageSize) {
                $this.find('.prev, .next').css('visibility', 'hidden');
            }

            //Create pages
            while ($this.find('.items > .MediaEntry').length > 0) {
                $this.find('.items > .MediaEntry:lt(' + 1 + ')').wrapAll('<div class="page" />');
            }
            //End - Create pages

            $this.find(".scrollable").scrollable({
                next: '#foo',
                prev: '#foo'
            });
            $this.find('.next').click( function() {
                var index = $this.find(".scrollable").scrollable().getIndex();
                $this.MediaStripe('seekTo', index + settings.PageSize);
            });
            $this.find('.prev').click( function() {
                var index = $this.find(".scrollable").scrollable().getIndex();
                $this.MediaStripe('seekTo', index - settings.PageSize);
            });

            if (settings.PrecacheSize != 0) {
                PrepareAt($this, settings.PageIndex);
            }

            //Precaching

            if (settings.Precache)
            {
                if (settings.PrecacheSize === -1) {
                    $this.MediaStripe('loadAll', loadSettings);
                }
                else {
                    //Bind precaching to prev/next buttons

                    $this.find('.prev, .next').click( function() {
                        var index = $this.find(".scrollable").scrollable().getIndex();
                        if (settings.PrecacheSize != 0) {
                            PrepareAt($this, index);
                        }
                    });
                }
            }
            else
            {
                $this.MediaStripe('loadAll');
            }

            if (settings.PrecacheSize == 0) {
                settings.PrecacheSize++;
                $this.data('Settings', settings);
            }

            //End - precaching

            //End rendering media

            //Events

            if (settings.AutoHeight)
            {
                $this.resize(function() {
                    var index = $this.find(".scrollable").scrollable().getIndex();
                    SetHeightTo($this, index);
                });

                $this.find('.prev, .next').click( function() {
                    var index = $this.find(".scrollable").scrollable().getIndex();
                    SetHeightTo($this, index);
                });
            }

            //End Events

            $this.MediaStripe('loadComplete');
        },
        loadAll: function () {
            var $this = jQuery(this);
            var loadSettings = {
                mode: $this.MediaStripe().Settings.Mode,
                ImageWebServiceUrl: $this.MediaStripe().Settings.ImageWebServiceUrl
            };
            $this.find('.items').find('.MediaEntry').MediaEntry('load', loadSettings);
        },
        loadComplete: function (callback) {
            var $this = jQuery(this);
            if (callback) {
                var cb = $this.data('OnLoadCompleteCallbacks');
                if (!cb){
                    cb = [];
                }
                cb[cb.length] = callback;
                $this.data('OnLoadCompleteCallbacks', cb);
            }
            else {
                var cb = $this.data('OnLoadCompleteCallbacks');
                if (!cb){
                    cb = [];
                }
                jQuery.each(cb, function() { this.call(); } );
            }
        },
        seekTo: function (index)
        {
            previewArray = {};
            var $this = jQuery(this);
            var newIndex = index;
            if (newIndex < 0) {
                newIndex = 0;
                $this.find('.prev').addClass('disabled');
            }
            else {
                $this.find('.prev').removeClass('disabled');
            }
            var $pages = $this.find('.page');
            if (newIndex > $pages.length - Settings($this).PageSize) {
                newIndex = $pages.length - Settings($this).PageSize;
                $this.find('.next').addClass('disabled');
            }
            else {
                $this.find('.next').removeClass('disabled');
            }
            $this.find('.scrollable').scrollable().seekTo(newIndex, 400);
            PrepareAt($this, index);
        }
    };

    $.fn.MediaStripe = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.MediaStripe');
        }

    };

})(jQuery);

//MediaGallery
(function ($) {

    var methods = {
        init: function (options) {

            var settings = {
                SeparateVideoAndPhoto: true,
                MediaViewerSelector: '#fakeSelector',
                MediaStripeSelector: '#fakeSelector',
                MediaArraySelector: '#fakeSelector',
                ContentTypes: [],
                NavigationBarPageSize: 6
            };

            //options
            if (options) {
                jQuery.extend(settings, options);
            }
            //functionality
            
            var $this = jQuery(this);

            var $mediaViewer = jQuery(settings.MediaViewerSelector);
            var $mediaStripe = jQuery(settings.MediaStripeSelector);
            var mediaArray = jQuery(settings.MediaArraySelector).MediaArray().GetFiltered(settings.ContentTypes);

            function toggleNavButtons() {
                var index = $mediaViewer.find('.scrollable').scrollable().getIndex();
                var pagesLength = $mediaViewer.find('.page').length;
                if (index == 0)
                {
                    $mediaViewer.find('.prev').addClass('disabled');
                }
                if (index == pagesLength - 1)
                {
                    $mediaViewer.find('.next').addClass('disabled');
                }
            }

            //enable media entry selection
            var loadCompleteCallback = function () {
                $mediaStripe.find('.MediaEntry').click( function() {
                    $this = jQuery(this);
                    var mediaEntry = $this.MediaEntry();
                    var index = jQuery.inArray(mediaEntry, mediaArray.Entries());
                    if (index != -1) {
                        $mediaViewer.MediaStripe('seekTo', index);
                        toggleNavButtons();
                    }
                });
                toggleNavButtons();
            };
            $mediaStripe.MediaStripe('loadComplete', loadCompleteCallback);
            
            var loadCompleteCallback = function () {
                //enable overlay scroll

                $mediaViewer.add('.prev, .next', $mediaViewer).mouseleave( function(event) {
                    $mediaViewer.find('.prev, .next').removeClass('visible');
                });
                $mediaViewer.add('.prev, .next', $mediaViewer).mousemove( function(event) {
                    var $this = jQuery(this);
                    var offset = $this.offset();
                    var halfOfWidth = $this.width() / 2;
                    if (event.pageX < (offset.left + halfOfWidth)) {
                        $mediaViewer.find('.prev').addClass('visible');
                        $mediaViewer.find('.next').removeClass('visible');
                    }
                    else {
                        $mediaViewer.find('.next').addClass('visible');
                        $mediaViewer.find('.prev').removeClass('visible');
                    }
                });
                $mediaViewer.find('.innerContainer').unbind('click');
                $mediaViewer.find('.innerContainer').click( function(event) {
                    var $this = jQuery(this);
                    var index = $mediaViewer.find('.scrollable').scrollable().getIndex();
                    var entry = mediaArray.Entries()[index];
                    if (entry.ContentType == MediaManager.ContentTypes.IMAGE) {
                        var offset = $this.offset();
                        var halfOfWidth = $this.width() / 2;
                        if (event.pageX < (offset.left + halfOfWidth)) {
                            $mediaViewer.MediaStripe('seekTo', index - 1);
                        }
                        else {
                            $mediaViewer.MediaStripe('seekTo', index + 1);
                        }
                        toggleNavButtons();
                    }
                });
                $mediaViewer.find('.prev').click( function(event) {
                    $mediaViewer.find('.prev').addClass('visible');
                    $mediaViewer.find('.next').removeClass('visible');
                    toggleNavButtons();
                    return false;
                });
                $mediaViewer.find('.next').click( function(event) {
                    $mediaViewer.find('.prev').removeClass('visible');
                    $mediaViewer.find('.next').addClass('visible');
                    toggleNavButtons();
                    return false;
                });
                $mediaViewer.resize( function(eventArgs) {
                    //prev/next position
                    var height = $mediaViewer.find('.scrollable').height();
                    var elemHeight = $mediaViewer.find('.prev, .next').height();
                    $mediaViewer.find('.prev, .next').css('top',
                        '180px'//(height / 2)// - (elemHeight / 2)
                    );
                });
            };
            $mediaViewer.MediaStripe('loadComplete', loadCompleteCallback);
        },
        load: function (options) {
            var $this = jQuery(this);
            $this.find('.MediaViewer').MediaStripe('seekTo', 0);
			$this.find('.NavigationBar').MediaStripe('seekTo', 0);
        }
    };

    $.fn.MediaGallery = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.MediaGallery');
        }

    };

})(jQuery);


