var UserManager = Class.create({

	initialize: function() {
		
		this.submitD = this.submitData.bindAsEventListener(this);
		this.sEFC = fm.showFormContainer.bindAsEventListener(this);
	},

	setEventHandlers: function(sessionStatus) {
		
		$('userContainer').select('.userInterface').each(function(element){
				Event.observe(element, 'click', um.sEFC);
			});
		
		switch (sessionStatus)
		{
		case 'user':
			Event.observe($('logout'), 'click', um.submitD);
			Event.observe($('logout'), 'sick:click', um.submitD);
			break;
		
		case 'admin':
			Event.observe($('logout'), 'click', um.submitD);
			Event.observe($('logout'), 'sick:click', um.submitD);
			break;
			
		case 'nonuser':
			Event.observe($('login'), 'click', um.submitD);
			break;
		}
	},

	unsetEventHandlers: function(sessionStatus) {
	
		$('userContainer').select('.userInterface').each(function(element){
				Event.stopObserving(element, 'click', um.sEFC);
			});
			
		switch (sessionStatus)
		{
		case 'user':
			Event.stopObserving($('logout'), 'click', um.submitD);
			break;
		
		case 'admin':
			Event.stopObserving($('logout'), 'click', um.submitD);
			break;
			
		case 'nonuser':
			Event.stopObserving($('login'), 'click', um.submitD);
			break;
		}	
	},
	
	submitData: function (event) {
		
		Event.stop(event);
		
		um.unsetEventHandlers(sm.sessionStatus);
		
		var element = Event.element(event);
		var action = element.readAttribute('id')
		
		um.processRequest(action);
	},
	
	processRequest: function(action) {
	
		$('userForm').request({
			parameters: { action:action },
		
			onCreate: function() {
				$('userForm').disable();
				$('userStatus').update(mm.getStatusMsg('loader'));
			},
			
			onComplete: function(transport) {
				var data = transport.responseText;	
				
				try {
					
					dataMsg = action+data;
					
					switch (data) 
					{
						case ('True'):
							$('userStatus').update(mm.getStatusMsg(dataMsg));
							$('userBox').firstDescendant().hide();
							
							if (action=='logout') {
								tools.adminOverlay('hide');
							//	im.onClick('logout');
							}
							
							tools.reloadInterface();
							tools.setFunctionHandler(um.setUserContainer);
							sm.getSessionStatus();
							break;
						
						case 'False':
							$('userStatus').update(mm.getStatusMsg(dataMsg));
						
							um.setEventHandlers(sm.sessionStatus);
							break;
						
						case 'Error01':
							$('userStatus').update(mm.getStatusMsg(dataMsg));
							break;
						
						case 'Error02':
							break;
						
						case 'Error03':
							break;
						
						default:
							$('userStatus').update(mm.getStatusMsg('unknownError'));
							break;				
					}
				}
				catch (error) 
				{
					alert('Script encountered an error: '+error);
				}
				finally {
					$('userForm').enable();
					fm.setEventHandlers(sm.sessionStatus);
				}
			}
		});	
	},

	/* Zadaniem metody jest zaladowanie do obiektu HTML o id 'userContainer' informacji bedacej wynikiem przetwarzania UserProcessor.
	   Na koncu uruchamiania jest metoda setEventHandlers(), ktora przypisuje wybranym obiektom HTML Eventy obslugujace interfejs.
	   Parametr sm.sessionStatus jest ustawiony poniewaz metoda ta jest wolana przez odpalenia zdarzenia na obiekcie HTML o id 'funcExe'.
	   Not importnant: wczesniej mialem problemy z ustawianiem sm.sessionStatus przed reloadem, AjaxRequest zwracal wartosc po zapytaniu o wyswietlenie stanu 'userContainer', w zwiazku z czym zawartosc obiektu HTML nie miala nic wspolnego z rzeczywistym stanem sesji.
	*/
	setUserContainer: function() {

		new Ajax.Request('php/UserProcessor.php', {

			method: 'post',
			parameters: { action:'setUserContainer' },
			
			onCreate: function() {
				$('userStatus').update(mm.getStatusMsg('loader'));
			},
			
			onSuccess: function(transport) {
				$('userBox').update(transport.responseText);
				$('userBox').firstDescendant().show();
			},
			
			onComplete: function() {
				if(sm.sessionStatus == 'nonuser')
					$('userStatus').update(mm.getStatusMsg('introduction'));
				else
					$('userStatus').update(mm.getStatusMsg('introductionUser'));
				
				um.setEventHandlers(sm.sessionStatus);
			}
		});
	}
	
});
