var TopLists = {
	Config	: {
		Limit : 20
	},
	Lists: {
		Artists: {
			week: null,
			month: null,
			all: null
		},
		Tracks: {
			week: null,
			month: null,
			all: null
		},
		Radios: {
			week: null,
			month: null,
			all: null
		},
		Indies: {
			week: null,
			month: null,
			all: null
		}
	}
};

TopLists.EventHandlers = {
	onTabClick : function (tab) {
		if (tab == 'artists') {
			if(TopLists.Lists.Artists.week==null && TopLists.Lists.Artists.month==null && 
					TopLists.Lists.Artists.all==null) {
				TopLists.EventHandlers.onTabClick("artists-week")
			}
		} else if (tab.indexOf("artists")>=0) {
			var type = tab.replace("artists-","");
			if(type=="week") {
				if(TopLists.Lists.Artists.week==null)
					TopLists.Loaders.loadArtists('week', TopListArtistWeek);
				TopLists.Lists.Artists.week.show();
			} else {
				if(TopLists.Lists.Artists[type]==null)
					TopLists.Loaders.loadArtists(type);
				TopLists.Lists.Artists[type].show();
			}
		} else if (tab == 'tracks') {
			if(TopLists.Lists.Tracks.week==null && TopLists.Lists.Tracks.month==null && 
					TopLists.Lists.Tracks.all==null) {
				TopLists.EventHandlers.onTabClick("tracks-week")
			}
		} else if (tab.indexOf("tracks")>=0) {
			var type = tab.replace("tracks-","");
			if(TopLists.Lists.Tracks[type]==null)
				TopLists.Loaders.loadTracks(type);
			TopLists.Lists.Tracks[type].show();
		} else if (tab == 'radios') {
			if(TopLists.Lists.Radios.week==null && TopLists.Lists.Radios.month==null && 
					TopLists.Lists.Radios.all==null) {
				TopLists.EventHandlers.onTabClick("radios-week")
			}
		} else if (tab.indexOf("radios")>=0) {
			var type = tab.replace("radios-","");
			if(TopLists.Lists.Radios[type]==null)
				TopLists.Loaders.loadRadios(type);
			TopLists.Lists.Radios[type].show();
		} else if (tab == 'indies') {
			if(TopLists.Lists.Indies.week==null && TopLists.Lists.Indies.month==null && 
					TopLists.Lists.Indies.all==null) {
				TopLists.EventHandlers.onTabClick("indies-week")
			}
		} else if (tab.indexOf("indies")>=0) {
			var type = tab.replace("indies-","");
			if(TopLists.Lists.Indies[type]==null)
				TopLists.Loaders.loadIndies(type);
			TopLists.Lists.Indies[type].show();
		}
	}
};

TopLists.Loaders = {
	loadArtists: function(type, data) {
		var params = {
			template: Templates.Artist.ListItem,
			show:false, 
			pagination:false,
			header: '<div class="line-list"><ul class="with-image">',
			footer: '</ul></div>',
			api: null,
			apiParams: null,
			defaultData: null,
			div_id: "tab-content-artists"
		};
		if(type=="week")
			params.div_id += "-week";
		else if(type=="month")
			params.div_id += "-month";
		else if(type=="all")
			params.div_id += "-all";
		if(typeof(data)!='undefined') {
			params.defaultData = data;
		} else {
			params.api = "Toplist.listArtist";
			params.apiParams = {
				'limit': TopLists.Config.Limit,
				'type': type
			}
		}
		TopLists.Lists.Artists[type] = new marvinList(params);
	},
	loadTracks: function(type) {
		var params = {
			div_id: "tab-content-tracks",
			api:"Toplist.listSong", 
			apiParams:{
				'limit': TopLists.Config.Limit,
				'type': type
			},
			template: Templates.Track.LineListItem,
			show:false, 
			pagination:false,
			header: '<div class="line-list"><ul>',
			footer: '</ul></div>'
		};
		if(type=="week")
			params.div_id += "-week";
		else if(type=="month")
			params.div_id += "-month";
		else if(type=="all")
			params.div_id += "-all";
		TopLists.Lists.Tracks[type] = new marvinList(params);
	}, 
	loadRadios: function(type) {
		var params = {
			div_id: "tab-content-radios",
			api:"Toplist.listRadio", 
			apiParams:{
				'limit': TopLists.Config.Limit,
				'type': type
			},
			template: Templates.Radio.ListItem,
			show:false, 
			pagination:false,
			header: '',
			footer: ''
		};
		if(type=="week")
			params.div_id += "-week";
		else if(type=="month")
			params.div_id += "-month";
		else if(type=="all")
			params.div_id += "-all";
		TopLists.Lists.Radios[type] = new marvinList(params);
	},
	loadIndies: function(type) {
		var params = {
			div_id: "tab-content-indies",
			api:"Toplist.listIndie", 
			apiParams:{
				'limit': TopLists.Config.Limit,
				'type': type
			},
			template: Templates.Indie.ListItem,
			show:false, 
			pagination:false,
			header: '<div class="line-list"><ul class="with-image">',
			footer: '</ul></div>'
		};
		if(type=="week")
			params.div_id += "-week";
		else if(type=="month")
			params.div_id += "-month";
		else if(type=="all")
			params.div_id += "-all";
		TopLists.Lists.Indies[type] = new marvinList(params);
	}
};

// On DOM ready - Start
$(function() {
	// Add tab behaviour to all tabs
	$(".tab-container, .inner-tab-container").addTabBehaviour({callback:TopLists.EventHandlers.onTabClick});
	//Default load artist tab
	TopLists.EventHandlers.onTabClick('artists');
});
// On DOM ready - End