Swap in jquery-lightbox - warvox - Unnamed repository; edit this file 'description' to name the repository.
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 13450230bbbb5422710e2640661828c46f043df3
 (DIR) parent 3f4572631842f38da7c8020f2632b3238b6ae055
 (HTM) Author: HD Moore <hd_moore@rapid7.com>
       Date:   Wed, 26 Dec 2012 23:37:31 -0600
       
       Swap in jquery-lightbox
       
       Diffstat:
         A app/assets/images/lightbox-blank.g… |       0 
         A app/assets/images/lightbox-btn-clo… |       0 
         A app/assets/images/lightbox-btn-nex… |       0 
         A app/assets/images/lightbox-btn-pre… |       0 
         A app/assets/images/lightbox-ico-loa… |       0 
         A app/assets/javascripts/jquery.ligh… |     473 ++++++++++++++++++++++++++++++
         D app/assets/javascripts/lightbox.js  |     426 -------------------------------
         A app/assets/stylesheets/jquery.ligh… |     102 +++++++++++++++++++++++++++++++
         M app/views/analyze/view.html.erb     |       7 +++++++
         M app/views/analyze/view_matches.htm… |       7 +++++++
       
       10 files changed, 589 insertions(+), 426 deletions(-)
       ---
 (DIR) diff --git a/app/assets/images/lightbox-blank.gif b/app/assets/images/lightbox-blank.gif
       Binary files differ.
 (DIR) diff --git a/app/assets/images/lightbox-btn-close.gif b/app/assets/images/lightbox-btn-close.gif
       Binary files differ.
 (DIR) diff --git a/app/assets/images/lightbox-btn-next.gif b/app/assets/images/lightbox-btn-next.gif
       Binary files differ.
 (DIR) diff --git a/app/assets/images/lightbox-btn-prev.gif b/app/assets/images/lightbox-btn-prev.gif
       Binary files differ.
 (DIR) diff --git a/app/assets/images/lightbox-ico-loading.gif b/app/assets/images/lightbox-ico-loading.gif
       Binary files differ.
 (DIR) diff --git a/app/assets/javascripts/jquery.lightbox-0.5.js b/app/assets/javascripts/jquery.lightbox-0.5.js
       @@ -0,0 +1,472 @@
       +/**
       + * jQuery lightBox plugin
       + * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
       + * and adapted to me for use like a plugin from jQuery.
       + * @name jquery-lightbox-0.5.js
       + * @author Leandro Vieira Pinho - http://leandrovieira.com
       + * @version 0.5
       + * @date April 11, 2008
       + * @category jQuery plugin
       + * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)
       + * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US
       + * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
       + */
       +
       +// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias
       +(function($) {
       +        /**
       +         * $ is an alias to jQuery object
       +         *
       +         */
       +        $.fn.lightBox = function(settings) {
       +                // Settings to configure the jQuery lightBox plugin how you like
       +                settings = jQuery.extend({
       +                        // Configuration related to overlay
       +                        overlayBgColor:                 '#000',                // (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color.
       +                        overlayOpacity:                        0.8,                // (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9
       +                        // Configuration related to navigation
       +                        fixedNavigation:                false,                // (boolean) Boolean that informs if the navigation (next and prev button) will be fixed or not in the interface.
       +                        // Configuration related to images
       +                        imageLoading:                        'images/lightbox-ico-loading.gif',                // (string) Path and the name of the loading icon
       +                        imageBtnPrev:                        'images/lightbox-btn-prev.gif',                        // (string) Path and the name of the prev button image
       +                        imageBtnNext:                        'images/lightbox-btn-next.gif',                        // (string) Path and the name of the next button image
       +                        imageBtnClose:                        'images/lightbox-btn-close.gif',                // (string) Path and the name of the close btn
       +                        imageBlank:                                'images/lightbox-blank.gif',                        // (string) Path and the name of a blank image (one pixel)
       +                        // Configuration related to container image box
       +                        containerBorderSize:        10,                        // (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value
       +                        containerResizeSpeed:        400,                // (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default.
       +                        // Configuration related to texts in caption. For example: Image 2 of 8. You can alter either "Image" and "of" texts.
       +                        txtImage:                                'Image',        // (string) Specify text "Image"
       +                        txtOf:                                        'of',                // (string) Specify text "of"
       +                        // Configuration related to keyboard navigation
       +                        keyToClose:                                'c',                // (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to.
       +                        keyToPrev:                                'p',                // (string) (p = previous) Letter to show the previous image
       +                        keyToNext:                                'n',                // (string) (n = next) Letter to show the next image.
       +                        // Don´t alter these variables in any way
       +                        imageArray:                                [],
       +                        activeImage:                        0
       +                },settings);
       +                // Caching the jQuery object with all elements matched
       +                var jQueryMatchedObj = this; // This, in this context, refer to jQuery object
       +                /**
       +                 * Initializing the plugin calling the start function
       +                 *
       +                 * @return boolean false
       +                 */
       +                function _initialize() {
       +                        _start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked
       +                        return false; // Avoid the browser following the link
       +                }
       +                /**
       +                 * Start the jQuery lightBox plugin
       +                 *
       +                 * @param object objClicked The object (link) whick the user have clicked
       +                 * @param object jQueryMatchedObj The jQuery object with all elements matched
       +                 */
       +                function _start(objClicked,jQueryMatchedObj) {
       +                        // Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
       +                        $('embed, object, select').css({ 'visibility' : 'hidden' });
       +                        // Call the function to create the markup structure; style some elements; assign events in some elements.
       +                        _set_interface();
       +                        // Unset total images in imageArray
       +                        settings.imageArray.length = 0;
       +                        // Unset image active information
       +                        settings.activeImage = 0;
       +                        // We have an image set? Or just an image? Let´s see it.
       +                        if ( jQueryMatchedObj.length == 1 ) {
       +                                settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));
       +                        } else {
       +                                // Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references                
       +                                for ( var i = 0; i < jQueryMatchedObj.length; i++ ) {
       +                                        settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));
       +                                }
       +                        }
       +                        while ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href') ) {
       +                                settings.activeImage++;
       +                        }
       +                        // Call the function that prepares image exibition
       +                        _set_image_to_view();
       +                }
       +                /**
       +                 * Create the jQuery lightBox plugin interface
       +                 *
       +                 * The HTML markup will be like that:
       +                        <div id="jquery-overlay"></div>
       +                        <div id="jquery-lightbox">
       +                                <div id="lightbox-container-image-box">
       +                                        <div id="lightbox-container-image">
       +                                                <img src="../fotos/XX.jpg" id="lightbox-image">
       +                                                <div id="lightbox-nav">
       +                                                        <a href="#" id="lightbox-nav-btnPrev"></a>
       +                                                        <a href="#" id="lightbox-nav-btnNext"></a>
       +                                                </div>
       +                                                <div id="lightbox-loading">
       +                                                        <a href="#" id="lightbox-loading-link">
       +                                                                <img src="../images/lightbox-ico-loading.gif">
       +                                                        </a>
       +                                                </div>
       +                                        </div>
       +                                </div>
       +                                <div id="lightbox-container-image-data-box">
       +                                        <div id="lightbox-container-image-data">
       +                                                <div id="lightbox-image-details">
       +                                                        <span id="lightbox-image-details-caption"></span>
       +                                                        <span id="lightbox-image-details-currentNumber"></span>
       +                                                </div>
       +                                                <div id="lightbox-secNav">
       +                                                        <a href="#" id="lightbox-secNav-btnClose">
       +                                                                <img src="../images/lightbox-btn-close.gif">
       +                                                        </a>
       +                                                </div>
       +                                        </div>
       +                                </div>
       +                        </div>
       +                 *
       +                 */
       +                function _set_interface() {
       +                        // Apply the HTML markup into body tag
       +                        $('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="' + settings.imageLoading + '"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="' + settings.imageBtnClose + '"></a></div></div></div></div>');        
       +                        // Get page sizes
       +                        var arrPageSizes = ___getPageSize();
       +                        // Style overlay and show it
       +                        $('#jquery-overlay').css({
       +                                backgroundColor:        settings.overlayBgColor,
       +                                opacity:                        settings.overlayOpacity,
       +                                width:                                arrPageSizes[0],
       +                                height:                                arrPageSizes[1]
       +                        }).fadeIn();
       +                        // Get page scroll
       +                        var arrPageScroll = ___getPageScroll();
       +                        // Calculate top and left offset for the jquery-lightbox div object and show it
       +                        $('#jquery-lightbox').css({
       +                                top:        arrPageScroll[1] + (arrPageSizes[3] / 10),
       +                                left:        arrPageScroll[0]
       +                        }).show();
       +                        // Assigning click events in elements to close overlay
       +                        $('#jquery-overlay,#jquery-lightbox').click(function() {
       +                                _finish();                                                                        
       +                        });
       +                        // Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects
       +                        $('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() {
       +                                _finish();
       +                                return false;
       +                        });
       +                        // If window was resized, calculate the new overlay dimensions
       +                        $(window).resize(function() {
       +                                // Get page sizes
       +                                var arrPageSizes = ___getPageSize();
       +                                // Style overlay and show it
       +                                $('#jquery-overlay').css({
       +                                        width:                arrPageSizes[0],
       +                                        height:                arrPageSizes[1]
       +                                });
       +                                // Get page scroll
       +                                var arrPageScroll = ___getPageScroll();
       +                                // Calculate top and left offset for the jquery-lightbox div object and show it
       +                                $('#jquery-lightbox').css({
       +                                        top:        arrPageScroll[1] + (arrPageSizes[3] / 10),
       +                                        left:        arrPageScroll[0]
       +                                });
       +                        });
       +                }
       +                /**
       +                 * Prepares image exibition; doing a image´s preloader to calculate it´s size
       +                 *
       +                 */
       +                function _set_image_to_view() { // show the loading
       +                        // Show the loading
       +                        $('#lightbox-loading').show();
       +                        if ( settings.fixedNavigation ) {
       +                                $('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
       +                        } else {
       +                                // Hide some elements
       +                                $('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
       +                        }
       +                        // Image preload process
       +                        var objImagePreloader = new Image();
       +                        objImagePreloader.onload = function() {
       +                                $('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);
       +                                // Perfomance an effect in the image container resizing it
       +                                _resize_container_image_box(objImagePreloader.width,objImagePreloader.height);
       +                                //        clear onLoad, IE behaves irratically with animated gifs otherwise
       +                                objImagePreloader.onload=function(){};
       +                        };
       +                        objImagePreloader.src = settings.imageArray[settings.activeImage][0];
       +                };
       +                /**
       +                 * Perfomance an effect in the image container resizing it
       +                 *
       +                 * @param integer intImageWidth The image´s width that will be showed
       +                 * @param integer intImageHeight The image´s height that will be showed
       +                 */
       +                function _resize_container_image_box(intImageWidth,intImageHeight) {
       +                        // Get current width and height
       +                        var intCurrentWidth = $('#lightbox-container-image-box').width();
       +                        var intCurrentHeight = $('#lightbox-container-image-box').height();
       +                        // Get the width and height of the selected image plus the padding
       +                        var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image´s width and the left and right padding value
       +                        var intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image´s height and the left and right padding value
       +                        // Diferences
       +                        var intDiffW = intCurrentWidth - intWidth;
       +                        var intDiffH = intCurrentHeight - intHeight;
       +                        // Perfomance the effect
       +                        $('#lightbox-container-image-box').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); });
       +                        if ( ( intDiffW == 0 ) && ( intDiffH == 0 ) ) {
       +                                if ( $.browser.msie ) {
       +                                        ___pause(250);
       +                                } else {
       +                                        ___pause(100);        
       +                                }
       +                        } 
       +                        $('#lightbox-container-image-data-box').css({ width: intImageWidth });
       +                        $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: intImageHeight + (settings.containerBorderSize * 2) });
       +                };
       +                /**
       +                 * Show the prepared image
       +                 *
       +                 */
       +                function _show_image() {
       +                        $('#lightbox-loading').hide();
       +                        $('#lightbox-image').fadeIn(function() {
       +                                _show_image_data();
       +                                _set_navigation();
       +                        });
       +                        _preload_neighbor_images();
       +                };
       +                /**
       +                 * Show the image information
       +                 *
       +                 */
       +                function _show_image_data() {
       +                        $('#lightbox-container-image-data-box').slideDown('fast');
       +                        $('#lightbox-image-details-caption').hide();
       +                        if ( settings.imageArray[settings.activeImage][1] ) {
       +                                $('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();
       +                        }
       +                        // If we have a image set, display 'Image X of X'
       +                        if ( settings.imageArray.length > 1 ) {
       +                                $('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + ( settings.activeImage + 1 ) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show();
       +                        }                
       +                }
       +                /**
       +                 * Display the button navigations
       +                 *
       +                 */
       +                function _set_navigation() {
       +                        $('#lightbox-nav').show();
       +
       +                        // Instead to define this configuration in CSS file, we define here. And it´s need to IE. Just.
       +                        $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
       +                        
       +                        // Show the prev button, if not the first image in set
       +                        if ( settings.activeImage != 0 ) {
       +                                if ( settings.fixedNavigation ) {
       +                                        $('#lightbox-nav-btnPrev').css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' })
       +                                                .unbind()
       +                                                .bind('click',function() {
       +                                                        settings.activeImage = settings.activeImage - 1;
       +                                                        _set_image_to_view();
       +                                                        return false;
       +                                                });
       +                                } else {
       +                                        // Show the images button for Next buttons
       +                                        $('#lightbox-nav-btnPrev').unbind().hover(function() {
       +                                                $(this).css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' });
       +                                        },function() {
       +                                                $(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
       +                                        }).show().bind('click',function() {
       +                                                settings.activeImage = settings.activeImage - 1;
       +                                                _set_image_to_view();
       +                                                return false;
       +                                        });
       +                                }
       +                        }
       +                        
       +                        // Show the next button, if not the last image in set
       +                        if ( settings.activeImage != ( settings.imageArray.length -1 ) ) {
       +                                if ( settings.fixedNavigation ) {
       +                                        $('#lightbox-nav-btnNext').css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' })
       +                                                .unbind()
       +                                                .bind('click',function() {
       +                                                        settings.activeImage = settings.activeImage + 1;
       +                                                        _set_image_to_view();
       +                                                        return false;
       +                                                });
       +                                } else {
       +                                        // Show the images button for Next buttons
       +                                        $('#lightbox-nav-btnNext').unbind().hover(function() {
       +                                                $(this).css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' });
       +                                        },function() {
       +                                                $(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' });
       +                                        }).show().bind('click',function() {
       +                                                settings.activeImage = settings.activeImage + 1;
       +                                                _set_image_to_view();
       +                                                return false;
       +                                        });
       +                                }
       +                        }
       +                        // Enable keyboard navigation
       +                        _enable_keyboard_navigation();
       +                }
       +                /**
       +                 * Enable a support to keyboard navigation
       +                 *
       +                 */
       +                function _enable_keyboard_navigation() {
       +                        $(document).keydown(function(objEvent) {
       +                                _keyboard_action(objEvent);
       +                        });
       +                }
       +                /**
       +                 * Disable the support to keyboard navigation
       +                 *
       +                 */
       +                function _disable_keyboard_navigation() {
       +                        $(document).unbind();
       +                }
       +                /**
       +                 * Perform the keyboard actions
       +                 *
       +                 */
       +                function _keyboard_action(objEvent) {
       +                        // To ie
       +                        if ( objEvent == null ) {
       +                                keycode = event.keyCode;
       +                                escapeKey = 27;
       +                        // To Mozilla
       +                        } else {
       +                                keycode = objEvent.keyCode;
       +                                escapeKey = objEvent.DOM_VK_ESCAPE;
       +                        }
       +                        // Get the key in lower case form
       +                        key = String.fromCharCode(keycode).toLowerCase();
       +                        // Verify the keys to close the ligthBox
       +                        if ( ( key == settings.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) {
       +                                _finish();
       +                        }
       +                        // Verify the key to show the previous image
       +                        if ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) {
       +                                // If we´re not showing the first image, call the previous
       +                                if ( settings.activeImage != 0 ) {
       +                                        settings.activeImage = settings.activeImage - 1;
       +                                        _set_image_to_view();
       +                                        _disable_keyboard_navigation();
       +                                }
       +                        }
       +                        // Verify the key to show the next image
       +                        if ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) {
       +                                // If we´re not showing the last image, call the next
       +                                if ( settings.activeImage != ( settings.imageArray.length - 1 ) ) {
       +                                        settings.activeImage = settings.activeImage + 1;
       +                                        _set_image_to_view();
       +                                        _disable_keyboard_navigation();
       +                                }
       +                        }
       +                }
       +                /**
       +                 * Preload prev and next images being showed
       +                 *
       +                 */
       +                function _preload_neighbor_images() {
       +                        if ( (settings.imageArray.length -1) > settings.activeImage ) {
       +                                objNext = new Image();
       +                                objNext.src = settings.imageArray[settings.activeImage + 1][0];
       +                        }
       +                        if ( settings.activeImage > 0 ) {
       +                                objPrev = new Image();
       +                                objPrev.src = settings.imageArray[settings.activeImage -1][0];
       +                        }
       +                }
       +                /**
       +                 * Remove jQuery lightBox plugin HTML markup
       +                 *
       +                 */
       +                function _finish() {
       +                        $('#jquery-lightbox').remove();
       +                        $('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); });
       +                        // Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
       +                        $('embed, object, select').css({ 'visibility' : 'visible' });
       +                }
       +                /**
       +                 / THIRD FUNCTION
       +                 * getPageSize() by quirksmode.com
       +                 *
       +                 * @return Array Return an array with page width, height and window width, height
       +                 */
       +                function ___getPageSize() {
       +                        var xScroll, yScroll;
       +                        if (window.innerHeight && window.scrollMaxY) {        
       +                                xScroll = window.innerWidth + window.scrollMaxX;
       +                                yScroll = window.innerHeight + window.scrollMaxY;
       +                        } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
       +                                xScroll = document.body.scrollWidth;
       +                                yScroll = document.body.scrollHeight;
       +                        } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
       +                                xScroll = document.body.offsetWidth;
       +                                yScroll = document.body.offsetHeight;
       +                        }
       +                        var windowWidth, windowHeight;
       +                        if (self.innerHeight) {        // all except Explorer
       +                                if(document.documentElement.clientWidth){
       +                                        windowWidth = document.documentElement.clientWidth; 
       +                                } else {
       +                                        windowWidth = self.innerWidth;
       +                                }
       +                                windowHeight = self.innerHeight;
       +                        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
       +                                windowWidth = document.documentElement.clientWidth;
       +                                windowHeight = document.documentElement.clientHeight;
       +                        } else if (document.body) { // other Explorers
       +                                windowWidth = document.body.clientWidth;
       +                                windowHeight = document.body.clientHeight;
       +                        }        
       +                        // for small pages with total height less then height of the viewport
       +                        if(yScroll < windowHeight){
       +                                pageHeight = windowHeight;
       +                        } else { 
       +                                pageHeight = yScroll;
       +                        }
       +                        // for small pages with total width less then width of the viewport
       +                        if(xScroll < windowWidth){        
       +                                pageWidth = xScroll;                
       +                        } else {
       +                                pageWidth = windowWidth;
       +                        }
       +                        arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
       +                        return arrayPageSize;
       +                };
       +                /**
       +                 / THIRD FUNCTION
       +                 * getPageScroll() by quirksmode.com
       +                 *
       +                 * @return Array Return an array with x,y page scroll values.
       +                 */
       +                function ___getPageScroll() {
       +                        var xScroll, yScroll;
       +                        if (self.pageYOffset) {
       +                                yScroll = self.pageYOffset;
       +                                xScroll = self.pageXOffset;
       +                        } else if (document.documentElement && document.documentElement.scrollTop) {         // Explorer 6 Strict
       +                                yScroll = document.documentElement.scrollTop;
       +                                xScroll = document.documentElement.scrollLeft;
       +                        } else if (document.body) {// all other Explorers
       +                                yScroll = document.body.scrollTop;
       +                                xScroll = document.body.scrollLeft;        
       +                        }
       +                        arrayPageScroll = new Array(xScroll,yScroll);
       +                        return arrayPageScroll;
       +                };
       +                 /**
       +                  * Stop the code execution from a escified time in milisecond
       +                  *
       +                  */
       +                 function ___pause(ms) {
       +                        var date = new Date(); 
       +                        curDate = null;
       +                        do { var curDate = new Date(); }
       +                        while ( curDate - date < ms);
       +                 };
       +                // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once
       +                return this.unbind('click').click(_initialize);
       +        };
       +})(jQuery); // Call and execute the function immediately passing the jQuery object
       +\ No newline at end of file
 (DIR) diff --git a/app/assets/javascripts/lightbox.js b/app/assets/javascripts/lightbox.js
       @@ -1,426 +0,0 @@
       -/*
       -        Lightbox JS: Fullsize Image Overlays 
       -        by Lokesh Dhakar - http://www.huddletogether.com
       -
       -        For more information on this script, visit:
       -        http://huddletogether.com/projects/lightbox/
       -
       -        Script featured on Dynamic Drive code library Jan 24th, 06':
       -        http://www.dynamicdrive.com
       -
       -        Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
       -        (basically, do anything you want, just leave my name and link)
       -        
       -        Table of Contents
       -        -----------------
       -        Configuration
       -        
       -        Functions
       -        - getPageScroll()
       -        - getPageSize()
       -        - pause()
       -        - getKey()
       -        - listenKey()
       -        - showLightbox()
       -        - hideLightbox()
       -        - initLightbox()
       -        - addLoadEvent()
       -        
       -        Function Calls
       -        - addLoadEvent(initLightbox)
       -
       -*/
       -
       -
       -
       -//
       -// Configuration
       -//
       -
       -// If you would like to use a custom loading image or close button reference them in the next two lines.
       -var loadingImage = '/assets/loading.gif';                
       -var closeButton = '/assets/close.gif';                
       -
       -
       -
       -
       -
       -//
       -// getPageScroll()
       -// Returns array with x,y page scroll values.
       -// Core code from - quirksmode.org
       -//
       -function getPageScroll(){
       -
       -        var yScroll;
       -
       -        if (self.pageYOffset) {
       -                yScroll = self.pageYOffset;
       -        } else if (document.documentElement && document.documentElement.scrollTop){         // Explorer 6 Strict
       -                yScroll = document.documentElement.scrollTop;
       -        } else if (document.body) {// all other Explorers
       -                yScroll = document.body.scrollTop;
       -        }
       -
       -        arrayPageScroll = new Array('',yScroll) 
       -        return arrayPageScroll;
       -}
       -
       -
       -
       -//
       -// getPageSize()
       -// Returns array with page width, height and window width, height
       -// Core code from - quirksmode.org
       -// Edit for Firefox by pHaez
       -//
       -function getPageSize(){
       -        
       -        var xScroll, yScroll;
       -        
       -        if (window.innerHeight && window.scrollMaxY) {        
       -                xScroll = document.body.scrollWidth;
       -                yScroll = window.innerHeight + window.scrollMaxY;
       -        } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
       -                xScroll = document.body.scrollWidth;
       -                yScroll = document.body.scrollHeight;
       -        } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
       -                xScroll = document.body.offsetWidth;
       -                yScroll = document.body.offsetHeight;
       -        }
       -        
       -        var windowWidth, windowHeight;
       -        if (self.innerHeight) {        // all except Explorer
       -                windowWidth = self.innerWidth;
       -                windowHeight = self.innerHeight;
       -        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
       -                windowWidth = document.documentElement.clientWidth;
       -                windowHeight = document.documentElement.clientHeight;
       -        } else if (document.body) { // other Explorers
       -                windowWidth = document.body.clientWidth;
       -                windowHeight = document.body.clientHeight;
       -        }        
       -        
       -        // for small pages with total height less then height of the viewport
       -        if(yScroll < windowHeight){
       -                pageHeight = windowHeight;
       -        } else { 
       -                pageHeight = yScroll;
       -        }
       -
       -        // for small pages with total width less then width of the viewport
       -        if(xScroll < windowWidth){        
       -                pageWidth = windowWidth;
       -        } else {
       -                pageWidth = xScroll;
       -        }
       -
       -
       -        arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
       -        return arrayPageSize;
       -}
       -
       -
       -//
       -// pause(numberMillis)
       -// Pauses code execution for specified time. Uses busy code, not good.
       -// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
       -//
       -function pause(numberMillis) {
       -        var now = new Date();
       -        var exitTime = now.getTime() + numberMillis;
       -        while (true) {
       -                now = new Date();
       -                if (now.getTime() > exitTime)
       -                        return;
       -        }
       -}
       -
       -//
       -// getKey(key)
       -// Gets keycode. If 'x' is pressed then it hides the lightbox.
       -//
       -
       -function getKey(e){
       -        if (e == null) { // ie
       -                keycode = event.keyCode;
       -        } else { // mozilla
       -                keycode = e.which;
       -        }
       -        key = String.fromCharCode(keycode).toLowerCase();
       -        
       -        if(key == 'x'){ hideLightbox(); }
       -}
       -
       -
       -//
       -// listenKey()
       -//
       -function listenKey () {        document.onkeypress = getKey; }
       -        
       -
       -//
       -// showLightbox()
       -// Preloads images. Pleaces new image in lightbox then centers and displays.
       -//
       -function showLightbox(objLink)
       -{
       -        // prep objects
       -        var objOverlay = document.getElementById('overlay');
       -        var objLightbox = document.getElementById('lightbox');
       -        var objCaption = document.getElementById('lightboxCaption');
       -        var objImage = document.getElementById('lightboxImage');
       -        var objLoadingImage = document.getElementById('loadingImage');
       -        var objLightboxDetails = document.getElementById('lightboxDetails');
       -
       -        
       -        var arrayPageSize = getPageSize();
       -        var arrayPageScroll = getPageScroll();
       -
       -        // center loadingImage if it exists
       -        if (objLoadingImage) {
       -                objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
       -                objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
       -                objLoadingImage.style.display = 'block';
       -        }
       -
       -        // set height of Overlay to take up whole page and show
       -        objOverlay.style.height = (arrayPageSize[1] + 'px');
       -        objOverlay.style.display = 'block';
       -
       -        // preload image
       -        imgPreload = new Image();
       -
       -        imgPreload.onload=function(){
       -                objImage.src = objLink.href;
       -
       -                // center lightbox and make sure that the top and left values are not negative
       -                // and the image placed outside the viewport
       -                var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2);
       -                var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2);
       -                
       -                objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";
       -                objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";
       -
       -
       -                objLightboxDetails.style.width = imgPreload.width + 'px';
       -                
       -                if(objLink.getAttribute('title')){
       -                        objCaption.style.display = 'block';
       -                        //objCaption.style.width = imgPreload.width + 'px';
       -                        objCaption.innerHTML = objLink.getAttribute('title');
       -                } else {
       -                        objCaption.style.display = 'none';
       -                }
       -                
       -                // A small pause between the image loading and displaying is required with IE,
       -                // this prevents the previous image displaying for a short burst causing flicker.
       -                if (navigator.appVersion.indexOf("MSIE")!=-1){
       -                        pause(250);
       -                } 
       -
       -                if (objLoadingImage) {        objLoadingImage.style.display = 'none'; }
       -                objLightbox.style.display = 'block';
       -
       -                // After image is loaded, update the overlay height as the new image might have
       -                // increased the overall page height.
       -                arrayPageSize = getPageSize();
       -                objOverlay.style.height = (arrayPageSize[1] + 'px');
       -                
       -                // Check for 'x' keypress
       -                listenKey();
       -
       -                return false;
       -        }
       -
       -        imgPreload.src = objLink.href;
       -        
       -}
       -
       -
       -
       -
       -
       -//
       -// hideLightbox()
       -//
       -function hideLightbox()
       -{
       -        // get objects
       -        objOverlay = document.getElementById('overlay');
       -        objLightbox = document.getElementById('lightbox');
       -
       -        // hide lightbox and overlay
       -        objOverlay.style.display = 'none';
       -        objLightbox.style.display = 'none';
       -        
       -        // disable keypress listener
       -        document.onkeypress = '';
       -}
       -
       -
       -
       -
       -//
       -// initLightbox()
       -// Function runs on window load, going through link tags looking for rel="lightbox".
       -// These links receive onclick events that enable the lightbox display for their targets.
       -// The function also inserts html markup at the top of the page which will be used as a
       -// container for the overlay pattern and the inline image.
       -//
       -function initLightbox()
       -{
       -        
       -        if (!document.getElementsByTagName){ return; }
       -        var anchors = document.getElementsByTagName("a");
       -
       -        // loop through all anchor tags
       -        for (var i=0; i<anchors.length; i++){
       -                var anchor = anchors[i];
       -
       -                if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
       -                        anchor.onclick = function () {showLightbox(this); return false;}
       -                }
       -        }
       -
       -        // the rest of this code inserts html at the top of the page that looks like this:
       -        //
       -        // <div id="overlay">
       -        //                <a href="#" onclick="hideLightbox(); return false;"><img id="loadingImage" /></a>
       -        //        </div>
       -        // <div id="lightbox">
       -        //                <a href="#" onclick="hideLightbox(); return false;" title="Click anywhere to close image">
       -        //                        <img id="closeButton" />                
       -        //                        <img id="lightboxImage" />
       -        //                </a>
       -        //                <div id="lightboxDetails">
       -        //                        <div id="lightboxCaption"></div>
       -        //                        <div id="keyboardMsg"></div>
       -        //                </div>
       -        // </div>
       -        
       -        var objBody = document.getElementsByTagName("body").item(0);
       -        
       -        // create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
       -        var objOverlay = document.createElement("div");
       -        objOverlay.setAttribute('id','overlay');
       -        objOverlay.onclick = function () {hideLightbox(); return false;}
       -        objOverlay.style.display = 'none';
       -        objOverlay.style.position = 'absolute';
       -        objOverlay.style.top = '0';
       -        objOverlay.style.left = '0';
       -        objOverlay.style.zIndex = '90';
       -         objOverlay.style.width = '100%';
       -        objBody.insertBefore(objOverlay, objBody.firstChild);
       -        
       -        var arrayPageSize = getPageSize();
       -        var arrayPageScroll = getPageScroll();
       -
       -        // preload and create loader image
       -        var imgPreloader = new Image();
       -        
       -        // if loader image found, create link to hide lightbox and create loadingimage
       -        imgPreloader.onload=function(){
       -
       -                var objLoadingImageLink = document.createElement("a");
       -                objLoadingImageLink.setAttribute('href','#');
       -                objLoadingImageLink.onclick = function () {hideLightbox(); return false;}
       -                objOverlay.appendChild(objLoadingImageLink);
       -                
       -                var objLoadingImage = document.createElement("img");
       -                objLoadingImage.src = loadingImage;
       -                objLoadingImage.setAttribute('id','loadingImage');
       -                objLoadingImage.style.position = 'absolute';
       -                objLoadingImage.style.zIndex = '150';
       -                objLoadingImageLink.appendChild(objLoadingImage);
       -
       -                imgPreloader.onload=function(){};        //        clear onLoad, as IE will flip out w/animated gifs
       -
       -                return false;
       -        }
       -
       -        imgPreloader.src = loadingImage;
       -
       -        // create lightbox div, same note about styles as above
       -        var objLightbox = document.createElement("div");
       -        objLightbox.setAttribute('id','lightbox');
       -        objLightbox.style.display = 'none';
       -        objLightbox.style.position = 'absolute';
       -        objLightbox.style.zIndex = '100';        
       -        objBody.insertBefore(objLightbox, objOverlay.nextSibling);
       -        
       -        // create link
       -        var objLink = document.createElement("a");
       -        objLink.setAttribute('href','#');
       -        objLink.setAttribute('title','Click to close');
       -        objLink.onclick = function () {hideLightbox(); return false;}
       -        objLightbox.appendChild(objLink);
       -
       -        // preload and create close button image
       -        var imgPreloadCloseButton = new Image();
       -
       -        // if close button image found, 
       -        imgPreloadCloseButton.onload=function(){
       -
       -                var objCloseButton = document.createElement("img");
       -                objCloseButton.src = closeButton;
       -                objCloseButton.setAttribute('id','closeButton');
       -                objCloseButton.style.position = 'absolute';
       -                objCloseButton.style.zIndex = '200';
       -                objLink.appendChild(objCloseButton);
       -
       -                return false;
       -        }
       -
       -        imgPreloadCloseButton.src = closeButton;
       -
       -        // create image
       -        var objImage = document.createElement("img");
       -        objImage.setAttribute('id','lightboxImage');
       -        objLink.appendChild(objImage);
       -        
       -        // create details div, a container for the caption and keyboard message
       -        var objLightboxDetails = document.createElement("div");
       -        objLightboxDetails.setAttribute('id','lightboxDetails');
       -        objLightbox.appendChild(objLightboxDetails);
       -
       -        // create caption
       -        var objCaption = document.createElement("div");
       -        objCaption.setAttribute('id','lightboxCaption');
       -        objCaption.style.display = 'none';
       -        objLightboxDetails.appendChild(objCaption);
       -
       -        // create keyboard message
       -        var objKeyboardMsg = document.createElement("div");
       -        objKeyboardMsg.setAttribute('id','keyboardMsg');
       -        objKeyboardMsg.innerHTML = 'press <kbd>x</kbd> to close';
       -        objLightboxDetails.appendChild(objKeyboardMsg);
       -
       -
       -}
       -
       -
       -
       -
       -//
       -// addLoadEvent()
       -// Adds event to window.onload without overwriting currently assigned onload functions.
       -// Function found at Simon Willison's weblog - http://simon.incutio.com/
       -//
       -function addLoadEvent(func)
       -{        
       -        var oldonload = window.onload;
       -        if (typeof window.onload != 'function'){
       -            window.onload = func;
       -        } else {
       -                window.onload = function(){
       -                oldonload();
       -                func();
       -                }
       -        }
       -
       -}
       -
       -
       -
       -addLoadEvent(initLightbox);        // run initLightbox onLoad
 (DIR) diff --git a/app/assets/stylesheets/jquery.lightbox-0.5.css b/app/assets/stylesheets/jquery.lightbox-0.5.css
       @@ -0,0 +1,101 @@
       +/**
       + * jQuery lightBox plugin
       + * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/)
       + * and adapted to me for use like a plugin from jQuery.
       + * @name jquery-lightbox-0.5.css
       + * @author Leandro Vieira Pinho - http://leandrovieira.com
       + * @version 0.5
       + * @date April 11, 2008
       + * @category jQuery plugin
       + * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com)
       + * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US
       + * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin
       + */
       +#jquery-overlay {
       +        position: absolute;
       +        top: 0;
       +        left: 0;
       +        z-index: 90;
       +        width: 100%;
       +        height: 500px;
       +}
       +#jquery-lightbox {
       +        position: absolute;
       +        top: 0;
       +        left: 0;
       +        width: 100%;
       +        z-index: 100;
       +        text-align: center;
       +        line-height: 0;
       +}
       +#jquery-lightbox a img { border: none; }
       +#lightbox-container-image-box {
       +        position: relative;
       +        background-color: #fff;
       +        width: 250px;
       +        height: 250px;
       +        margin: 0 auto;
       +}
       +#lightbox-container-image { padding: 10px; }
       +#lightbox-loading {
       +        position: absolute;
       +        top: 40%;
       +        left: 0%;
       +        height: 25%;
       +        width: 100%;
       +        text-align: center;
       +        line-height: 0;
       +}
       +#lightbox-nav {
       +        position: absolute;
       +        top: 0;
       +        left: 0;
       +        height: 100%;
       +        width: 100%;
       +        z-index: 10;
       +}
       +#lightbox-container-image-box > #lightbox-nav { left: 0; }
       +#lightbox-nav a { outline: none;}
       +#lightbox-nav-btnPrev, #lightbox-nav-btnNext {
       +        width: 49%;
       +        height: 100%;
       +        zoom: 1;
       +        display: block;
       +}
       +#lightbox-nav-btnPrev { 
       +        left: 0; 
       +        float: left;
       +}
       +#lightbox-nav-btnNext { 
       +        right: 0; 
       +        float: right;
       +}
       +#lightbox-container-image-data-box {
       +        font: 10px Verdana, Helvetica, sans-serif;
       +        background-color: #fff;
       +        margin: 0 auto;
       +        line-height: 1.4em;
       +        overflow: auto;
       +        width: 100%;
       +        padding: 0 10px 0;
       +}
       +#lightbox-container-image-data {
       +        padding: 0 10px; 
       +        color: #666; 
       +}
       +#lightbox-container-image-data #lightbox-image-details { 
       +        width: 70%; 
       +        float: left; 
       +        text-align: left; 
       +}        
       +#lightbox-image-details-caption { font-weight: bold; }
       +#lightbox-image-details-currentNumber {
       +        display: block; 
       +        clear: left; 
       +        padding-bottom: 1.0em;        
       +}                        
       +#lightbox-secNav-btnClose {
       +        width: 66px; 
       +        float: right;
       +        padding-bottom: 0.7em;        
       +}
       +\ No newline at end of file
 (DIR) diff --git a/app/views/analyze/view.html.erb b/app/views/analyze/view.html.erb
       @@ -59,3 +59,10 @@
        </table>
        
        <%= raw(will_paginate @results) %>
       +
       +<script type="text/javascript">
       +$(function() {
       +        // Use this example, or...
       +        $('a[@rel*=lightbox]').lightBox();
       +});
       +</script>
 (DIR) diff --git a/app/views/analyze/view_matches.html.erb b/app/views/analyze/view_matches.html.erb
       @@ -94,3 +94,10 @@
          </tr>
        <% end %>
        </table>
       +
       +<script type="text/javascript">
       +$(function() {
       +        // Use this example, or...
       +        $('a[@rel*=lightbox]').lightBox();
       +});
       +</script>