﻿/// <reference path="../js/jquery-1.6.2.js" />

/* ------------------------------------------------------------------------
	Class: vMenu
	Version: 1.3
------------------------------------------------------------------------- */

jQuery.fn.vMenu = function (settings) {
    settings = jQuery.extend({
        menusImages: [],
        menuHoverImages: [],
        menuColors: [],
        keepSelected: false,
        dataMode: true
    }, settings);

    return this.each(function () {
        var $menu = $(this),
            currentItem = 0,
            $currentItem = null;

        var menuColors = settings.menuColors.length > 0 ? settings.menuColors : ['#8D8D8D', '#D1476B', '#3FA9D0', '#8BBC65', '#F6B041', '#856EA4', '#588DBF'],
            menusImages = settings.menusImages.length > 0 ? settings.menusImages : ['images/menu/final/gray_03.jpg', 'images/menu/final/darkpink_04.jpg', 'images/menu/final/lightblue_05.jpg', 'images/menu/final/green_06.jpg', 'images/menu/final/orange_07.jpg', 'images/menu/final/purple_08.jpg', 'images/menu/final/blue_10.jpg'],
            menuHoverImages = settings.menuHoverImages.length > 0 ? settings.menuHoverImages : ['images/menu/final/gray-over_03.jpg', 'images/menu/final/darkpink-over_04.jpg', 'images/menu/final/lightblue-over_05.jpg',
                'images/menu/final/green-over_06.jpg', 'images/menu/final/orange-over_07.jpg', 'images/menu/final/purple-over_08.jpg', 'images/menu/final/blue-over_10.jpg'];

        var init = function () {
            if (!settings.dataMode) {
                $('> li > a > img', $menu).each(function (i) {
                    menusImages[i] = $(this).attr('src');
                });
            }

            var $selected = $menu.children('li.selected');
            if ($selected.size() > 0) {
                currentItem = $selected.index();
                $currentItem = $selected.eq(0);

                if (settings.keepSelected && menuHoverImages[currentItem]) {
                    $selected.find('img').attr('src', menuHoverImages[currentItem]);
                }
            }

            formatMenu();
            bindEvent();
        }

        var formatMenu = function () {
            $menu.wrap('<div class="vMenuContainer"></div>');

            if (settings.dataMode && menusImages && menusImages.length > 0) {
                $('> li > a', $menu).each(function (i) {

                    $(this).append('<img src="' + menusImages[i] + '"/>');
                });
            }

            $('> li > a > img', $menu).load(imageLoadedHandler);

            $('> li > ul', $menu).each(function () {
                $(this).find('li:last').css('border-right', 'none');
            });
        }

        var imageLoadedHandler = function () {

        }

        var bindEvent = function () {
            var menuLeft_L = $menu.offset().left;   
            var menuLeft_R = menuLeft_L + $menu.width(); 

            $menu.children('li').hover(function () {
                var $this = $(this);
                var $subNav = $(this).children('ul');

                if (settings.keepSelected) {
                    if (menusImages[currentItem] && $currentItem) {
                        $currentItem.find('a img').attr('src', menusImages[currentItem]);
                    }
                }

                // update current item              
                var idx = currentItem = $this.index();
                $currentItem = $this;

                if (menuHoverImages[idx]) {
                    $this.find('img').attr('src', menuHoverImages[idx]);
                }             
                $subNav.css({
                    'display': 'block',
                    'background': menuColors[idx]
                }).find('li:first').css('margin-left', $this.offset().left - menuLeft_L);  

                var leftSubNavCell = $subNav.find('li:first').offset().left;
                var widthSubNav = 0;
                $subNav.find('li').each(function () {
                    widthSubNav += $(this).width();
                });

                if ((leftSubNavCell + widthSubNav) > menuLeft_R) {
                    var left = parseFloat($subNav.find('li:first').css('margin-left'));
                    $subNav.find('li:first').css('margin-left',
                        left - ((leftSubNavCell + widthSubNav) - menuLeft_R) - 12);  // -12 for firefox
                }
            }, function () {
                var $this = $(this),
                    $subNav = $this.children('ul'),
                    idx = $this.index();

                if (!settings.keepSelected) {
                    if (menusImages[idx]) {
                        $this.find('img').attr('src', menusImages[idx]);
                    }
                }

                $subNav.css('display', 'none');
            });

            $('a').focus(function () {
                this.blur();
            });
        }


        if ($menu.find('li').size() <= 0) {
            return;
        } else {
            init();
        }
    });
};
