var Language = {
	load_page : function(event, result_container) {
		// Prevent default event
		if (event != null)
			YAHOO.util.Event.preventDefault(event);	
			
		// Show loader
		var result_container = YAHOO.util.Dom.get(result_container);
		var target = YAHOO.util.Event.getTarget(event);
		Language.append_loader(result_container, result_container, 'loader_expand');
		
		// Create sucess and failure handlers
		function successHandler(o) {
			// Remove the loader
			Language.delete_loader(result_container);

			// Show the response
			var response = Xml.parse_simple(o.responseXML);
			result_container.innerHTML = response['data'];
		}
		function failureHandler(o) {
			// Remove the loader
			Language.delete_loader(result_container);
			
			// Show error
			alert('Request failed (' + o.statusText + ')');
		}	
		
		// Make the request
		YAHOO.util.Connect.asyncRequest('GET', Dom.add_querystring_parameter(target.href, 'ajax', 1), {success:successHandler, failure:failureHandler});	
	},
	
	keys_show : function(event) {
		Language.load_page(event, 'language_control_panel_container');
	}, 
	
	values_show : function(event) {
		Language.load_page(event, 'language_control_panel_container');
	}, 
	
	all_values_show : function(event) {
		Language.load_page(event, 'language_control_panel_container');
	}, 
	
	keys_create : function(event) {
		// Prevent default event
		if (event != null)
			YAHOO.util.Event.preventDefault(event);	
			
		// Collect form content
		var form = YAHOO.util.Event.getTarget(event);
		YAHOO.util.Connect.setForm(form);
		
		// Show loader
		var loader_container = YAHOO.util.Dom.getElementsByClassName('submit', 'div', form);
		Language.append_loader('keys_create', loader_container[0]);
		
		// Create sucess and failure handlers
		function successHandler(o) {
			// Remove the loader
			Language.delete_loader('keys_create');
			
			// Parse response
			var response = Xml.parse_simple(o.responseXML);
			
			// Show the new keys
			YAHOO.util.Dom.get('new_keys_area').innerHTML = response['data'] + new_keys_area.innerHTML;
			
			// Display response message
			var response_area = YAHOO.util.Dom.getElementsByClassName('response_area', 'div', form);
			Language.show_response(response_area[0], response);
		}
		function failureHandler(o) {
			// Remove the loader
			Language.delete_loader('keys_create');
			
			// Show error
			alert('Request failed (' + o.statusText + ')');
		}	
		
		// Make the request
		YAHOO.util.Connect.asyncRequest(form.method, form.action, {success:successHandler, failure:failureHandler});				
	}, 
	
	keys_edit : function(event) {
		// Prevent default event
		if (event != null)
			YAHOO.util.Event.preventDefault(event);	
			
		// Collect form content
		var form = YAHOO.util.Event.getTarget(event);
		YAHOO.util.Connect.setForm(form);
			
		// Show loader
		var loader_container = YAHOO.util.Dom.getElementsByClassName('submit', 'div', form);
		Language.append_loader('keys_edit', loader_container[0]);
		
		// Create sucess and failure handlers
		function successHandler(o) {
			// Remove the loader
			Language.delete_loader('keys_edit');
			
			// Parse response
			var response = Xml.parse_simple(o.responseXML);
			
			// Remove any deleted keys from the document
			if (response['status'] == 1) {
				var keys_deleted = response['keys_deleted_json'].parseJSON();
				var el;
				for (var i=0; i<keys_deleted.length; i++) {
					el = YAHOO.util.Dom.get('key_input_' + keys_deleted[i]);
					el.parentNode.removeChild(el);
				}
			}

			// Display response message
			window.scroll(0,0);
			var response_area = YAHOO.util.Dom.getElementsByClassName('response_area', 'div', form);
			Language.show_response(response_area[0], response);
		}
		function failureHandler(o) {
			// Remove the loader
			Language.delete_loader('keys_edit');
			
			// Show error
			alert('Request failed (' + o.statusText + ')');
		}			
		
		// Make the request
		YAHOO.util.Connect.asyncRequest(form.method, form.action, {success:successHandler, failure:failureHandler});				
	}, 
	
	values_edit : function(button) {
		// Collect form content
		var form = YAHOO.util.Dom.get('values_edit_form');
		YAHOO.util.Connect.setForm(form);
		
		// Show loader
		Language.append_loader('values_edit', button.parentNode);
		
		// Create sucess and failure handlers
		function successHandler(o) {
			// Remove the loader
			Language.delete_loader('values_edit');
			
			// Parse response
			var response = Xml.parse_simple(o.responseXML);
			
			// Display response message
			var response_area = YAHOO.util.Dom.getElementsByClassName('response_area', 'div', button.parentNode);
			Language.show_response(response_area[0], response);
		}
		function failureHandler(o) {
			// Remove the loader
			Language.delete_loader('values_edit');
			
			// Show error
			alert('Request failed (' + o.statusText + ')');
		}
		
		// Make the request
		YAHOO.util.Connect.asyncRequest(form.method, form.action, {success:successHandler, failure:failureHandler});		
	}, 
	
	another_key : function(event) {
		// Prevent default event
		if (event != null)
			YAHOO.util.Event.preventDefault(event);	
			
		// Show loader
		var target = YAHOO.util.Event.getTarget(event);
		var loader_container = target.parentNode;
		Language.append_loader('another_key', loader_container, 'loader_expand');
		
		// Create sucess and failure handlers
		function successHandler(o) {
			// Remove the loader
			Language.delete_loader('another_key');

			// Show the new key input
			var response = Xml.parse_simple(o.responseXML);
			var this_key = target.parentNode.parentNode;
			var another_key_container = YAHOO.util.Dom.getNextSiblingBy(this_key, function(el) {
				if (YAHOO.util.Dom.hasClass(el, 'another_key_container'))
					return true;
				else 
					return false;	
			});
			another_key_container.innerHTML += response['data'];
			
			// Remove the clicked "new key" link
			var another_key_link = target.parentNode;
			another_key_link.parentNode.removeChild(another_key_link); // todo replace with yuis removeChild once its functionality is confirmed
		}
		function failureHandler(o) {
			// Remove the loader
			Language.delete_loader('another_key');
			
			// Show error
			alert('Request failed (' + o.statusText + ')');
		}	
		
		// Make the request
		YAHOO.util.Connect.asyncRequest('GET', target.href, {success:successHandler, failure:failureHandler});		
	}, 
	
	append_loader : function(loader_name, container, loader_class) {
		// Create the loader
		var loader = Language.create_loader(loader_name, loader_class);
		
		// Append the loader to a container
		if (loader != null)
			container.appendChild(loader.element);
			
		return loader.id;
	}, 
	
	create_loader : function(loader_name, loader_class) {
		// Check if there is a loader with this name already
		var already_loading = YAHOO.util.Dom.get('__loader_' + loader_name);
		if (!already_loading) {
			loader_class = loader_class || 'loader_submit';
			
			// Create the loader
			var loader = document.createElement('div');
			loader.setAttribute('id', '__loader_' + loader_name);
			YAHOO.util.Dom.addClass(loader, loader_class);
			loader.innerHTML = '<img src="img/language/loader.gif" />';
			
			// Return the id of the loader allong with the new element
			return {id : loader_name, element : loader};
		} else {
			return null;
		}
	}, 
	
	delete_loader : function(id) {
		var loader = YAHOO.util.Dom.get('__loader_' + id);
		loader.parentNode.removeChild(loader);
	}, 
	
	show_response : function(response_area, response) {
		// Set the correct visibility for the response area
		if (response['message']) {
			// Make it so that the response area reflects the type of the message
			if (response['status'] == 1) {
				YAHOO.util.Dom.replaceClass(response_area, 'response_area_red', 'response_area_green');	
			} else {
				YAHOO.util.Dom.replaceClass(response_area, 'response_area_green', 'response_area_red');
			}			
			YAHOO.util.Dom.replaceClass(response_area, 'hidden', 'visible');
				
			// Set the response area content
			response_area.innerHTML = response['message'];
		} else {
			YAHOO.util.Dom.replaceClass(response_area, 'visible', 'hidden');
		}
	}
	
}