/* ZDARZENIA W ZAKŁADKACH    */
var TabEvents = Class.create({
  /* otwarcie zakładki */
  openTab: function(event, objSender) 
  {    		  	
  	
	if (Prototype.Browser.IE) 
	{  								
		if (!/MSIE [789]/.test((navigator.appVersion +"")))
		{
			$$('select').each(function(node){		  		
				node.hide();
			});	
		}  		
	}
  	
	var topSender = $(objSender.config.objSender); // przycisk otwierający
	var tabSender = $(objSender.config.tabId);     // zakładka	

	topSender.setStyle(topSender.config.bgStyle);
			
	// zresetuj timer zamykania jeżeli jest ustawiony
	if (topSender.closeTabHandle) topSender.closeTabHandle.stop();
	
	// jeżeli zakładka jest widoczna to nie rozwijaj          
	if (tabSender.visible() == true) return;  
			 
	// rozwiń zakładkę         
	var tabHandle = new PeriodicalExecuter(function(pe)
	{
	  var config = objSender.config;        
	  var tab = $(config.tabId);                   
	  			 
	  // rozwin zakaldke
	  //Effect.SlideDown(tab, { duration: tab.config.speedDuration,queue: {position: 'end', scope: 'global', limit: 1} });    
	  tab.show();
	  if(typeof objSender.config.onshow=='function')
		{
			objSender.config.onshow(objSender);
		}
	  pe.stop();
	  
	}, objSender.config.openDelay);  
	
	
	event.stop(); // wyłącz bubbling dla tego eventu	
  },
  
  
  /* zamykanie zakładki */
  closeTab: function(event, objSender) 
  {               
  	if (Prototype.Browser.IE) 
	{  								
		if (!/MSIE [789]/.test((navigator.appVersion +"")))
		{
			$$('select').each(function(node){		  		
				node.show();
			});	
		}  		
	}
	var topSender = $(objSender.config.objSender); // przycisk otwierający 
	var tabSender = $(objSender.config.tabId);     // zakładka
			
	// zeruj timer zamykania jeżeli jest aktywny
	if (topSender.closeTabHandle) topSender.closeTabHandle.stop();
	
	// jeżeli zakładka jest niewidoczna to nic nie rób        
	if (tabSender.visible() == false) return;
	
	// ustaw timer zamykania
	var closeTabHandle = new PeriodicalExecuter(function(pe)
	{                              
	  tabSender.hide();          
	  //Effect.SlideUp(tabSender, { duration: tabSender.config.speedDuration, queue: {position: 'end', scope: 'global', limit: 1}});
	  pe.stop(); 
	  topSender.setStyle(topSender.config.fgStyle);
	}, objSender.config.closeDelay);
	
	// zapisz timer zamykania
	topSender.closeTabHandle = closeTabHandle;
	event.stop();
  },
  
  /* zerowanie timera zamykania zakładki */
  stopClosingTab: function(event, objSender) 
  {        
	var topSender = $(objSender.config.objSender);
	// jeżeli timer jest ustawiony to go wyczyść         
	if (topSender.closeTabHandle) topSender.closeTabHandle.stop();        
	event.stop();
  }
});
 

/* obiekt zdarzeń dla rozwijanych zakładek */
eventsTab = new TabEvents();


/* rozwijana zakładka */
Element.addMethods('DIV', {         
  bindTab: function(objSender, config)
  {	
	// zobacz czy element odsyłający ma określone id
	var idSender = objSender.readAttribute("id");
	
	// jak nie ma id to przypisz domyślne
	config["objSender"] = idSender == null ? 'advenced_seach_trigger' : idSender;
	
	// zapmiętaj konfig
	objSender.config = config;
	
	// pobierz obiekt zakladki 
	var tab = $(config.tabId);
	// przesun konfig
	tab.config = config;  
							   
	// podpiecie zdarzen
	objSender.observe(config.trigger, eventsTab.openTab.bindAsEventListener(eventsTab, objSender));
	objSender.observe('mouseout', eventsTab.closeTab.bindAsEventListener(eventsTab, objSender));
					
	tab.observe('mouseout', eventsTab.closeTab.bindAsEventListener(eventsTab, tab));        
	tab.observe('mouseover', eventsTab.stopClosingTab.bindAsEventListener(eventsTab, tab));
	
	// przenies warstwe z zakladka w miejsce okreslone konfigiem	        
	objSender.setBindTabPosition();                
  },      
					
  /* USTALENIE POZYCJI ROZWIJANEGO MENU */
  setBindTabPosition: function(objSender)
  {  	
	  var config = objSender.config;
	  var tab = $(config.tabId); // zakladka odpowiadajaca dla przycisku	  
	  tab.makePositioned();
	  	  
	  
	  /* ustawienie pozycji */	
	  var pos = objSender.positionedOffset(); // pozycja przycisku - wzgledem niej pozycjonowana jest zakladka	  
	  
	  /* przesniecie zalkadki w zaleznosci od miejsca zaczepienia */
	  if (config.posHorizontal == 'right')
	  {
		pos[0] = pos[0] + objSender.getWidth();
	  }
	  
	  if (config.posVertical == 'bottom')
	  {          
		pos[1] = pos[1] + objSender.getHeight();
	  }
	  
	  /* przesniecie zalkadki w zaleznosci od kierunku rozwiniecia */
	  if (config.dirHorizontal == 'left')
	  {
		pos[0] = pos[0] - tab.getWidth();  
	  }

	  if (config.dirVertical == 'top')
	  {
		pos[1] = pos[1] - tab.getHeight();
	  }

	  tab.setStyle({	  	
		left: pos[0] + "px",
		top: pos[1] + "px"
	  });
	                      
  }
});            

