var ViewIssue = {
	
	id: 0,
	modules: ['Sections', 'Status'],
	
	initialise: function()
	{
		ViewIssue.id = $('issue_id').getText();
		
		ViewIssue.modules.each(function(module)
		{
			ViewIssue[module].initialise();
		});
	},
	
	updateHistory: function()
	{
		// Add loading image to header
		var header = $('history').getElement('h3');
		var collapse = header.getElement('img');
		
		collapse.replaceWith(new Element('img', { src: 'templates/arctic/images/loading.gif' }).setStyle('float', 'right'));
		
		// Create AJAX request
		new Ajax('index.php?cmd=ajax/history',
		{
			method: 'post',
			data: 'id=' + this.id,
			update: 'history',
			onComplete: ViewIssue.Sections.initialise.bind(ViewIssue.Sections)
		}).request();	
	}
	
}

ViewIssue.Sections = {
	
	initialise: function()
	{
		$$('h3').each(function(header)
		{
			var element = header.getParent().id;
			
			if (['history', 'comments', 'add_comment', 'attachments'].contains(element))
			{
				// Check the cookie
				var cookie = Cookie.get('arctic_section_' + element);
				
				if (cookie == '1')
				{
					$(element).addClass('hidden');
				}
				
				if (!header.getElement('img'))
				{
					this.button(element).injectTop(header);
				}
			}
		}.bind(this));
	},
	
	button: function(element)
	{
		var button = new Element('img', { src: 'templates/arctic/images/' + ($(element).hasClass('hidden') ? 'expand' : 'collapse') + '.gif' });
		
		// Event handlers
		button.addEvent('mouseover', function() { this.setStyle('opacity', 0.7) });
		button.addEvent('mouseout', function() { this.setStyle('opacity', 1) });
		
		button.addEvent('click', function() { this.toggle(element); }.bind(this));
		
		return button;
	},
	
	toggle: function(element)
	{		
		$(element).toggleClass('hidden');
		$(element).getElement('h3 img').src = 'templates/arctic/images/' + ($(element).hasClass('hidden') ? 'expand' : 'collapse') + '.gif';
		
		// Store cookie
		Cookie.set('arctic_section_' + element, $(element).hasClass('hidden') ? '1' : '0', { duration: 1 });
	}
	
}

ViewIssue.Status = {
	
	container: false,
	link: false,
	
	initialise: function()
	{
		// Hijack the link
		this.getElements();
		
		if ($defined(this.link))
		{
			this.link.href = 'javascript:;';
			this.link.addEvent('click', ViewIssue.Status.getStatuses.bind(this));
		}
	},
	
	getElements: function()
	{
		this.container = $('change_status');
		this.link = this.container.getElement('a');
	},
	
	getStatuses: function()
	{		
		// Replace link with loading image
		this.link.remove();
		this.loading();		
	
		// Current Status
		var status_id = this.container.getElement('input').getValue();
		
		// Create AJAX request
		new Ajax('index.php?cmd=ajax/edit/status',
		{
			method: 'post',
			data: 'id=' + ViewIssue.id + '&status_id=' + status_id + '&show=form', 
			update: $(this.container),
			onComplete: ViewIssue.Status.getElements.bind(ViewIssue.Status)
		}).request();		
	},
	
	save: function()
	{
		// Replace buttons with loading image
		this.removeButtons();
		this.loading();		
	
		// New Status
		var status_id = this.container.getElement('select').getValue();
		
		// Create AJAX request
		new Ajax('index.php?cmd=ajax/edit/status',
		{
			method: 'post',
			data: 'id=' + ViewIssue.id + '&status_id=' + status_id + '&show=status&save=true', 
			update: $(this.container),
			onComplete: ViewIssue.Status.updated
		}).request();	
	},
	
	updated: function()
	{
		ViewIssue.Status.getElements();
		
		// Update history
		ViewIssue.updateHistory();
	},
	
	cancel: function(status_id)
	{
		// Replace buttons with loading image
		this.removeButtons();
		this.loading();		
		
		// Create AJAX request
		new Ajax('index.php?cmd=ajax/edit/status',
		{
			method: 'post',
			data: 'id=' + ViewIssue.id + '&status_id=' + status_id + '&show=status', 
			update: this.container,
			onComplete: ViewIssue.Status.getElements.bind(ViewIssue.Status)
		}).request();	
	},
	
	loading: function()
	{
		new Element('img', { src: 'templates/arctic/images/loading.gif' }).setStyle('float', 'right').injectTop(this.container);
	},
	
	removeButtons: function()
	{
		var buttons = this.container.getElements('button');
		
		buttons[0].remove();
		buttons[1].remove();
	}
	
}

if (!$defined(console))	var console = { log: function(message) { alert(message); } }

// Start it up
window.addEvent('domready', ViewIssue.initialise);
