/**
 * nice Menu vs 1.0
 * ----------------
 *
 * author: Andrei Dinca
 * email: andrei.webdeveloper@gmail.com
 *
 * version 1.0 release date: 1.11.2010
 *
**/
var niceMenu = {
    o: {
        element 	: '', // rewrite from custom option
        hideStep	: 217, // next step in size
        duration	: 200, // animation speed in miliseconds. 1000 = 1 second
        nextIcon	: '../images/menu_arrow.png', // url to next icon from menu
        backBtn 	: 'span#niceMenu-backBtn', // back element menu
        lastId 		: 0, // autoincrement in script
        lastelm		: 0, // autoincrement in script
        currentStep	: 0, // default 0. Autoincrement in script
        ul_heights      : {},
        running		: false // prevent duble click colision
    },
	
    // just init
    option:{},
	
    init: function(customOption) {
        var self = this;
		
        // extend default option
        self.option = $.extend({}, self.o, customOption);
		
        // init menu
        self.initMenu();
		
        // observe click
        self.observerClick();
    },
	 
    initMenu: function(){
        var self = this,
        el = self.option.element,
        $el = $(el),
        $first = $el.first();

        // resize on height
        // ex: $(self.option.element + " ul").first().height() = 320 px
        $el.css("height", $(self.option.element + " ul").first().height());
        
        // go menu to 0
        $(self.option.element).scrollLeft(0);
        
        // set direct links or subitems links
        $first.find('ul').addClass('pos--1');
        $first.find('li').each(function(ii){
		
            var $this = $(this),
            $firstUl = $this.find("ul").first();
            $firstUl.addClass("poz-" + ii);
			
            if($firstUl.size() > 0){
                //var $this = $(this); 
                $this.find('span').first().css({
                    backgroundImage: 'url(' + self.option.nextIcon + ')',
                    backgroundRepeat: 'no-repeat',
                    backgroundPosition: '190px 3px'
                }).addClass('haveSubItem');
                $this.find('span').first().next('ul').css('opacity', 0).css('visibility', 'hidden');
            }
        });
    },
	
    moveMenu: function($this, direction){
        var self = this;
        if(!self.option.running){
            self.option.running = true;
            if(direction == 'next'){
                // math current step (by direction)
                self.option.currentStep = parseInt($(self.option.element).scrollLeft()) + self.option.hideStep;
				
                // resize menu on height	
                $(self.option.element).animate({
                    height: $this.next('ul').height()
                }, self.option.duration);
				
                self.option.lastId  = $this.parents('ul').attr('class');
                self.option.lastElm = $this.next('ul');
                $this.next('ul').css('visibility', 'visible').animate({
                    opacity: 1
                });
            }else{
                // math current step (by direction)
                self.option.currentStep = parseInt($(self.option.element).scrollLeft()) - self.option.hideStep;
               
                // resize menu on height	
                $(self.option.element).animate({
                    height: self.option.lastElm.parent('li').parent('ul').height()
                }, self.option.duration, function(){
                    			
                    // hide last item
                    self.option.lastElm.animate({
                        opacity: 0
                    }, self.option.duration / 2).css('visibility', 'hidden');
                    
                    self.option.lastElm = self.option.lastElm.parent('li').parent('ul');
                    self.option.lastId = $(this).attr('class');
                });
            }
			
            // scroll to current step size 
            $(self.option.element).animate({
                scrollLeft: self.option.currentStep
            }, self.option.duration, function(){
                if($(self.option.element).scrollLeft() > 0){
                    $(self.option.backBtn).animate({
                        left: '-35px'
                    }, self.option.duration, function(){
                        $(this).css('z-index', 1);
						
                        self.option.running = false;
                    });
					
                    $(self.option.backBtn).click(function(){
                        // next menu
                        self.moveMenu($(this), 'prev');
                    });
                }else if(self.option.currentStep <= 0){
                    $(self.option.backBtn).css('z-index', -1).animate({
                        left: '0px'
                    }, self.option.duration, function(){
                        self.option.running = false;
                    });
                }
            });
        }	
    },
	
    observerClick: function(){
        var self = this;
        $(self.option.element + " ul span.haveSubItem").click(function(){
            // next menu
            self.moveMenu($(this), 'next');
        });
    }
};
