﻿jQuery.jGlideMenu =
{
    defaultScrollSpeed: new Number(0),
    defaultScrollBackSpeed: new Number(0), slideRight: new Boolean(), easeFx: new String(''),
    tileWidth: new Number(0), tileInset: new Number(0),
    useTileURL: new Boolean(), tileSource: new String(''), URLParams: new Object(), 
    initialTile: new String(''), imagePath: new String(),
    tileCount: new Number(0), animation: new Boolean(), currentElement: new Object(), currentElementID: new String(''),
    tileScrollPosition: new Array(),    
    initialize: function(o) 
    {
        return this.each(
        function() {
            jQuery.jGlideMenu.animation = false;
            jQuery.jGlideMenu.tileCount = 0;                        
            jQuery.jGlideMenu.currentElement = jQuery(this);
            if (this.id)
                jQuery.jGlideMenu.currentElementID = this.id;
            var s =
            {
                tileInset: 7,
                tileWidth: 227,                
                slideRight: true,
                useTileURL: false,
                defaultScrollSpeed: 100,
                defaultScrollBackSpeed: 125,
                tileSource: 'myTiles',
                URLParams: {},                
                easeFx: 'linear',                
                initialTile: 'tile_001',                                
                imagePath: '/Include/Images/'
                
            };
            if (o)
                jQuery.extend(s, o);    

            for (i in s)
                jQuery.jGlideMenu[i] = s[i];
            if (jQuery.jGlideMenu.useTileURL == false && jQuery.jGlideMenu.tileSource.length > 0) 
            {
                jQuery(jQuery.jGlideMenu.tileSource).css('display', 'none');
                jQuery(jQuery.jGlideMenu.currentElement).children().not(jQuery.jGlideMenu.tileSource).remove();
            }
            else
                jQuery(jQuery.jGlideMenu.currentElement).html('');

            jQuery(jQuery.jGlideMenu.currentElement).append('<div class="jGM_wrapper" id="jGM_wrapper_' + this.id + '"></div>');
            jQuery.jGlideMenu.loadTile(jQuery.jGlideMenu.initialTile, jQuery.jGlideMenu.URLParams);
        });
    },

    parseURL: function(u) 
    {
        if (!$.browser.msie)
            return u;
        if (u.indexOf('#tile_') < 0) 
            return u;
        var bits = u.split('#');
        return '#' + bits[(bits.length - 1)];
    },
    countTiles: function() 
    {
        jQuery.jGlideMenu.tileCount = parseInt(jQuery('div.jGM_tile').size());
    },
    loadTile: function(pTileID, pURLParams) 
    {
        var ptr = document.createElement('div');
        var ctr = jQuery.jGlideMenu.tileCount + 1;
        ptr.id = 'jGM_tile_' + jQuery.jGlideMenu.currentElementID + '_' + ctr;
        var off = jQuery.jGlideMenu.tileWidth * jQuery.jGlideMenu.tileCount + jQuery.jGlideMenu.tileInset;
        
        jQuery('#jGM_wrapper_' + jQuery.jGlideMenu.currentElementID).append(ptr);
        jQuery('#' + ptr.id).addClass('jGM_tile').css(
            {
                top: 0,
                left: off + 'px',
                height: '599px',
                width: '213px',
                margin: 0,
                padding: 0,
                border: 0
            });
       
        if (jQuery('ul#' + pTileID).size() < 1)
            return false;
        
        var id = jQuery('ul#' + pTileID).attr('id');
        var title = jQuery('ul#' + pTileID).attr('title');
        var desc = jQuery('ul#' + pTileID).attr('alt');
        var _DefaultPage = jQuery('ul#' + pTileID).attr('page');
        var items = jQuery('ul#' + pTileID + ' li').size();
        var links = []; 
        jQuery('ul#' + pTileID + ' 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];            
        });
        //This creates the links for the actual menu.
        var tmpl = jQuery.jGlideMenu.buildTile(id, title, desc, links, _DefaultPage);
        
        jQuery('#' + ptr.id).html(tmpl);
        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);
                    jQuery.jGlideMenu.loadTile(dest, jQuery.jGlideMenu.URLParams);
                    return false;
                }
                else 
                {
                    window.location.href = target;
                    return false;
                }
                return true;
            });
        jQuery.jGlideMenu.countTiles();
        if (jQuery.jGlideMenu.tileCount > 1) {
            jQuery('#' + ptr.id).append('<div class="jGM_back"><a href="#">&laquo; Back</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) 
            {
                jQuery('#' + ptr.id).append('<div class="jGM_reset"><a href="#">&laquo; Home</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;
                });
            }
        }
        jQuery.jGlideMenu.tileScrollPosition[ctr] = 0;
        jQuery.jGlideMenu.scrollToTile(ctr, jQuery.jGlideMenu.defaultScrollSpeed);
    },

    cleanTiles: function(pTileLevel) 
    {
        var start = pTileLevel + 1;
        var stop = jQuery.jGlideMenu.tileCount;
        if (pTileLevel >= 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;
    },
    scrollToTile: function(pTileLevel, pSpeed) 
    {
        jQuery.jGlideMenu.countTiles();
        var intTiles = jQuery.jGlideMenu.tileCount;
        if (pTileLevel > intTiles)
            pTileLevel = intTiles;
        if (pTileLevel < 1)
            pTileLevel = 1;
        if (!pSpeed)
            pSpeed = jQuery.jGlideMenu.defaultScrollSpeed;
        var strWidth = (jQuery.jGlideMenu.tileWidth * pTileLevel) - jQuery.jGlideMenu.tileWidth;
        var strDirectWidth = (jQuery.jGlideMenu.slideRight == true) ? strWidth * -1 : strWidth;
        jQuery.jGlideMenu.animation = true;
        jQuery('div#jGM_wrapper_' + jQuery.jGlideMenu.currentElementID).animate({ 'left': strDirectWidth }, pSpeed, jQuery.jGlideMenu.easeFx,
        function() 
        {
            if (pTileLevel < intTiles)
                jQuery.jGlideMenu.cleanTiles(pTileLevel);
            if (strDirectWidth != 0)
                strDirectWidth += 'px';
            jQuery(this).css({ 'left': strDirectWidth });
            jQuery.jGlideMenu.animation = false;
        });
    },
    //this is actually where the tile markup is built
    buildTile: function(pTileID, pTitle, pSubTitle, pLinkList, pTitleLink) 
    {
        var template = new String('');
        template = '<div class="jGM_cats"><h1>' + pTitle + '</h1><p class="jGM_desc"><a href="' + pTitleLink + '">' + pSubTitle + '</a></p></div>';
        template += '<div class="jGM_content">';
        
        for (var i = 0; i < pLinkList.length; i++) 
        {
            var hash = (pLinkList[i][2] == 1) ? '' : '#';
            var type = (pLinkList[i][2] == 1) ? '' : ' class="jGM_more"';
            template += '<a href="' + hash + pLinkList[i][0] + '"' + type + '>' + pLinkList[i][1] + '</a>';
        }
        template += '</div>';
        return template;
    }
}
jQuery.fn.jGlideMenu = jQuery.jGlideMenu.initialize;
jQuery.fn.reverse = function()
{
    return this.pushStack(this.get().reverse(), arguments);
};
