(function($) {
$.fn.ui_menu = function(options) {

	this.each(function() {	
		
		ui_menu(this,options);
		
		return this; 
  	})
  
}

ui_menu = function (content,options) {

	return new ui_fn_menu(content,options), false ;

}

ui_fn_menu = function (content,options) {

	var self = this;
	this.content = content;
	this.settings = $.extend({}, $.fn.ui_menu.defaults, options);
	
	$('li > ul',this.content).hide()
		
	this[this.settings.type]();

	return false;

}

ui_fn_menu.prototype = {

	breadcrumbs_initiation:function () {
		
	var self=this;
	
	if(!this.settings.breadcrumbs) {return false} else {
	
	if(this.settings.breadcrumbs=='auto') {
	
		this.breadcrumbs = $('<div/>', {'class':'ui-breadcrumbs'}).append($('<a/>', {href:'#'}).text('home')).insertBefore(this.wrapper)
	
	} else {
	
		this.breadcrumbs=$(this.settings.breadcrumbs).addClass('ui-breadcrumbs');
	}	

	
	$('a',this.breadcrumbs).bind('click',function(){return self.breadcrumbs_action(this)});


	return this.breadcrumbs;
	}
	},
	breadcrumbs_modification:function (element) {
		
	var self=this;
	return $(this.breadcrumbs).append(this.settings.separator).append($('<a/>', {href:'#'}).text($(element).attr('title')).bind('click',function(){return self.breadcrumbs_action(this)}))
	},
	
	
	breadcrumbs_action:function (element) {
	
			var self = this;
			
			var n= $('> *',this.breadcrumbs).size()-$(element).index()-1;


			for (i=0;i<n;i++) {$('.ui-breadcrumbs > *:last').remove()}

				$('ul:visible',this.wrapper).animate({'left': '+='+(0.5*n*self.displacement)+'px'}, "slow",function () {
				
					if ( $(this).offset().left >=self.displacement) {$(this).remove()}
				
				})
		return false		
	
	},

	fading: function () {
	
	var self = this;
		
		$(document.body).bind('click', function(e){
   				 
   			if(e.target.id !== self) {
   			
   				self.unselect_all();
   			
   			if ($.browser.msie){
   			
   			$('ul li ul:visible',self.content).hide();
			
			$('ul:visible',self.content).hide();
			
			
			
			} else {
			
			$('ul:visible',self.content).ui_hide();
			
			}
   				
   			} 
       			
       	})	
			
		$('a',this.content).live('click', function () {
		
		this.href=$(this).attr('href');
		

		if ($(this).siblings('ul').size()> 0) {	
		
			self.hide_visible(this);
			
			self.unselect_all(this);
		
			
			if ($.browser.msie){
			
			$(this).toggleClass('selected').siblings('ul').find('ul:visible').andSelf().toggle();
			
			} else {
			
			$(this).toggleClass('selected').siblings('ul').find('ul:visible').andSelf().ui_toggle();
			
			}
			
			return false;		

		} 
		
	})
	
	},
	sliding: function (){
	
	var self = this;
	
	
	if(self.settings.wrapper) {
	
	this.wrapper = self.settings.wrapper;
	$(this.content).css({position:'relative'})
	
	} else {
	
	
	this.wrapper=$(this.content).ui_wrapper('<div/>');
	
	}
	
	this.breadcrumbs_initiation();
	
	this.displacement =$(this.wrapper).outerWidth();
	
		$('a',this.content).bind('click', function () {
	
		if($(this).attr('href')=='#') { 
				
			if ($(this).siblings('ul').size() > 0 ) {
			
				if(self.settings.breadcrumbs) {
			
				
				self.breadcrumbs_modification(this);				
				
				}
				
				$(this).siblings('ul').clone(true).show().css({position:'absolute', width:'100%', top:0, left:self.displacement}).appendTo(self.wrapper)
				
				$('> ul:visible',self.wrapper).animate({'left': '-='+self.displacement+'px'}, "slow");
					
			}	
		
		return false;
		}
	
	})
	},

	hide_visible : function (element) {
		
		if (element) {

			var parent = $(element).parent('li');
			
			if ($.browser.msie){
				
			$(parent).siblings('li').find('ul:visible').hide();
			
			} else {
			
			$(parent).siblings('li').find('ul:visible').ui_hide();
			
			}
	
		} else {
		
			if ($.browser.msie){
			
			$('a',this.content).siblings('ul:visible').hide();
			
			} else {
			
			$('a',this.content).siblings('ul:visible').ui_hide();
			
			}
		
		}
		
		 
	
	},
	
	unselect_all : function (element) {	
	
		if (element) {	
			
		 	
			var parent = $(element).parent('li');
		 	$(parent).siblings('li').find('a').removeClass('selected');

			
		} else {
		
			$('a',this.content).removeClass('selected');
			
		
		}
			
	}
	

}

$.fn.ui_menu.defaults = {
	separator:'<span> &#187; </span> ',
	breadcrumbs:'auto',
	type:'fading',
	direction:'left',
	target: false,
	hide:true,
	callback:jQuery.noop
}; 
 })(jQuery);