(function(){
	var Y = YAHOO,
		D = Y.util.Dom,
		E = Y.util.Event,
		S = Y.util.Selector,
		G = Y.namespace('gaia.app.Guilds');

	G.Accordion = function() {
		var showing = null,
			prev_target = null,
			accordion = S.query('.accordion',null,true),
			content = S.query('.section_content',accordion),
			classnames = accordion.className.split(' '),
			leon_content = S.query('#leon_content',null,true);

		D.addClass(content,'hidden');
		if (leon_content && G.leonPhrases) {
			G.leonPhrases.push(leon_content.innerHTML);
		}

		for (var x = 0; x < classnames.length; x++) {
			var classname = classnames[x];
			if (classname.indexOf('autoshow_') > -1) {
				showing = classname.substring(9);
				var content = document.getElementById(classname.substring(9));
				D.removeClass(content,'hidden');
				prev_target = D.getLastChild(D.getLastChild(D.getPreviousSibling(content)));
				D.addClass(prev_target,'selected');
				break;
			}
		}

		E.addListener('guildsintro','click',function(e) {
			leon_content.innerHTML = G.leonPhrases[Math.floor(Math.random() * (G.leonPhrases.length))];
		});

		E.addListener(accordion,'click',function(e) {
			var target = YAHOO.util.Event.getTarget(e);
			if (target.tagName.toLowerCase() == 'a' && D.hasClass(target,'accordion-control')) {
				E.stopEvent(e);
				var content_to_show = target.href.substring(target.href.indexOf('#')+1);
				if (showing == content_to_show) {
					D.removeClass(target,'selected');
					D.addClass(showing,'hidden');
					showing = null;
					return;
				}
				if (showing) {
					D.removeClass(prev_target,'selected');
					D.addClass(showing,'hidden');
				}
				prev_target = target;
				D.addClass(target,'selected');
				D.removeClass(content_to_show,'hidden');
				showing = content_to_show;
				leon_content.innerHTML = G.leonPhrases[Math.floor(Math.random() * (G.leonPhrases.length))];
			}
		});
	};

	G.Paginator = function() {
		var content = D.get('myguildlist'),
			records = content.getElementsByTagName('li'),
			paginator = new Y.widget.Paginator({
				rowsPerPage : 5,
				totalRecords : records.length,
				containers : 'guild_pagination',
				previousPageLinkLabel : 'Prev',
				nextPageLinkLabel : 'Next',
				template : '<ul class="pagination"><li class="first">{PreviousPageLink}</li><li>{NextPageLink}</li></ul>'
			}),
			handlePagination = function (state) {
				for (var x = state.before.records[0]; x <= state.before.records[1]; x++) {
					records[x].style.display = 'none';
				}
				for (var x = state.records[0]; x <= state.records[1]; x++) {
					records[x].style.display = 'block';
				}

				paginator.setState(state);
			},
			init = paginator.getState({ page : 1 });

		D.addClass(records,'hidden');
		handlePagination(init);
		paginator.subscribe('changeRequest', handlePagination);
		paginator.render();
	};

	G.MyGuilds = function() {
		var showing = '',
			target = null,
			myPanel = document.getElementById('myguild_latest_posts'),
			template = '',
			parent = null,
			prev_parent = null,
			region = D.getRegion('myguilds'),
			pos = (region.right - region.left) - 2,
			guild_details = {};

		myPanel.style.left = pos + 'px';
		//myPanel.style.height = region.bottom - region.top + 'px';
		myPanel.style.overflow = 'hidden';

		var showPanel = function() {
			document.getElementById('searching').style.visibility = 'hidden';
			/*var attributes = { width: { from: 0, to: 548 } };
			var anim = new Y.util.Anim(myPanel, attributes, .5, Y.util.Easing.easeOut);
			anim.animate();*/
			myPanel.style.display = 'block';
		};

		var populateTemplate = function(guild) {
			var template = '<div class="shadow_container_top"><div class="sliding_door"></div></div><div class="shadow_container_middle"><div class="sliding_door"><div class="shadow_container_content"><div class="bd"><h4>Latest Topics on <a href="/guilds/?guild_id=' + guild.guild_id + '&_gaia_t_=1272">' + guild.guild_name + '</a></h4><a class="container-close" href="#" onclick="YAHOO.gaia.app.MyGuilds.close(event);">Close</a><div class="guild_posts_table"><table>';

			if (!guild.threads.length) {
				template += '<tr valign="top"><td colspan="3">No topics found! Head to your <a href="/guilds/viewforum.php?f='+ guild.forum_id +'&_gaia_t_=1272">guild\'s forum</a> and start posting.</td></tr>';
			}
			else {
				template += '<thead><tr valign="top"><th class="topic_title">Topic</th><th class="topic_replies">Replies</th><th class="topic_updated">Last Post</th></tr></thead><tbody>';
				for (var x = 0; x < guild.threads.length; x++) {
					var thread = guild.threads[x];
					template += '<tr><td><p class="topic_title"><a href="/guilds/viewtopic.php?t=' + thread.thread_id + '&_gaia_t_=1272&page=last">' + thread.thread_title + '</a><br /><span class="author">Author: <a href="/p/' + thread.user_id + '&_gaia_t_=1272">' + thread.user + '</a></span></p></td><td>' + thread.replies + '</td><td>' + thread.timestamp + '</td></tr>';
				}
			}

			template += '</tbody></table></div> <div class="guild_buttons"><a href="/guilds/viewforum.php?f='+ guild.forum_id +'&_gaia_t_=1272" class="info_button"><span class="button_cap"></span><span class="button_text">View Forum</span></a><a href="/guilds/?guild_id='+ guild.guild_id +'&_gaia_t_=1272" class="info_button"><span class="button_cap"></span><span class="button_text">Go to Guild</span></a></div> </div> </div> </div> </div><div class="shadow_container_bottom"><div class="sliding_door"></div></div>';
			if (myPanel.style.display != 'block') {
				showPanel();
			}
			myPanel.innerHTML = template;
		};

		return {
			close : function(e) {
				E.stopEvent(e);
				D.removeClass(parent,'selected');
				myPanel.style.display = 'none';
				document.getElementById('searching').style.visibility = 'visible';
				showing = null;
				return false;
			},
			getGuildInfo : function(e) {
				target = E.getTarget(e);
				if (target.tagName.toLowerCase() == 'a') {
					var url = target.href.split('?')[1].split('&');
					var key = '';
					for (var x = 0; x < url.length; x++) {
						key = url[x].split('=');
						if (key[0] == 'guild_id') {
							var guild_id = key[1];
							break;
						}
					}
					if (guild_id == '') {
						return true;
					}
					if (showing != guild_id) {
						E.stopEvent(e);
						if (prev_parent) {
							D.removeClass(prev_parent,'selected');
						}
						prev_parent = parent = D.getAncestorByTagName(target,'li');
						D.addClass(parent,'selected');
						showing = guild_id;
						populateTemplate(guild_details[guild_id]);
					}
				}
			},
			add_details : function(detail) {
				guild_details[detail.guild_id] = detail;
			},
			get_details : function(id) {
				if (id && guild_details.hasOwnProperty(id)) {
					return guild_details[id];
				}
				else {
					return guild_details;
				}
			}
		};
	};
})();
