/**
* Application event handling
*/

var EventHandler = {
	/**
	* Force display of lists when clicking on a tab
	*/
	tabSelect: function(args){
		var context = args.tabId;
		if (context == undefined || context == null || context.length == 0) return;
		var eventHandler = null;
		var entity = '';
		switch(context) {
			case Context.DOCUMENTS:
				entity = Entity.DOCUMENT;
				break;
			case Context.USERS:
				entity = Entity.USER;
				break;
			case Context.ACTIONTYPES:
				entity = Entity.ACTIONTYPE;
				break;
			case Context.ADMIN:
				AdminService.listLocks(Context.ADMIN);
				return;
			case Context.ADMINTOOLS:
				AdminService.listLocks(Context.ADMIN);
				//AdminService.listEntityTypes(Context.ADMIN);
				AdminService.listRemoved(Context.ADMIN);
				return;
			default:
				return;
		}
		try {
			var target = context + Service.SCOPE_SEPARATOR + Widget.LISTER + Service.SCOPE_SEPARATOR + entity;
			if ($(target).getTextContent().length == 0) Entity.list(context, entity, eventHandler);
		} catch(err) {;}
	},
	
	init: function() {
		document.body.style.cursor = "";
		$('message').update('');
		
		try {
			Event.observe(Context.DOCUMENTS + Service.SCOPE_SEPARATOR + 'list' + Service.SCOPE_SEPARATOR + Entity.DOCUMENT, 'click', function(event){
				var context = Context.DOCUMENTS;
				var entity = Entity.DOCUMENT;
				Entity.refreshList(context, entity);
				Event.stop(event);
			});
	
			Event.observe(Context.DOCUMENTS + Service.SCOPE_SEPARATOR + 'create' + Service.SCOPE_SEPARATOR + Entity.DOCUMENT, 'click',  function(event) {
				Entity.create(Context.DOCUMENTS, Entity.DOCUMENT);
				Event.stop(event);
			});
	
			Event.observe(Context.DOCUMENTS + Service.SCOPE_SEPARATOR + 'buttons' + Service.SCOPE_SEPARATOR + Entity.DOCUMENT, 'click',  function(event) {
				Entity.handleEvent(event, Context.DOCUMENTS, Entity.DOCUMENT);
				Event.stop(event);
			});
			// DOCUMENTS CONTEXT
			Event.observe(Context.DOCUMENTS, 'click',  function(event) {
				Document.handleEvent(event, Context.DOCUMENTS);
			});
		} catch(err) {;}

		try {
			// REPORTS CONTEXT
			Event.observe(Context.REPORTS, 'click',  function(event) {
				Reports.handleEvent(event);
				Event.stop(event);
			});
		} catch(err) {;}

		// ADMIN CONTEXT
		try {
			Event.observe(Context.ADMIN + Service.SCOPE_SEPARATOR + 'access', 'click',  function(event) {
				AdminService.handleAccessEvent(event, Context.ADMIN);
				Event.stop(event);
			});

			Event.observe(Context.ADMIN + Service.SCOPE_SEPARATOR + 'access', 'keypress', function(event) {
				if (event.keyCode == Event.KEY_RETURN) {
					AdminService.handleAccessEvent(event, Context.ADMIN);
					Event.stop(event);
				}
			});

		} catch(err) {;}
		
		try {
			Event.observe(Context.ADMIN + Service.SCOPE_SEPARATOR + 'removed', 'click',  function(event) {
				AdminService.handleRemovedEvent(event, Context.ADMIN);
				Event.stop(event);
			});

			Event.observe(Context.ADMIN + Service.SCOPE_SEPARATOR + 'removed' + Service.SCOPE_SEPARATOR + 'controls', 'click',  function(event) {
				AdminService.handleRemovedEvent(event, Context.ADMIN);
				Event.stop(event);
			});
		} catch(err) {;}

		try {
			Event.observe(Context.ADMIN + Service.SCOPE_SEPARATOR + 'list' + Service.SCOPE_SEPARATOR + 'lock', 'click',  function(event) {
				AdminService.listLocks(Context.ADMIN);
				Event.stop(event);
			});
	
			Event.observe(Context.ADMIN + Service.SCOPE_SEPARATOR + 'removeall' + Service.SCOPE_SEPARATOR + 'lock', 'click',  function(event) {
				AdminService.removeAllLocks(Context.ADMIN);
				Event.stop(event);
			});
	
			Event.observe(Context.ADMIN + Service.SCOPE_SEPARATOR + 'removeselected' + Service.SCOPE_SEPARATOR + 'lock', 'click',  function(event) {
				AdminService.removeSelectedLocks(Context.ADMIN);
				Event.stop(event);
			});
		} catch(err) {;}
	
	
		// PROFILE CONTEXT
		try {
			Event.observe(Context.PROFILE, 'click',  function(event) {
				AdminService.handlePasswordEvent(event, Context.PROFILE);
				Event.stop(event);
			});
		} catch(err) {;}
		
	
		// GLOBAL CONTEXT
		
		Event.observe('message', 'click', function(){
			$('message').update('');
		});
	
		
		// Standard framework stuff	
	
		// ACTION TYPES
		try {
			Event.observe(Context.ACTIONTYPES + Service.SCOPE_SEPARATOR + 'list' + Service.SCOPE_SEPARATOR + Entity.ACTIONTYPE, 'click', function(event){
				Entity.refreshList(Context.ACTIONTYPES, Entity.ACTIONTYPE);
				Event.stop(event);
			});
	
			Event.observe(Context.ACTIONTYPES + Service.SCOPE_SEPARATOR + 'create' + Service.SCOPE_SEPARATOR + Entity.ACTIONTYPE, 'click',  function(event) {
				Entity.create(Context.ACTIONTYPES, Entity.ACTIONTYPE);
				Event.stop(event);
			});
	
			Event.observe(Context.ACTIONTYPES + Service.SCOPE_SEPARATOR + 'buttons' + Service.SCOPE_SEPARATOR + Entity.ACTIONTYPE, 'click',  function(event) {
				Entity.handleEvent(event, Context.ACTIONTYPES, Entity.ACTIONTYPE);
				Event.stop(event);
			});
		} catch(err) {;}
	
		// USERS
		try {
			Event.observe(Context.USERS + Service.SCOPE_SEPARATOR + 'list' + Service.SCOPE_SEPARATOR + Entity.USER, 'click', function(event){
				var context = Context.USERS;
				var entity = Entity.USER;
				Entity.refreshList(context, entity);
				Event.stop(event);
			});
	
			Event.observe(Context.USERS + Service.SCOPE_SEPARATOR + 'create' + Service.SCOPE_SEPARATOR + Entity.USER, 'click',  function(event) {
				Entity.create(Context.USERS, Entity.USER);
				Event.stop(event);
			});
	
			Event.observe(Context.USERS + Service.SCOPE_SEPARATOR + 'buttons' + Service.SCOPE_SEPARATOR + Entity.USER, 'click',  function(event) {
				Entity.handleEvent(event, Context.USERS, Entity.USER);
				Event.stop(event);
			});
		} catch(err) {;}
	}
}
