sctrails = {};

delayedExec =
{
	"handlers": [],
	"add": function(h)
	{
		if (!this.handlers[h.flag])
		{
			this.handlers[h.flag] = [];
		}
		this.handlers[h.flag].push(h);
	},
	"exec": function(flag)
	{
 		var i, c, handlers = this.handlers[flag];
		if (handlers)
		{
			for (i = 0, c = handlers.length; i < c; i++)
			{
				handlers[i].exec();
			}
		}
	}
};
	
/*
	START: Utilities
*/
	sctrails.communityAbsURL = function(href)
	{
		var hrefSrc = href;
		var m;
		if (m = href.match(/^https?:\/\/connect/i))
		{
			// Do nothing
		}
		else if (m = href.match(/^(https?:\/\/[^\/]+)(\/.*)$/i))
		{
			href =
				"http://connect.sierraclub.org"+
				m[2];
		}
		else
		{
			href =
				"http://connect.sierraclub.org"+
				href;
		}
if (href.match(/2B81F263\-DE6B\-42FF\-A00D\-4A0382E9C05D/))
{
	alert(hrefSrc+":"+href);
}
		return href;
	}
	
	sctrails.pickRandom = function(n, set)
	{
		var picked = 0, picks = new Array(), picksInd = new Array();

		if (n > set.length)
		{
			n = set.length;
		}

		while (picked != n)
		{
			ind = Math.round(Math.random() * (set.length - 1));
			while (picksInd[""+ind])
			{
				if (++ind == set.length)
				{
					ind = 0;
				}
			}

			picksInd[""+ind] = true;
			picks.push(set[ind]);
			picked++;
		}

		return picks;
	}
/*
	END: Utilities
*/


/*
	START: Determine Login Status
*/
	sctrails.validSSOLogin = null;
	sctrails.validSSOInited = false;
	sctrails.loginCheckLimit = 200;
	sctrails.loginCheckCount = 0;
	sctrails.loginCheckTimeout = 50;
	sctrails.ssoCookieKey = Math.round(Math.random() * 1000000);
	sctrails.loginHandlers = [];

	sctrails.getSSOLogin = function(isFromTimeout)
	{
		var m, checkAgain = true, i, c, ssoLogin;

		if ((this.validSSOLogin !== null) ||
		    (!isFromTimeout && this.validSSOInited))
		/* If already started looking or already found status, stop */
		{
			return;
		}

		this.validSSOInited = true;

		if (this.loginCheckCount++ > this.loginCheckLimit)
		/* If looked too many times, stop */
		{
			this.validSSOLogin = false;
			return;
		}

		if (m = document.cookie.match(new RegExp("(^|\\s|;)cvUserName=([^;]+)(;|$)")))
		{
			if (m[2].match(/\*/))
			{
				ssoLogin = false;
			}
			else
			{
				ssoLogin = true;
			}

			m = decodeURIComponent(m[2]).split(/:/);
			if (m && m.length && (m[0] == this.ssoCookieKey))
			{
				checkAgain = false;
				this.validSSOLogin = ssoLogin;
			}

			for (i = 0, c = this.loginHandlers.length; i < c; i++)
			{
				this.loginHandlers[i](ssoLogin);
			}
		}
		
		if (checkAgain)
		{
			setTimeout(function () { sctrails.getSSOLogin(true) }, this.loginCheckTimeout);
		}
	}
	
	sctrails.redirectLoginIndex = function()
	{
	}
	
	sctrails.showLoginHeader = function()
	{
		sctrails.loginHandlers.push
		(
			function(validSSOLogin)
			{
				var jqc, i, c, nexturl, links;

				jqc = jQuery("div#header div#rightBit");
				if (validSSOLogin)
				{
					jQuery("div.not_logged_in", jqc).css("display", "none");
					jQuery("div.logged_in", jqc).css("display", "block");
				}
				else
				{
					jQuery("div.not_logged_in", jqc).css("display", "block");
					jQuery("div.logged_in", jqc).css("display", "none");
				}
			
				links = jQuery("a.nexturl", jqc);
				if (!links.eq(0).attr("href").match(/NEXTURL/))
				{
					loc = encodeURIComponent(window.location.href);
					for (i = 0, c = links.length; i < c; i++)
					{
						links.eq(i).attr("href", links.eq(i).attr("href")+"?NEXTURL="+loc);
					}
				}
			}
		);
		sctrails.getSSOLogin();
	}
	
	
	sctrails.showLoginRightCol = function()
	{
		sctrails.loginHandlers.push
		(
			function(validSSOLogin)
			{
				if (validSSOLogin)
				{
					jQuery("div#fw_home_join_community").css("display", "none");
					jQuery("div#start_welcome_box").css("display", "block");
				}
				else
				{
					jQuery("div#fw_home_join_community").css("display", "block");
					jQuery("div#start_welcome_box").css("display", "none");
				}
			}
		);
		sctrails.getSSOLogin();
	}
/*
	END: Determine Login Status
*/


/*
	START: Fix homepage forums
*/
	sctrails.hpForumsFix = function()
	{
		jQuery("div#hp_forum_posts").css("display", "none");
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc = jQuery("div#hp_forum_posts");
					var div = jQuery("div.tp_module div", jqc).eq(3);
					var post, posts = [], state = "start", i, c, forums = [], iu, forum;
					
					if (!div.length)
					{
						return false;
					}

					while (div.length)
					{
						switch (state)
						{
							case "start":
								post = {};
								post.href = jQuery("a", div).eq(0).attr("href");
								post.title = jQuery("a", div).eq(0).html();
								state = "date";
								div = div.next();
								break;
							case "date":
								if (html = jQuery("div", div).eq(0).html())
								{
									post.date = html.replace(/^.+:\s*([^\s].+)$/, "$1");
								}
								posts.push(post);
								state = "start";
								div = div.next();
								break;
						}
					}
					
					var html = "";
					for (i = 0, iu = 0, c = posts.length; (i < c) && (iu < 5); i++)
					{
						post = posts[i];
						forum = post.href.replace(/^.+\/topic([0-9]+)\-([0-9]+)[\-\.].+$/i, "$1-$2");
						if (!forums[forum])
						{
							html +=
								'<tr class="'+((iu % 2) ? "on" : "")+'">'+
									'<td class="left"><a href="'+post.href+'">'+post.title+'<'+'/a><'+'/td>'+
									'<td class="right">'+post.date+'<'+'/td>'+
								'<'+'/tr>';
							forums[forum] = true;
							iu++;
						}
					}
					jQuery("table#hp_forum_post_table").html(html);
					return true;
				}
			}
		);
	}
/*
	END: Fix homepage forums
*/


/*
	START: Right column blog posts
*/
	sctrails.recentBlogPostsFix = function(selector)
	{
		jQuery(selector+" div.tp_module").css("display", "none");
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"selector": selector,
				"exec": function()
				{
					var selector = this.selector, jqc = jQuery(selector);
					var post, posts = [], state = "start", i, c, m;
					var div = jQuery("div.tp_module div", jqc).eq(1);
					
					if (!div.length)
					{
						return false;
					}

					while (div.length)
					{
						switch (state)
						{
							case "start":
								post = {};
								post.href = jQuery("a", div).eq(0).attr("href");
								post.title = jQuery("a", div).eq(0).html();
								if (html = jQuery("div.normaltxt10", div).eq(0).html())
								{
									if (m = html.match(/"\s+posted\s+([^\s][^\(]+\([^\)]+\))/))
									{
										post.date = m[1];
									}
								}
								post.comments = jQuery("div.normaltxt10 div div", div).eq(1).html();
								state = "skip";
								div = div.next();
								break;
							case "skip":
								if (html = jQuery("div", div).eq(0).html())
								{
									post.date = html.replace(/^.+:\s*([^\s].+)$/, "$1");
								}
								posts.push(post);
								state = "start";
								div = div.next();
								break;
						}
					}
					
			
					var html = "";
					for (i = 0, c = posts.length; i < c; i++)
					{
						post = posts[i];
						html +=
							'<a href="'+post.href+'">'+post.title+'<'+'/a><br />'+
							'posted on: '+post.date.replace(/\([^\)]+\)/g, "")+'<br />'+
							'<span class="size10">'+post.comments+'<'+'/span><br />&nbsp;<br />';
					}
			
					jQuery("div.tp_module", jqc).css("display", "none").after(html);
					return true;
				}
			}
		);
	}
/*
	END: Right column blog posts
*/


/*
	START: Home page tab box
*/
	sctrails.hpTabBoxTPFix = function(selector)
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"selector": selector,
				"exec": function()
				{
					var jqc = jQuery(this.selector);
					var div = jQuery("div.tp_module div div", jqc).eq(0);
					var post, posts = new Array(), state = "start", i, c, m;
			
					if (!div.length)
					{
						return false;
					}

					while (div.length)
					{
						switch (state)
						{
							case "start":
								if (!jQuery("a", div).length)
								{
									div = div.next();
									break;
								}
								post = new Object();
								post.href = jQuery("a", div).eq(0).attr("href");
								post.img = jQuery("a img", div).eq(0);
								post.title = jQuery("a", div).eq(1).html();
								posts.push(post);
								div = div.next();
								break;
						}
					}
					
			
					var html = "";
					for (i = 0, c = posts.length; i < c; i++)
					{
						post = posts[i];
						html +=
							'<li class="clearfix">'+
								'<a href="'+post.href+'" title="'+post.title.replace(/"/g, '')+'"><img src="'+post.img.attr("src")+'" alt="'+post.title.replace(/"/g, '')+'" width="128" height="128" /><'+'/a>'+
								''+post.title+
								'<div class="bottom"><a href="'+post.href+'" title="Let\'s Go!">Let\'s Go! &gt;<'+'/a><'+'/div>'+
							'<'+'/li>';
					}
			
					jQuery("div.tp_module", jqc).css("display", "none").html("").after(html);
					return true;
				}
			}
		);		
	}
/*
	END: Home page tab box
*/


/*
	START: Left column trails
*/
	sctrails.leftColTrailsFix = function(selector)
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"selector": selector,
				"exec": function()
				{
					var jqc = jQuery(this.selector+" a"), i, c;
					for (i = 0, c = jqc.length; i < c; i++)
					{
						jqc.eq(i).attr("href", sctrails.communityAbsURL(jqc.eq(i).attr("href")));
					}
				/*
					var jqc = jQuery(this.selector);
					var div = jQuery("div.tp_module div", jqc).eq(1);
					var post, posts = new Array(), state = "start", i, c, m;

					while (div.length)
					{
						switch (state)
						{
							case "start":
								if (!jQuery("a", div).length)
								{
									div = div.next();
									break;
								}
								post = new Object();
								post.href = jQuery("a", div).eq(1).attr("href");
								post.title = jQuery("a", div).eq(1).html();
								posts.push(post);
								div = div.next();
								break;
						}
					}
			
					var html = "";
					for (i = 0, c = posts.length; i < c; i++)
					{
						post = posts[i];
						html +=
							'<a href="'+post.href+'">'+post.title+'<'+'/a><br />&nbsp;<br />';
					}
			
					jQuery("div.tp_module", jqc).css("display", "none").after(html);
				*/
					return true;
				}
			}
		);		
	}
/*
	END: Left column trails
*/


/*
	START: Left forums
*/
	sctrails.lcForumsFix = function(selector)
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"selector": selector,
				"exec": function()
				{
					var jqc = jQuery(this.selector);
					var div = jQuery("div.tp_module div", jqc).eq(3);
					var post, posts = new Array(), state = "start", i, c;
					while (div.length)
					{
						switch (state)
						{
							case "start":
								post = new Object();
								post.href = jQuery("a", div).eq(0).attr("href");
								post.title = jQuery("a", div).eq(0).html();
								state = "date";
								div = div.next();
								break;
							case "date":
								if (html = jQuery("div", div).eq(0).html())
								{
									post.date = html.replace(/^.+:\s*([^\s].+)$/, "$1");
								}
								posts.push(post);
								state = "start";
								div = div.next();
								break;
						}
					}
					
					var html = "";
					for (i = 0, c = posts.length; i < c; i++)
					{
						post = posts[i];
						html +=
							'<a href="'+post.href+'">'+post.title+'<'+'/a><br />'+
							'	&nbsp;<br />';
					}
					jQuery("div.tp_module", jqc).css("display", "none").after(html);
				}
			}
		);
	}
/*
	END: Left forums
*/


/*
	START: Right events
*/
	sctrails.communityEventFix = function(selector)
	{
		jQuery(selector+" div.tp_module").css("display", "none");
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"selector": selector,
				"exec": function()
				{
					var jqc = jQuery(this.selector);
					var post, posts = new Array(), state = "start", i, c;

					var div = jQuery("div.tp_module div.tpevents div", jqc).eq(1);
					while (div.length)
					{
						switch (state)
						{
							case "start":
								post = new Object();
								post.title = jQuery("div.eventtxt", div).eq(0).html();
								post.href = ""+jQuery("a", div).eq(0).attr("href");
								post.date = jQuery("a", div).eq(0).html();
								posts.push(post);
								state = "start";
								div = div.next();
								break;
						}
					}

					if (!posts[0] || !posts[0].title)
					{
						div = jQuery("div.tp_module div.eventcontainer", jqc).eq(0);
						state = "start";
						posts = new Array();
						while (div.length)
						{
							switch (state)
							{
								case "start":
									post = new Object();
									post.title = jQuery("div.eventlnk a", div).eq(0).html();
									post.href = ""+jQuery("div.eventlnk a", div).attr("href");
									post.date = jQuery("div.eventtxt", div).eq(0).html();
									if (post.title)
									{
										posts.push(post);
									}
									state = "start";
									div = div.next();
									break;
							}
						}
					}
					
					var html = "", m, hour, ampm;
					for (i = 0, c = posts.length; i < c; i++)
					{
						post = posts[i];

						if (post.date && (typeof post.date == "string") && (m = post.date.match(/(^|\s|>)([0-9]+):([0-9]+)(\s|<|$)/)))
						{
							if ((hour = new Number(m[2])) > 12)
							{
								hour -= 12;
								ampm = "PM";
							}
							else
							{
								ampm = "AM";
							}
							post.date =
								post.date.replace(new RegExp("(^|\\s|>)("+m[2]+"):("+m[3]+")(\\s|<|$)"), "$1"+hour+":$3 "+ampm+"$4");
						}

						html +=
							'<div class="right_col_item"><a href="'+sctrails.communityAbsURL(post.href)+'">'+post.title+'<'+'/a><br />'+
							post.date+'<'+'/div>';
					}
					jQuery("div.tp_module", jqc).css("display", "none").after(html);
					delayedExec.exec("hpRightColFinished");
					return true;
				}
			}
		);		
	}
/*
	END: Right events
*/

/*
	START: Fix center col forums
*/
	sctrails.ccForumsFix = function()
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc = jQuery("div#cc_forum_posts");
					var div = jQuery("div.tp_module div", jqc).eq(3);
					var post, posts = new Array(), state = "start", i, c;
					while (div.length)
					{
						switch (state)
						{
							case "start":
								post = new Object();
								post.href = jQuery("a", div).eq(0).attr("href");
								post.title = jQuery("a", div).eq(0).html();
								state = "date";
								div = div.next();
								break;
							case "date":
								if (html = jQuery("div", div).eq(0).html())
								{
									post.date = html.replace(/^.+:\s*([^\s].+)$/, "$1");
								}
								posts.push(post);
								state = "start";
								div = div.next();
								break;
						}
					}
					
					var html = "";
					for (i = 0, c = posts.length; i < c; i++)
					{
						post = posts[i];
						html +=
							'<tr class="'+((i % 2) ? "" : "on")+'">'+
								'<td class="left"><a href="'+post.href+'">'+post.title+'<'+'/a><div class="normal">Posted '+post.date+'<'+'/div><'+'/td>'+
							'<'+'/tr>';
					}
					jqc.css("display", "none");
					jQuery("table#cc_forum_post_table").prepend(html);
				}
			}
		);
	}
/*
	END: Fix center col forums
*/

/*
	START: Fix flyout menus
*/
	jQuery(document).ready
	(
		function()
		{
			jQuery("#topNav li").mouseover
			(
				function()
				{
					jQuery(this).addClass("sfhover");
				}
			).mouseout
			(
				function()
				{
					jQuery(this).removeClass("sfhover");
				}
			);
		}
	);
/*
	END: Fix flyout menus
*/

