/*
 * Filename:	jQuery.jGlideMenu.js (formally fastFind)
 * Format:	Javascript Plugin : jQuery Framework
 * Author:      jmcclure@sonicradish.com
 * Copyright:   2006-2009 sonicradish.com
 *
 * License:     You may use this code on your site and alter it as you see fit, all I ask is that you include a reference to my original version and send me any bug fixes that you find.
 * 
 * Revision:	0.66
 * Updated:	2008-03-24 - Version 0.64
 * 		2009-03-03 - Version 0.65
 *		2009-04-01 - Version 0.66 - Added fix for IE7 
 *		2009-04-07 - Version 0.67 - Udated to Work with Latest jQuery Library (1.3.2) and with jQuery UI (1.7.1) Support
 *			                  - Added variable "demoMode" allowing whether clicked links follow through or not
 *					  - Fixed CSS Bug That Prevented Right Arrows from Displaying in Chrome/Safari
 *
 *	Please send feedback and questions to: jmcclure@sonicradish.com
 */

/*
 * To Do Items:
 * 
 *	- Drop Shadow Support 
 *	- Toggle Menu Support (with in/out effects)	
 *		- Basic Support (Fade/Slide/Animate)
 *		- Enchant Library Support
 *	- Launch at Mouse Position Support
 *	- Easing FX Support
 *	- Support for Multiple Menus on Single Page
 *
 */

/*
 * Known Issues
 *
 * 	- When slideRight == false, tile contents aren't rendered until slide completes
 *	- When multiple instances on single page, all events occur in last instance
 *	- DropShadow/Shadow Plugins not currently working
 * 	- Easing transitions not working for horizontal scrolling
 *	- Toggle Method Needs Further Development
 *	- Keyboard Support Needs Work (Space Key Triggers without mouse Over)
 *
 * To Do
 *
 *	- Better Keyboard Support
 * 	- shadowBox (inline effect)
 *	- MouseHold Instead of/or in addition to Hover
 *
 */

/*
 * Testing & Support	Version 0.6.7
 *
 * 	+ Firefox
 *		+ 2.x (XP)		Okay
 *		+ 2.x (OSX)		Okay
 *		+ 3.x			Okay
 *	
 *	+ Internet Explorer
 *		+ 6.x			Okay
 *		+ 7.x			Okay
 *
 *	+ Opera
 *		+ 9.26			Okay
 *		+ 9.64			Okay
 *	
 *	+ Safari
 *		+ 3.x (XP)		Okay
 *		+ 3.x (OSX)		Okay
 *		+ 4.x (XP)		Okay
 *
 *	+ Google Chrome
 *		+ 1.0.x			Okay
 */

jQuery.jGlideMenu = {

    // <-- Global Declarations

    // Set By Configuration
    useDropShadow: new Boolean(),
    useDragDrop: new Boolean(),
    defaultScrollSpeed: new Number(0),
    defaultScrollBackSpeed: new Number(0),
    slideRight: new Boolean(),
    useSmoothScrolling: new Boolean(),
    easeFx: new String(''),
    closeLinkMarkUp: new String(''),
    menuShowFx: new String(''),
    menuHideFx: new String(''),
    tileWidth: new Number(0),
    tileInset: new Number(0),
    itemsToDisplay: new Number(8),
    useTileURL: new Boolean(),
    tileSource: new String(''),
    URLParams: new Object(),
    loadImage: new String(''),
    loadImageStyle: new Object(),
    initialTile: new String(''),
    alertOnError: new Boolean(),
    captureLinks: new Boolean(),
    imagePath: new String(),

    // Set By jGlideMenu Script
    tileCount: new Number(0),
    animation: new Boolean(),
    helperImage: new Boolean(),
    currentElement: new Object(),
    currentElementID: new String(''),
    hasDragDropSupport: new Boolean(),
    hasShadowSupport: new Boolean(),
    displayToggle: new Boolean(),
    tileScrollPosition: new Array(),
    smoothScrollTimer: new Array(),
    mouseHover: new Boolean(),
    demoMode: new Boolean(),

    // --> Global Declarations

    // Create Plugin Instance
    initialize: function (o) {
        // Return jQuery
        return this.each(function () {

            // Init Variables	
            jQuery.jGlideMenu.animation = false;
            jQuery.jGlideMenu.helperImage = false;
            jQuery.jGlideMenu.hasDragDropSupport = false;
            jQuery.jGlideMenu.hasShadowSupport = false;
            jQuery.jGlideMenu.tileCount = 0;
            jQuery.jGlideMenu.displayToggle = false;
            jQuery.jGlideMenu.mouseHover = false;
            jQuery.jGlideMenu.demoMode = false;

            // Store Current Element	
            jQuery.jGlideMenu.currentElement = jQuery(this);
            if (this.id) jQuery.jGlideMenu.currentElementID = this.id;

            // Default Values
            var s = {
                itemsToDisplay: 8,
                tileInset: 7,
                tileWidth: 227,
                useDropShadow: false,
                slideRight: true,
                useDragDrop: true,
                useSmoothScrolling: true,
                useTileURL: false,
                defaultScrollSpeed: 750,
                defaultScrollBackSpeed: 800,
                tileSource: 'myTiles',
                URLParams: {},
                closeLinkMarkUp: 'Close',
                menuShowFx: 'fadeIn',
                menuHideFx: 'fadeOut',
                easeFx: 'linear',
                loadImage: '/images/menu/ajax.gif',
                initialTile: 'tile_000',
                alertOnError: false,
                captureLinks: true,
                loadImageStyle: { 'position': 'absolute', 'bottom': '10px', 'left': '10px', 'z-index': '999' },
                imagePath: '/images/menu/',
                demoMode: false
            };

            // Merge Submitted Settings
            if (o) jQuery.extend(s, o);

            // Check Library Support for FX
            jQuery.jGlideMenu.checkFeatures();

            // Ensure Values (Basic)
            if (s.closeLinkMarkUp.length < 1) s.closeLinkMarkUp = 'x Close';
            if (parseInt(s.itemsToDisplay) < 1) s.itemsToDisplay = 1;
            if (s.initialTile.length < 0) jQuery.jGlideMenu.errorTrap('Invalid Configuration');

            // Set Global Values 
            for (i in s) jQuery.jGlideMenu[i] = s[i];

            // <-- Remove Any Place Holder Content From Element and Hide Tiles
            // Hide Tiles In View (if DOM Mode)
            if (jQuery.jGlideMenu.useTileURL == false && jQuery.jGlideMenu.tileSource.length > 0) {
                jQuery(jQuery.jGlideMenu.tileSource).css('display', 'none');
                // If Tiles are Inside of Element, Remove Everything Else
                /*
                // Old Method Used with jQuery 1.2.x
                var x = jQuery(jQuery.jGlideMenu.currentElement).children();
                jQuery(x+':not('+jQuery.jGlideMenu.tileSource+')').remove();
                */
                jQuery(jQuery.jGlideMenu.currentElement).children().not(jQuery.jGlideMenu.tileSource).remove();
            }
            else jQuery(jQuery.jGlideMenu.currentElement).html('');
            // --> Remove Any Place Holder Content From Element and Hide Tiles

            // <-- Create Menu Structure
            jQuery(jQuery.jGlideMenu.currentElement).append('<div class="jGM_header"><a href="#">' + jQuery.jGlideMenu.closeLinkMarkUp + '</a></div>')
								.append('<div class="jGM_wrapper" id="jGM_wrapper_' + this.id + '"></div>');
            // --> Create Menu Structure

            // <-- Create Animation/Load Image
            var img = document.createElement('img');
            img.src = jQuery.jGlideMenu.loadImage;
            img.style.display = 'none';
            img.id = 'jGM_helper' + jQuery.jGlideMenu.currentElementID;
            jQuery(jQuery.jGlideMenu.currentElement).append(img);
            jQuery('img#' + img.id).css(jQuery.jGlideMenu.loadImageStyle);
            jQuery.jGlideMenu.helperImage = true;
            // --> Create Animation/Load Image

            // Add Drag Drop Support
            if (jQuery.jGlideMenu.hasDragDropSupport == true && jQuery.jGlideMenu.useDragDrop == true) {
                if (jQuery.isFunction(jQuery('body').Draggable))
                    jQuery(this).Draggable({ handle: '.jGM_header' });
                else
                    jQuery(this).draggable({ handle: '.jGM_header' });
            }

            // Add Drop Shaddow Support
            if (jQuery.jGlideMenu.hasShadowSupport == true && jQuery.jGlideMenu.useDropShadow == true) {
                if (jQuery.isFunction(jQuery('body').dropShadow))
                    jQuery(this).dropShadow();
                else
                    jQuery(this).shadow({ color: '#cccccc' });
            }

            // Triggle Close Button
            jQuery(jQuery.jGlideMenu.currentElement).find('div.jGM_header a').bind('click', function () {
                if (jQuery.jGlideMenu.displayToggle == true) return false;
                jQuery.jGlideMenu.toggleDisplay(true);
                return false;
            });

            // Check for Mouse Over Menu
            jQuery(this).hover(function () { jQuery.jGlideMenu.mouseHover = true; }, function () { jQuery.jGlideMenu.mouseHover = false; });

            // Load Initial Tile
            jQuery.jGlideMenu.loadTile(jQuery.jGlideMenu.initialTile, jQuery.jGlideMenu.URLParams);


        });
    },

    // Toggle Display of Menu
    toggleDisplay: function (r) {
        jQuery.jGlideMenu.displayToggle = true;
        jQuery.jGlideMenu.mouseHover == false;
        if (jQuery(jQuery.jGlideMenu.currentElement).css('display') == 'block')
            var toggle_value = 0;
        else
            var toggle_value = 1;
        jQuery(jQuery.jGlideMenu.currentElement).animate(
                        {
                            opacity: toggle_value
                        }, 'slow', function () {
                            // Check for Reset Flag
                            if (r == true) {
                                jQuery.jGlideMenu.scrollToTile(0, jQuery.jGlideMenu.defaultScrollBackSpeed);
                                //jQuery.jGlideMenu.tileScrollPosition = [];
                                jQuery.jGlideMenu.tileScrollPosition[0] = 0;
                            }
                            if (toggle_value > 0)
                                jQuery(this).css('display', 'block');
                            else
                                jQuery(this).css('display', 'none');
                            jQuery.jGlideMenu.displayToggle = false;
                        }
                );
    },

    // Check Feature Availability
    checkFeatures: function () {
        // Check Drap Drop Support (jQuery Interface)
        jQuery.jGlideMenu.hasDragDropSupport = jQuery.isFunction(jQuery('body').Draggable);
        // Check Drag Drop Support (jQuery UI)
        if (jQuery.jGlideMenu.hasDragDropSupport == false)
            jQuery.jGlideMenu.hasDragDropSupport = jQuery.isFunction(jQuery('body').draggable);

        // <-- Not Supported Currently
        // Check Shadow Support (DropShadow Plugin)
        jQuery.jGlideMenu.hasShadowSupport = jQuery.isFunction(jQuery('body').dropShadow);
        // Check Shadow Support (jQuery UI)
        if (jQuery.jGlideMenu.hasShadowSupport == false)
            jQuery.jGlideMenu.hasShadowSupport = jQuery.isFunction(jQuery('body').shadow);
        // --> Not Supported Currently
        return;
    },

    parseURL: function (u) {
        // MSIE 6 (maybe 7) Returns #tile_001 as http://...#tile_001

        // ## $.browser is Depreciated !!! ##
        if (!$.browser.msie) {
            return u;
        }
        if (u.indexOf('#tile_') < 0) {
            // Regular Link
            return u;
        }
        // Navigation Link
        var bits = u.split('#');
        return '#' + bits[(bits.length - 1)];
    },

    // Return Number of Active Tiles
    countTiles: function () { jQuery.jGlideMenu.tileCount = parseInt(jQuery('div.jGM_tile').size()); },

    // Create and Load Tile
    loadTile: function (u, p) {        
        // Create New Tile Wrapper
        var ptr = document.createElement('div');
        // New Tile Position
        var ctr = jQuery.jGlideMenu.tileCount + 1;
        ptr.id = 'jGM_tile_' + jQuery.jGlideMenu.currentElementID + '_' + ctr;
        // Position of Tile
        if (jQuery.jGlideMenu.slideRight == true)
            var off = jQuery.jGlideMenu.tileWidth * jQuery.jGlideMenu.tileCount + jQuery.jGlideMenu.tileInset;
        else
            var off = jQuery.jGlideMenu.tileWidth * jQuery.jGlideMenu.tileCount * -1 + jQuery.jGlideMenu.tileInset;
        // Add to DOM
        jQuery('#jGM_wrapper_' + jQuery.jGlideMenu.currentElementID).append(ptr);
        // Apply Class & Style to Tile
        jQuery('#' + ptr.id).addClass('jGM_tile').css({
            top: 0,
            left: off + 'px',
            height: '288px',
            width: '213px',
            position: 'absolute',
            overflow: 'hidden',
            margin: 0,
            padding: 0,
            border: 0,
            display: 'block'
        });

        // Default Tile Content
        var tmpl = '<div style="height:100%;margin:0;border:0;width:100%;padding:0;text-align:center;">'
                                    + '<h3>Missing Tile</h3><p>Unable to locate the requested Tile</p></div>';

        // Load Content Into Tile
        if (jQuery.jGlideMenu.useTileURL == false) {
            // DOM
            if (jQuery('ul#' + u).size() < 1) {
                jQuery.jGlideMenu.errorTrap('Invalid Tile Request');
                return false;
            }
            var title = jQuery('ul#' + u).attr('title');
            var desc = jQuery('ul#' + u).attr('alt');
            var items = jQuery('ul#' + u + ' li').size();
            var links = [];
            jQuery('ul#' + u + ' li').each(function () {
                if (jQuery('a', this).size() > 0)
                    links[links.length] = [jQuery('a', this).attr('href'), jQuery('a', this).text(), 1];
                else
                    links[links.length] = [jQuery(this).attr('rel'), jQuery(this).text(), 0];
            });
            var tmpl = jQuery.jGlideMenu.buildTile(title, desc, links);
        }
        else {
            // AJAX
            if (jQuery.jGlideMenu.tileSource.length < 1) {
                jQuery.jGlideMenu.errorTrap('Invalid AJAX Request');
                return false;
            }

            // Bind AJAX Events
            var mon = 'img#jGM_helper' + jQuery.jGlideMenu.currentElementID;
            jQuery(mon).ajaxStart(function () { jQuery(this).animate({ opacity: 'show' }, 'fast'); })
                                   .ajaxStop(function () { jQuery(this).animate({ opacity: 'hide' }, 'slow'); });
            p.tile = u;
            jQuery.ajax({
                type: "POST",
                url: jQuery.jGlideMenu.tileSource,
                data: p,
                async: false,
                success: function (xhtml) {
                    // Make it Usable --> "var dom = jQuery(xhtml)" is crashing FF2
                    jQuery('body').append('<div id="jGM_temp_' + jQuery.jGlideMenu.currentElementID + p.tile + '" style="display:none;">' + xhtml + '</div>');
                    if (jQuery('#jGM_temp_' + jQuery.jGlideMenu.currentElementID + p.tile + ' ul#' + u).size() < 1) {
                        jQuery.jGlideMenu.errorTrap('AJAX: Invalid Tile Request');
                        return false;
                    }
                    var title = jQuery('#jGM_temp_' + jQuery.jGlideMenu.currentElementID + p.tile + ' ul#' + u).attr('title');
                    var desc = jQuery('#jGM_temp_' + jQuery.jGlideMenu.currentElementID + p.tile + ' ul#' + u).attr('alt');
                    var items = jQuery('#jGM_temp_' + jQuery.jGlideMenu.currentElementID + p.tile + ' ul#' + u + ' li').size();
                    var links = [];
                    jQuery('#jGM_temp_' + jQuery.jGlideMenu.currentElementID + p.tile + ' ul#' + u + ' li').each(function () {
                        if (jQuery('a', this).size() > 0)
                            links[links.length] = [jQuery('a', this).attr('href'), jQuery('a', this).text(), 1];
                        else
                            links[links.length] = [jQuery(this).attr('rel'), jQuery(this).text(), 0];
                    });
                    // Remove Temporary Tile
                    jQuery('#jGM_temp_' + jQuery.jGlideMenu.currentElementID + p.tile).remove();
                    tmpl = jQuery.jGlideMenu.buildTile(title, desc, links);
                    // Remove AJAX Event Triggers					
                    jQuery(mon).ajaxStart(function () { }).ajaxStop(function () { });
                },
                error: function (rslt) {
                    jQuery.jGlideMenu.errorTrap('Invalid AJAX Tile Request');
                    // Remove AJAX Event Triggers
                    jQuery(mon).ajaxStart(function () { }).ajaxStop(function () { });
                }
            });
        }

        // Add to DOM
        jQuery('#' + ptr.id).html(tmpl);

        // Catch Click Event for List Items	
        jQuery('#' + ptr.id + ' div.jGM_content a').bind('click', function () {
            var target = '';
            target = jQuery.jGlideMenu.parseURL(jQuery(this).attr('href'));

            if (target.length < 1) { return false; }

            if (target.substr(0, 1) == '#') {
                if (jQuery.jGlideMenu.animation == true) return false;
                var dest = target.substr(1, target.length - 1);
                //					alert('Pager Scroll Request: ' + target);
                //					alert('Pager Scroll dest: ' + dest);
                //					alert('Pager Scroll URLParams: ' + jQuery.jGlideMenu.URLParams);
                jQuery.jGlideMenu.loadTile(dest, jQuery.jGlideMenu.URLParams);
                return false;
            }
            else {
                if (jQuery.jGlideMenu.demoMode) {
                    alert('Navigation Requestion: ' + target);
                }
                else {
                    window.location.href = target;
                }

                // Prevent Default Action As Needed
                if (jQuery.jGlideMenu.captureLinks == true) return false;
            }
            return true;
        });

        // Update Tile Count
        jQuery.jGlideMenu.countTiles();

        // Add Back/Reset Buttons (as Needed)
        if (jQuery.jGlideMenu.tileCount > 1) {
            // Insert Back Button
            jQuery('#' + ptr.id).append('<div class="jGM_back"><a href="#">&laquo; Atras</a></div>');
            jQuery('#' + ptr.id + ' div.jGM_back').bind('click', function () {
                if (jQuery.jGlideMenu.animation == true) return false;
                jQuery.jGlideMenu.scrollToTile((ctr - 1), jQuery.jGlideMenu.defaultScrollBackSpeed);
                return false;
            });

            if (jQuery.jGlideMenu.tileCount > 2) {
                // Insert Reset Button
                jQuery('#' + ptr.id).append('<div class="jGM_reset"><a href="#">&laquo; Inicio</a></div>');
                jQuery('#' + ptr.id + ' div.jGM_reset').bind('click', function () {
                    if (jQuery.jGlideMenu.animation == true) return false;
                    jQuery.jGlideMenu.scrollToTile(1, jQuery.jGlideMenu.defaultScrollBackSpeed);
                    return false;
                });
            }
        }

        // Set Tile Scroll Position
        jQuery.jGlideMenu.tileScrollPosition[ctr] = 0;

        // Set Pager (Init)
        jQuery.jGlideMenu.drawPagers(ptr.id, jQuery('#' + ptr.id + ' .jGM_content a').size());

        // Catch Pager Scroll
        if (jQuery.jGlideMenu.useSmoothScrolling == false) {
            jQuery('#' + ptr.id + ' .jGM_pager a').click(function () {
                var dir = 1;
                if (jQuery(this).attr('rel') == 'Up') dir = 0;
                jQuery.jGlideMenu.scrollItems(dir);
            });
        }
        else {
            jQuery('#' + ptr.id + ' .jGM_pager a').hover(function () {
                var dir = 1;
                if (jQuery(this).attr('rel') == 'Up')
                    dir = 0;
                jQuery.jGlideMenu.smoothScrollTimer[jQuery.jGlideMenu.tileCount]
					= window.setInterval('jQuery.jGlideMenu.scrollItems(' + dir + ')', 250);
            }, function () {
                window.clearInterval(jQuery.jGlideMenu.smoothScrollTimer[jQuery.jGlideMenu.tileCount]);
            });
        }

        // Scroll
        jQuery.jGlideMenu.scrollToTile(ctr, jQuery.jGlideMenu.defaultScrollSpeed);

    },

    // Scroll Items
    scrollItems: function (d) {
        var x = '#jGM_tile_' + jQuery.jGlideMenu.currentElementID + '_' + jQuery.jGlideMenu.tileCount;
        var s = jQuery(x + ' .jGM_content a');
        var c = jQuery.jGlideMenu.tileScrollPosition[jQuery.jGlideMenu.tileCount];
        // Enforce Bounds
        if (c <= 0 && d == 0) return;
        if (c + jQuery.jGlideMenu.itemsToDisplay >= jQuery(s).size() && d == 1) return;
        // Handle Scroll
        if (d == 0)
            jQuery.jGlideMenu.tileScrollPosition[jQuery.jGlideMenu.tileCount]--;
        else
            jQuery.jGlideMenu.tileScrollPosition[jQuery.jGlideMenu.tileCount]++;
        jQuery(s).show();
        jQuery(x + ' .jGM_content').children('a:lt(' + jQuery.jGlideMenu.tileScrollPosition[jQuery.jGlideMenu.tileCount] + ')').hide();
        jQuery.jGlideMenu.drawPagers(x.substr(1, x.length), jQuery(s).size());
    },

    // Draw Pager Controls (Toggle Visibility)
    drawPagers: function (p, c) {
        jQuery('#' + p + ' .jGM_pager').find('a').each(function () {
            if (jQuery(this).attr('rel') == 'Up') {
                if (jQuery.jGlideMenu.tileScrollPosition[jQuery.jGlideMenu.tileCount] > 0)
                    jQuery(this).css('display', 'block');
                else
                    jQuery(this).css('display', 'none');
            }
            else {
                if (jQuery.jGlideMenu.tileScrollPosition[jQuery.jGlideMenu.tileCount] + jQuery.jGlideMenu.itemsToDisplay <
						jQuery('#' + p + ' .jGM_content a').size())
                    jQuery(this).css('display', 'block');
                else
                    jQuery(this).css('display', 'none');
            }
        });
    },

    // Remove Tiles
    cleanTiles: function (n) {
        var start = n + 1;
        var stop = jQuery.jGlideMenu.tileCount;

        if (n >= stop) return false;

        for (var i = start; i <= stop; i++) {
            jQuery('#jGM_tile_' + jQuery.jGlideMenu.currentElementID + '_' + i).remove();
            jQuery.jGlideMenu.tileScrollPosition[i] = 0;
        }

        jQuery.jGlideMenu.countTiles();

        return;
    },

    // Handle Horizontal Scroll
    scrollToTile: function (n, s) {

        // Get Tile Count
        jQuery.jGlideMenu.countTiles();
        var t = jQuery.jGlideMenu.tileCount;

        // Enforce Bounds	
        if (n > t) n = t;
        if (n < 1) n = 1;

        // Set Speed	
        if (!s) s = jQuery.jGlideMenu.defaultScrollSpeed;

        var b = (jQuery.jGlideMenu.tileWidth * n) - jQuery.jGlideMenu.tileWidth;
        var a = (jQuery.jGlideMenu.slideRight == true) ? b * -1 : b;
        // Animate
        jQuery.jGlideMenu.animation = true;
        jQuery('div#jGM_wrapper_' + jQuery.jGlideMenu.currentElementID).animate({ 'left': a }, s, jQuery.jGlideMenu.easeFx, function () {
            // Remove Extra Tiles
            if (n < t)
                jQuery.jGlideMenu.cleanTiles(n);
            if (a != 0) a += 'px';
            jQuery(this).css({ 'left': a });

            jQuery.jGlideMenu.animation = false;
        });
    },

    // Return Template
    buildTile: function (t, d, l) {
        if (jQuery.jGlideMenu.imagePath.length > 1 && jQuery.jGlideMenu.imagePath.substr(-1, 1) != '/')
            jQuery.jGlideMenu.imagePath += '/';

        var template = new String('');
        // Header Layout
        template = '<div class="jGM_cats"><h1>' + t + '</h1><p class="jGM_desc">' + d + '</p></div>';
        // Scroll Up
        template += '<div class="jGM_pager"><a href="#" rel="Up" title="Scroll Up" style="display:none"><img src="'
				+ jQuery.jGlideMenu.imagePath + 'arrow_up.gif" alt="Scroll Up"/></a></div>';
        // Items
        template += '<div class="jGM_content">';
        for (var i = 0; i < l.length; i++) {
            var hash = (l[i][2] == 1) ? '' : '#';
            var type = (l[i][2] == 1) ? '' : ' class="jGM_more"';
            template += '<a href="' + hash + l[i][0] + '"' + type + '>' + l[i][1] + '</a>';
            //<a href="fetch://{'current':5,'previous':1,'apiKey':'bd51b0648d268122996b9e68cfd86175','client':'ActiveSpotLight'}"  class="jGM_more">More Options..</a>
        }
        template += '</div>';
        // Scroll Down
        template += '<div class="jGM_pager"><a href="#" rel="Down" title="Scroll Down" style="display:none"><img src="'
				+ jQuery.jGlideMenu.imagePath + 'arrow_dn.gif" alt="Scroll Up"/></a></div>';
        return template;
    },

    // Error Function
    errorTrap: function (m) {
        if (jQuery.jGlideMenu.alertOnError == true)
            alert(m);
        return;
    }
}

// Extend Global jQuery Functions
jQuery.fn.jGlideMenu		= jQuery.jGlideMenu.initialize;
jQuery.fn.jGlideMenuToggle	= jQuery.jGlideMenu.toggleDisplay;
jQuery.fn.reverse		= function() { return this.pushStack(this.get().reverse(), arguments); };
