

var Page = {

	lastUrl: 'plugins/list?name=official',
	lastCallback: null,
	
	call: function(url)
	{
		var options = { 
			'url': url,
			method: 'get',
			onSuccess: arguments.length > 1 ? arguments[1] : null
		};
		
		return new Request(options).send();
	},
	
	load: function(url)
	{
		var panel = $('left-panel');
		var callback = arguments.length > 1 ? arguments[1] : null;
		var saveForRefresh = arguments.length > 2 ? arguments[2] : true;
		
		panel.set('html', '<img src="assets/images/ajax-loader.gif" alt="loading" class="image-in-text" /> loading...');
		panel.set('load', { method: 'get', onSuccess: callback, evalScript: true });
		panel.load(url);
		
		if (saveForRefresh) {
			Page.lastUrl = url;
			Page.lastCallback = callback;
		}
	},
	
	refresh: function()
	{
		var scroll = window.getScroll();
		Page.load(Page.lastUrl, function() {
			window.scrollTo(scroll.x, scroll.y);
			if (Page.lastCallback != null) {
				Page.lastCallback();
			}
		}, false);
	},

	start: function()
	{
		Page.lastCallback = Page.attachEventsToList;
		
		$$('#plugins-menu li a').addEvent('click', function() {
			Page.load(this.getProperty('href'), Page.attachEventsToList);
			return false;
		});
		
		$$('#orderby a').addEvent('click', function() {
			if (this.hasClass('selected')) return false;
			
			$$('#orderby a.selected').removeClass('selected');
			this.addClass('selected');
			
			Page.call(this.getProperty('href'), Page.refresh);
			return false;
		});
		
		Page.attachEventsToList();
	},
	
	attachEventsToList: function()
	{
		Page.highlightCategoryFromClass($('plugins-list'));
		
		$$('#plugins-list .plugin-info').each(function(el) {
			el.addEvents({
				'mouseover': function() {
					this.addClass('hover');
				},
				'mouseout': function() {
					this.removeClass('hover');
				}
			});
			
			var link = el.getElements('h3 a')[0];
			
			$$(link, el.getElements('h3, .plugin-description')).addEvent('click', function() {
				Page.load(link.getProperty('href'), Page.attachEventsToPlugin);
				return false;
			});
		});
		
		Page.ajaxifyLinks();
	},
	
	attachEventsToPlugin: function()
	{
		var categoryLink = $$('#left-panel h3 .category a')[0];
		Page.highlightCategoryFromClass(categoryLink);
		
		categoryLink.addEvent('click', function() {
			Page.load(this.getProperty('href'), Page.attachEventsToList);
			return false;
		});
		
		$('review-form').set('send', { onSuccess: function() {
			Page.refresh();
		}});
		
		$('review-form').addEvent('submit', function() {
			this.send();
			return false;
		});
		
		Page.ajaxifyLinks();
	},
	
	highlightCategoryFromClass: function(element)
	{
		var categoryName = element.getProperty('class');
		$$('#plugins-menu li a.selected').removeClass('selected');
		$$('#plugins-menu a.' + categoryName).addClass('selected');
	},
	
	ajaxifyLinks: function()
	{
		$$('#left-panel a.ajaxify').addEvent('click', function() {
			Page.call(this.getProperty('href'), Page.refresh);
			return false;
		});
	}
};

window.addEvent('domready', Page.start);