/*
=============================================================
						 COPY RIGHTS			
			-------------------------------------
			Przedsiebiorstwo Informatyczne WTSOFT
			-------------------------------------
=============================================================
*/

wtsMenu = {
	sets : {
		//---------------
		// Slide Settings
		//---------------
		slideClass : 'wts-slide-level',
		slideSpeed : 200,
		slideHideSiblings : false,
		
		//--------------
		// Drop Settings
		//--------------
		dropClass : 'wts-drop-level',
		dropAction : 'hover',
		dropAnimation : 'slide',
		dropAnimationSpeed : 200,
		dropHideDelay : 50
	},
	active : {},
	tid : {},
	toClose : {},
	
	// Funkcja inicializujaca
	init : function(){
		if(typeof $ != 'function') return false;
		
		var self = this;
		$(document).ready(function(){
			// Funkcja do obslugi dropMenu
			self.drop();
			// Obsluga slice menu
			self.slide();
		});
	},
	
	setSettings : function(sets){
		// Aktualizuj ustawienia menu
		this.sets = jQuery.extend(this.sets,sets);
	},
	
	// Funkcja chowa jq obiekt
	hideNode : function(obj, animationType, animationSpeed){
		if(!obj || typeof(obj) != 'object') return false;
		// Schowaj
		obj.stop();
		switch(animationType){
			case 'none':
			case 'no':
				obj.hide();
				break;
			case 'show':
				obj.hide(animationSpeed);
				break;
			case 'fade':
				obj.fadeOut(animationSpeed,function(){$(this).css({'opacity' : ''});});
				break;
			case 'slide':
			default:
				obj.slideUp(animationSpeed);
				break;
		}
	},
	
	showNode : function(obj, animationType, animationSpeed){
		if(!obj || typeof(obj) != 'object') return false;
		// Pokaz
		obj.stop();
		switch(animationType){
			case 'none':
			case 'no':
				obj.show();
				break;
			case 'show':
				obj.show(animationSpeed);
				break;
			case 'fade':
				obj.fadeIn(animationSpeed);
				break;
			case 'slide':
			default:
				if($.browser.msie) obj.show(animationSpeed);
				else obj.slideDown(animationSpeed,function(){$(this).height('');});
				break;
		}
	},
	
	setActive : function(id){
		var self = this;
		// Sprawdz czy active nie jest puste
		if(typeof(self.active) != 'object' || self.active.length == 0) return false;
		// Pobierz ostatni element
		var active = {};
		for(i in self.active){
			// Sprawdz czy jest dzieckiem wezla
			if($('#'+id,$('#'+self.active[i]).parent()).length > 0 || i == id){
				active[id] = id;
				self.toClose[id] = 0;
			}else{
				self.toClose[id] = 1;
			}
		}
		self.active = active;
	},
	
	drop: function(){
		var self = this;
		switch(self.sets.dropAction){
			case 'hover':
			default:
				$('.'+self.sets.dropClass+', .'+self.sets.dropClass+' ~ ul a').hover(
					function(){
						// Pobierz id wezla
						var nodeId = $(this).attr('id');
						// Ustaw active
						self.active[nodeId] = nodeId;
						self.setActive(nodeId);
						// Nie chowaj tego wezla
						self.toClose[nodeId] = 0;
						// Wyczysc interwal dla wezla
						if(self.tid[nodeId]) window.clearTimeout(self.tid[nodeId]);
						// Pokaz wezel
						self.showNode($(this).next('ul:first'),self.sets.dropAnimation,self.sets.dropAnimationSpeed);
					},
					function(){
						// Pobierz id wezla
						var nodeId = $(this).attr('id');
						// Ustaw active
						self.setActive(nodeId);
						// Schowaj wezel
//						self.toClose[nodeId] = 1;
						// Wyczysc interwal dla wezla
						if(self.tid[nodeId]) window.clearTimeout(self.tid[nodeId]);
						// Schowaj wezel z opoznieniem
						var jqThis = $(this);
						self.tid[nodeId] = window.setTimeout(function(){
							for(i in self.toClose){
								if(self.toClose[i] == 1){
									self.hideNode($('ul:first',jqThis.parent()),self.sets.dropAnimation,self.sets.dropAnimationSpeed);
								}
							}
						}, self.sets.dropHideDelay);
					}
				);
				break;
		}
	},
	
	slide: function(){
		var self = this;
		$('.'+self.sets.slideClass).unbind('click').click(function(){
			// Pobierz id wezla
			var nodeId = $(this).attr('id');
			if(!nodeId){
				var parent = $(this).parent();
				if(parent.is('a')) nodeId = parent.attr('id');
			}
			if(nodeId){
				if($('#level_'+nodeId).is(':visible')){
					// Schowaj wezel
					self.hideNode($('#level_'+nodeId),self.sets.dropAnimation,self.sets.dropAnimationSpeed);
				}else{
					// Schowaj wezly
					if(self.sets.slideHideSiblings){
						// Pobierz rodzica
						self.hideNode($('.'+self.sets.slideClass+' + ul:visible',$(this).offsetParent('div')),self.sets.dropAnimation,self.sets.dropAnimationSpeed);
					}
					// Pokaz wezel
					self.showNode($('#level_'+nodeId),self.sets.dropAnimation,self.sets.dropAnimationSpeed);
				}				
			}
			$(this).toggleClass('selected');
			
			return false;
		});
	}
};
// Inicializuj menu
wtsMenu.init();
