var 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();
			}
		}
	}
};

var sccxr = new Object();

/*
	START: Utility funcs
*/
	sccxr.getCookie = function(cookieKey)
	{
		var rgs;
		if (!(rgs = document.cookie.match(new RegExp("\\s"+cookieKey+"=([^;]+);"))))
		{
			if (!(rgs = document.cookie.match(new RegExp("\\s"+cookieKey+"=([^;]+)$"))))
			{
				if (!(rgs = document.cookie.match(new RegExp("^"+cookieKey+"=([^;]+);"))))
				{
					rgs = document.cookie.match(new RegExp("^"+cookieKey+"=([^;]+)$"));
				}
			}
		}

		if (rgs != null)
		{
			return rgs[1];
		}
		else
		{
			return "";
		}
	}

	sccxr.setCookie = function(key, data, expryInDays, path, domain)
	{
		var expry = new Date();
		
		expryInDays = expryInDays ? expryInDays : .25;
		path = path ? path : "/";
		domain = domain ? domain : "sierraclub.org";
		expry.setTime(Math.floor(expry.getTime() + (expryInDays * 86400000)));

		document.cookie =
		 key+"="+encodeURIComponent(data)+
		 "; expires="+(expry.toUTCString ? expry.toUTCString() : expry.toGMTString())+
		 "; path="+path+
		 "; domain=."+domain;
	}

	sccxr.truncator = function(str, pos, append)
	{
		var len;
		
		str = str.replace(/<[^>]+>/g, " ");
		str = str.replace(/\&nbsp;/g, " ");
		
		len = str.length;

		if (pos >= len)
		{
			return str;
		}
		pos--;
		len--;
		
		while ((pos < len) &&
		       !str.substr(pos, 1).match(/\s/))
		{
			pos++;
		}
		
		if (pos < len)
		{
			return str.substr(0, pos)+append;
		}
		else
		{
			return str.substr(0, len + 1);
		}
	}



/*
	END: Utility funcs
*/

	
/*
	START: Show random div
*/
	sccxr.showRandomEl = function(selector)
	{
		var jq = jQuery(selector);
		jq.css("display", "none");
		jq.eq(Math.round(Math.random() * (jq.length - 1))).css("display", "block");
	}

	sccxr.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;
	}
	
	sccxr.pickRandomEls = function(selector, n, display, jqCtxt)
	{
		var visited = new Array();
		var picks = new Array();
		var picked = 0, ind, jq;
		
		if (jqCtxt)
		{
			jq = jQuery(selector, jqCtxt);
		}
		else
		{
			jq = jQuery(selector);
		}

		display = display ? display : "block"

		if (n >= jq.length)
		/* Leave all visible if number picked is greater than selection */
		{
			return;
		}
		
		jq.css("display", "none");
		while (picked != n)
		{
			ind = Math.round(Math.random() * (jq.length - 1));
			if (!visited[""+ind])
			{
				jq.eq(ind).css("display", display);
				visited[""+ind] = true;
				picked++;
				picks.push(ind);
			}
		}
		return picks;
	}
/*
	END: Show random div
*/

/*
	START: The Port Social Object Module Transverser
*/
	sccxr.socialObjModuleXV = function(jqc)
	{
		var jq, i, c, state = "start", div, dat, objs = new Array(), m;
		jq = jQuery("div.tp_module div div", jqc);
		for (i = 0, c = jq.length; i < c; i++)
		{
			div = jq.eq(i);
			switch (state)
			{
				case "start":
					dat = new Object();
					state = "get_image";
					break;
				case "get_image":
					dat.objURL = jQuery("a", div).attr("href");
					dat.objImgSrc = jQuery("img", div).attr("src");
					if (dat.objImgSrc && (typeof dat.objImgSrc == "string"))
					{
						if (m = dat.objImgSrc.match(/^(https?:\/\/[^\/]+\/)/))
						{
							dat.objImgSrc =
								"http://connect.sierraclub.org/"+
								dat.objImgSrc.substr(m[1].length);
						}
						else
						{
							dat.objImgSrc =
								"http://connect.sierraclub.org"+
								dat.objImgSrc;
						}
					}
					state = "obj_container";
					break;
				case "obj_container":
					state = "get_title";
					break;
				case "get_title":
					dat.objTitle = jQuery("a", div).html();
					dat.objMembers = jQuery("span", div).eq(1).html();
					state = "get_join_url";
					break;
				case "get_join_url":
					dat.joinURL = jQuery("a", div).attr("href");
					if (dat.joinURL && (typeof dat.joinURL == "string"))
					{
						if (m = dat.joinURL.match(/^(https?:\/\/[^\/]+\/)/))
						{
							dat.joinURL =
								"http://connect.sierraclub.org/"+
								dat.joinURL.substr(m[1].length);
						}
						else
						{
							dat.joinURL =
								"http://connect.sierraclub.org"+
								dat.joinURL;
						}
					}
					objs.push(dat);
					state = "start";
					break;
			}
		}
		return objs;
	}
/*
	END: The Port Social Object Module Transverser
*/


/*
	START: Home promo box
*/
	sccxr.homePromoBox = new Object();
	sccxr.homePromoBox.jqContext = null;
	sccxr.homePromoBox.optionCount = null;
	sccxr.homePromoBox.selectedInd = null;
	sccxr.homePromoBox.optionClicked = false;
	sccxr.homePromoBox.timeoutInterval = 12000;
	
	sccxr.homePromoBox.init = function()
	{
		var i, c, options, images, pointer;
		this.jqContext = jQuery("div.fw_center_col div.home_promo_a");
	
		jQuery("div.promo_option", this.jqContext).mouseover
		(
			function()
			{
				var jq = jQuery(this);
				jq.addClass("over");
				jq.prev(".delim_a").addClass("over").prev(".delim_b").addClass("over");							
				jq.next(".delim_a").addClass("over").next(".delim_b").addClass("over");							
			}
		);
		
		jQuery("div.promo_option", this.jqContext).mouseout
		(
			function()
			{
				var jq = jQuery(this);
				jq.removeClass("over");
				jq.prev(".delim_a").removeClass("over").prev(".delim_b").removeClass("over");							
				jq.next(".delim_a").removeClass("over").next(".delim_b").removeClass("over");							
			}
		);
		
		jQuery("div.promo_option", this.jqContext).click
		(
			function()
			{
				sccxr.homePromoBox.select(this.className.replace(/^.*option([0-9]+).*$/, '$1'), true);
			}
		);
	
		options =
			jQuery("div.promo_option", this.jqContext);
		for (i = 0, c = options.length; i < c; i++)
		{
			jQuery(options.get(i)).addClass("option"+i);
		}
		this.optionCount = c;
	
		images =
			jQuery("div.promo_image", this.jqContext);
		for (i = 0, c = images.length; i < c; i++)
		{
			jQuery(images.get(i)).addClass("image"+i);
		}
	
		this.select(0, false);
	
		setTimeout("sccxr.homePromoBox.update()", this.timeoutInterval);
	}
	
	sccxr.homePromoBox.update = function(selectedInd)
	{
		var nextInd = this.selectedInd + 1;
	
		if (this.optionClicked)
		{
			return;
		}
		
		if (nextInd == this.optionCount)
		{
			nextInd = 0;
		}
		this.select(nextInd, false);
		setTimeout("sccxr.homePromoBox.update()", this.timeoutInterval);
	}
	
	sccxr.homePromoBox.select = function(nextInd, clicked)
	{
		var option, image, pointer, optionLeft, optionWidth, pointerWidth;
	
		jQuery("div.promo_option", this.jqContext).removeClass("on_option");
		jQuery("div.delim_a", this.jqContext).removeClass("on_option");
		jQuery("div.delim_b", this.jqContext).removeClass("on_option");
		//jQuery("div.promo_image", this.jqContext).css("display", "none");
		jQuery("div.promo_option.option"+nextInd, this.jqContext).addClass("on_option");
		
		if (this.selectedInd !== null)
		{
			jQuery("div.promo_image.image"+this.selectedInd, this.jqContext).fadeOut("slow");
			jQuery("div.promo_image.image"+nextInd, this.jqContext).fadeIn("slow");
		}
		else
		{
			jQuery("div.promo_image.image"+nextInd, this.jqContext).css("display", "block");
		}
	
		option =
			jQuery("div.promo_option.option"+nextInd, this.jqContext);
		pointer =
			jQuery("img.promo_pointer", this.jqContext);
	
		optionLeft =
			option.get(0).offsetLeft - jQuery("div.promo_options", this.jqContext).get(0).offsetLeft;
		optionWidth = option.get(0).offsetWidth;
		pointerWidth = pointer.get(0).offsetWidth;
	
		option.addClass("on_option");
		option.prev(".delim_a").addClass("on_option").prev(".delim_b").addClass("on_option");							
		option.next(".delim_a").addClass("on_option").next(".delim_b").addClass("on_option");
	
		pointer.css("left", Math.round(optionLeft + (optionWidth / 2) - (pointerWidth / 2))+"px");
		pointer.css("top", "0px");
	
		this.selectedInd = nextInd;
		this.optionClicked = clicked || this.optionClicked;
	}
	
/*
	END: Home promo box
*/


/*
	START: Tab box
*/
	sccxr.tabBoxA = function(id)
	{
		if (id)
		{
			this.tabCount = 0;
			this.jqContext = document.getElementById(id);
			this.id = id;
			sccxr.tabBoxA.boxes[id] = this;
			this.init();
		}
	}
	new sccxr.tabBoxA();

	sccxr.tabBoxA.boxes = Array();
	
	sccxr.tabBoxA.prototype.init = function(stub)
	{
		var i, c, tabs, boxes, maxBoxHeight, jq;

		jQuery("div.tab", this.jqContext).mouseover
		(
			function()
			{
				jQuery(this).addClass("over");
			}
		);
		
		jQuery("div.tab", this.jqContext).mouseout
		(
			function()
			{
				jQuery(this).removeClass("over");
			}
		);
		
		jQuery("div.tab", this.jqContext).click
		(
			function()
			{
				rgs = this.className.match(/(^|\s)tab_(.+)_([0-9]+)(\s|$)/);
				sccxr.tabBoxA.select(rgs[2], rgs[3]);
			}
		);
	
		tabs =
			jQuery("div.tab", this.jqContext);
		for (i = 0, c = tabs.length; i < c; i++)
		{
			jq = jQuery(tabs.get(i));
			if (i == 0)
			{
				jq.addClass("first");
			}
			jq.addClass("tab_"+this.id+"_"+i);
			//jq.css("width", jQuery("div.vc_inner_b", jq).get(0).offsetWidth+"px");
		}
		this.tabCount = c;
	
		this.setHeight();

		this.select(0);
	}

	sccxr.tabBoxA.prototype.setHeight = function()
	{
		var boxes =
			jQuery("div.box", this.jqContext).css("height", "auto");
		var maxBoxHeight = 0;
		for (i = 0, c = boxes.length; i < c; i++)
		{
			jQuery(boxes.get(i)).addClass("box_"+this.id+"_"+i);
			maxBoxHeight =
				(boxes.get(i).offsetHeight > maxBoxHeight) ? boxes.get(i).offsetHeight : maxBoxHeight;
		}
		jQuery("div.boxes", this.jqContext).css("height", maxBoxHeight+"px");
		boxes.css("height", maxBoxHeight+"px");
	}

	sccxr.tabBoxA.select = function(id, ind)
	{
		sccxr.tabBoxA.boxes[id].select(ind);
	}

	sccxr.tabBoxA.prototype.select = function(ind)
	{
		var tab, image, pointer, tabLeft, tabWidth, pointerWidth;
	
		jQuery("div.tab", this.jqContext).removeClass("on_tab");
		jQuery("div.box", this.jqContext).css("display", "none");

		tab = jQuery("div.tab.tab_"+this.id+"_"+ind, this.jqContext).addClass("on_tab");
		jQuery("div.box.box_"+this.id+"_"+ind, this.jqContext).css("display", "block");

		pointer =
			jQuery("img.tab_pointer", this.jqContext);
	
		tabLeft =
			tab.get(0).offsetLeft - jQuery("div.tabs", this.jqContext).get(0).offsetLeft;
		tabWidth = tab.get(0).offsetWidth;
		pointerWidth = pointer.get(0).offsetWidth;
	
		pointer.css("left", Math.round(tabLeft + (tabWidth / 2) - (pointerWidth / 2))+"px");
		pointer.css("top", "0px");
	}
/*
	END: Tab box
*/
	
/*
	START: Solutions Promo Box
*/
	sccxr.solutnPromoBox = new Object();
	sccxr.solutnPromoBox.jqContext = null;
	sccxr.solutnPromoBox.optionCount = null;
	sccxr.solutnPromoBox.selectedInd = 0;
	sccxr.solutnPromoBox.thumbClicked = false;
	sccxr.solutnPromoBox.timeoutInterval = 5000;
	
	sccxr.solutnPromoBox.select = function(ind)
	{
/* Old behaviour */
		ind = Number(ind);
		jQuery("div.solution_detail", this.jqContext).eq(this.selectedInd).fadeOut("slow");
		jQuery("div.solution_detail", this.jqContext).eq(ind).fadeIn("slow");
		this.selectedInd = ind;

/* New behaviour - div.solution_details box has height of selected div.solution_detail
		var jq = jQuery("div.solution_detail", this.jqContext);
		ind = Number(ind);
		jQuery("div.solution_detail", this.jqContext).eq(this.selectedInd).css("display", "none");
		jq.eq(ind).fadeIn("fast");
		jQuery("div.solution_details", this.jqContext).css("height", jq.get(ind).offsetHeight+"px");
		this.selectedInd = ind;
*/
	}
	
	sccxr.solutnPromoBox.update = function()
	{
		var ind = this.selectedInd + 1;

		if (this.thumbClicked)
		{
			return;
		}
		
		if (ind = this.optionCount)
		{
			ind = 0;
		}
		this.select(ind);

		setTimeout("sccxr.solutnPromoBox.update()", this.timeoutInterval);
	}
	
	sccxr.solutnPromoBox.init = function()
	{
		var i, c, jq, height;
		this.jqContext = jQuery("div.fw_center_col div.solutions_promo");

		jq = jQuery("div.solution_detail", this.jqContext);

		height = 0;
		for (i = 0, c = jq.length; i < c; i++)
		{
			height =
			 (jq.get(i).offsetHeight > height) ? jq.get(i).offsetHeight : height;
			if (i > 0)
			{
				jq.eq(i).css("display", "none");
			}
		}
		jQuery("div.solution_details", this.jqContext).css("height", height+"px");
		jQuery("div.solution_details", this.jqContext).css("overflow", "visible");
		this.optionCount = c;

/* New behaviour - div.solution_details box has height of selected div.solution_detail
		jq.css("display", "none");
		jq.eq(0).css("display", "block");
		jQuery("div.solution_details", this.jqContext).css("height", jq.get(0).offsetHeight+"px");
		jQuery("div.solution_details", this.jqContext).css("overflow", "visible");
		this.optionCount = jq.length;
*/
		for (i = 0, c = jq.length; i < c; i++)
		{
			jq.eq(i).addClass("detail_"+i);
		}

		jq = jQuery("div.solution_thumbs a", this.jqContext);
		for (i = 0, c = jq.length; i < c; i++)
		{
			jq.eq(i).addClass("thumb_"+i);
		}
		jq.click
		(
			function()
			{
				rgs = this.className.match(/(^|\s)thumb_([0-9]+)(\s|$)/);
				sccxr.solutnPromoBox.select(rgs[2]);
				return false;
			}
		);
	}
	
	sccxr.fixSolutionsBlog = function()
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jq = jQuery("div.solutions_blog div.tp_module div.normaltxt12").eq(0);
					jq.html(sccxr.truncator(jq.html().replace(/<[^>]+>/g, ' '), 263, "..."));
				}
			}
		);
	}
/*
	END: Solutions Promo Box
*/


/*
	START: Community Snapshots Box
*/
	sccxr.homeCSnap = new Object();
	sccxr.homeCSnap.jqContext = null;
	sccxr.homeCSnap.selectedInd = null;
	
	sccxr.homeCSnap.init = function()
	{
		var jq;
		this.jqContext = jQuery("div.fw_container.home_page div.fw_center_col div.home_community_snap");
		
		jq = jQuery("div.snapshot", this.jqContext);
		this.selectedInd = Math.round(Math.random() * (jq.length - 1));
		jq.eq(this.selectedInd).css("display", "block");
	}
	
	sccxr.homeCSnap.initThumbs = function()
	{
		var i, c, jq, a, set = new Array(), seenFirst = false;

		jq = jQuery("a.snap_thumb", this.jqContext);
		jq.eq(this.selectedInd).css("display", "none");
		
		for (i = 0, c = jq.length; i < c; i++)
		{
			if (i != this.selectedInd)
			{
				set.push(i);
			}
		}
		
		set = sccxr.pickRandom(4, set);

		for (i = 0, c = set.length; i < c; i++)
		{
			jq.eq(set[i]).addClass("thumb_visible");
		}
		
		jQuery("a.snap_thumb.thumb_visible", this.jqContext).eq(0).addClass("first");
	}
/*
	END: Community Snapshots Box
*/


/*
	START: Footer backgrounds
*/
	sccxr.fixFooterBgs = function()
	{
		var i, c, h = 0, ht;
		var jqc = jQuery(document.getElementById("fw_footer_nav"));
		var jq = jQuery("div.footer_nav_inner div.nav_section", jqc);
		jq.eq(0).addClass("first");
		for (i = 0, c = jq.length; i < c; i++)
		{
			h = ((ht = jq.get(i).offsetHeight) > h) ? ht : h;
		}
		jq.css("height", h+"px");
	}
/*
	END: Footer backgrounds
*/

	
/*
	START: Map widget
*/
	sccxr.mapWidget = new Object();
	sccxr.mapWidget.jqContext = null;
	
	sccxr.mapWidget.init = function(srcInit)
	{
		var src;
		if (!this.jqContext)
		/* General Init */
		{
			this.jqContext = jQuery("div#around_the_world_block");
			this.img = jQuery("img.world_map_img", this.jqContext);
			src = this.img.attr("src");
			this.img = this.img.get(0);
			this.imgPrefix = src.replace(/\/[^\/]+$/, '/');
			this.imgs = new Array();
			this.imgs[src] = new Image();
			this.imgs[src].src = src;
			this.defaultSrc = src;
		}
		
		srcInit = this.imgPrefix+srcInit.replace(/^.+\/([^\/]+)$/, "$1");
		this.imgs[srcInit] = new Image();
		this.imgs[srcInit].src = srcInit;
	}
	
	sccxr.mapWidget.over = function(src)
	{
		this.img.src = this.imgPrefix+src.replace(/^.+\/([^\/]+)$/, "$1");
	}
	
	sccxr.mapWidget.out = function()
	{
		this.img.src = this.defaultSrc;
	}
/*
	END: Map widget
*/


/*
	START: Port widget fixers
*/
	sccxr.clearPortInlineStyle = function(ctxt)
	{
		jQuery("*", ctxt).attr("style", "");
	}
/*
	END: Port widget fixers
*/


/*
	START: Forum Feedrolls
*/
	sccxr.forumFeedroll = function(selector)
	{
		delayedExec.add
		(
			{
				"selector": selector,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc = jQuery(this.selector);
			
					sccxr.clearPortInlineStyle(jQuery("div.tp_module", jqc));
			
					picks = sccxr.pickRandomEls("div.featured_profile", 2, "inline", jqc);
			
					pick = -1;
					for (i = 0, c = picks.length; i < c; i++)
					{
						pick = ((pick == -1) || (picks[i] < pick)) ? picks[i] : pick;
					}
					jQuery("div.featured_profile", jqc).eq(pick).addClass("left_col");
				}
			}
		);
	}
/*
	END: Forum Feedrolls
*/


/*
	START: Featured Profile
*/
	sccxr.featuredProfiles = function()
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc = jQuery("div#featured_profiles_box");
					var i, c, pick, picks;
			
					sccxr.clearPortInlineStyle(jQuery("div.tp_module", jqc));
			
					picks = sccxr.pickRandomEls("div.featured_profile", 2, "inline", jqc);
			
					pick = -1;
					for (i = 0, c = picks.length; i < c; i++)
					{
						pick = ((pick == -1) || (picks[i] < pick)) ? picks[i] : pick;
					}
					jQuery("div.featured_profile", jqc).eq(pick).addClass("left_col");
				}
			}
		);
	}
/*
	END: Featured Profile
*/


/*
	START: Community Actions
*/
	sccxr.socialObjFixer = function(className, args)
	{
		delayedExec.add
		(
			{
				"className": className,
				"args": args,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc = jQuery("div.right_col_box_a.tp_social_object."+this.className);
					var i, c, jq, objs, dat, html;
					
					args = this.args ? this.args : new Object();
			
					objs = sccxr.socialObjModuleXV(jqc);
			
					while (2 < objs.length)
					{
						objs.splice(Math.round(Math.random() * (objs.length - 1)), 1);
					}
			
					html = '<div class="clearfix">';
					for (i = 0, c = objs.length; i < c; i++)
					{
						dat = objs[i];
						if (dat.joinURL)
						{
							dat = objs[i];
							html +=
							(
								'<div class="box_column'+(i == 0 ? ' left_col' : '')+'">'+
									(args.hideImage ? '' : '<a href="'+dat.objURL+'"><img src="'+dat.objImgSrc+'" width="78" alt=""/></a>')+
									'<a href="'+dat.objURL+'">'+dat.objTitle+'</a><br/>'+
									dat.objMembers+' Members<br/>'+
									'<a href="http://connect.sierraclub.org'+dat.joinURL+'"><img src="http://climatecrossroads.sierraclub.org/images/buttons/join.gif" /></a><br/>'+
								'</div>'
							);
						}
					}
					html += '</div>';
			
					jQuery("div.tp_module", jqc).css("display", "none").after(html);
				}
			}
		);
	}
/*
	END: Community Actions
*/


/*
	START: Idea Factory, Related Discussion
*/
	sccxr.feedRollFixer = function(className)
	{
		delayedExec.add
		(
			{
				"className": className,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc = jQuery("div.right_col_box_a.tp_forum_feedroll."+this.className);		
					sccxr.clearPortInlineStyle(jQuery("div.tp_module", jqc));
					jQuery("a", jqc).attr("class", "");
				}
			}
		);
	}
/*
	END: Idea Factory, Related Discussion
*/


/*
	START: Homepage module fixers
*/
	sccxr.hpFeaturedBlog = function(selector, numItems)
	{
		delayedExec.add
		(
			{
				"selector": selector,
				"numItems": numItems,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jq, jq2, jq3, m, html, len, i, c, html = "", posts = new Array();
					var jqc = jQuery(this.selector);
					
					numItems = this.numItems ? this.numItems : 2;
					html = "";
			
					/* Grab URL/Headline */
					jq = jQuery("a.boldlnk14", jqc);
					for (i = 0; i < numItems; i++)
					{
						posts[i] = {};
						posts[i].headline = jq.eq(i).html();
						posts[i].url = jq.eq(i).attr("href");	
					}
			
					/* Grab posted date */
					jq = jQuery("div.normaltxt10", jqc);
					for (i = 0; i < numItems; i++)
					{
						if (m = jq.eq(i).html().match(/\"\s+posted\s+([^\(]+)\(/i))
						{
							posts[i].date = m[1];
						}
					}
					
					/* Grab posted by */
					jq = jQuery("div.normaltxt12", jqc);
					for (i = 0; i < numItems; i++)
					{
						if (m = jq.eq(i).html().match(/^(\s*by\s+)([^<]+)</i))
						{
							posts[i].by = m[2];
							posts[i].bodyOffset = m[1].length+m[2].length;
						}
					}
					
					/* Grab post body */
					len = window.location.pathname.match(/^\/start\./) ? 600 : 263;
					for (i = 0; i < numItems; i++)
					{
						posts[i].body = sccxr.truncator(jq.eq(i).html().substr(posts[i].bodyOffset), len, '&hellip;');
					}
					
					for (i = 0; i < numItems; i++)
					{
						html +=
						(
							'<div class="blog_post">'+
								'<h3><a href="'+posts[i].url+'">'+posts[i].headline+'</a></h3>'+
								'<div class="blog_by">Posted'+(posts[i].by ? (' by '+posts[i].by+' on') : "")+' '+posts[i].date+'</div>'+
								'<div class="blog_body">'+posts[i].body+'&nbsp; <a class="blog_more" href="'+posts[i].url+'">Keep reading</a></div>'+
							'</div>'
						);
					}
			
					jq = jQuery("div.tp_module", jqc).after(html);
					jq.css("display", "none");
				}
			}
		);
	}
	
	sccxr.hpFeatureTabBoxSObj = function(selector, jqc, args)
	{
		delayedExec.add
		(
			{
				"selector": selector,
				"jqc": jqc,
				"args": args,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var objs, i, c, jqBoxCtxt, html;
					
					args = this.args ? this.args : {};
					args.joinSrc = args.joinSrc ? args.joinSrc : "/images/buttons/join.gif";
			
					jqBoxCtxt = jQuery(this.selector, this.jqc);
			
					objs = sccxr.socialObjModuleXV(jqBoxCtxt);
					
					html = "";
					for (i = 0, c = objs.length; i < c; i++)
					{
						dat = objs[i];
						html +=
							'<a href="'+dat.objURL+'" class="float_l"><img src="'+dat.objImgSrc+'" width="128" height="128" alt="" /></a>'+
							'<div class="float_l">'+
								'<h3><a href="'+dat.objURL+'">'+sccxr.truncator(dat.objTitle.replace(/^\s*/, "").replace(/\s*$/, ""), 37, "...")+'</a></h3>'+
								'<div class="members">MEMBERS</div>'+
								'<div class="member_numbers">'+dat.objMembers+'</div>'+
								'<a href="'+dat.joinURL+'" class="join_button"><img src="'+args.joinSrc+'" alt="Join" /></a>'+
							'</div>'
					}
					
					jq = jQuery("div.tp_module", jqBoxCtxt).after(html);
					jq.css("display", "none");
				}
			}
		);
	}
	
	sccxr.hpFeatureTabBoxFR = function(selector, jqc)
	{
		delayedExec.add
		(
			{
				"selector": selector,
				"jqc": jqc,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jq, i, c, j, d, jqBoxCtxt, jqSub, state, dat, url, tb;
					
					jqBoxCtxt = jQuery(this.selector, this.jqc);
			
					sccxr.clearPortInlineStyle(jQuery("div.tp_module", jqBoxCtxt));
					
					jq = jQuery("div.tp_module > div > div > div > div", jqBoxCtxt)
					state = "start";
					for (i = 0, c = jq.length; i < c; i++)
					{
						switch (state)
						{
							case "start":
								dat = [];
								dat["headline"] = jQuery("a", jq.eq(i));
								state = "body";
								break;
							case "body":
								dat["forum"] = jQuery("a.tp_normallnk10", jq.eq(i)).remove();
								dat["interval"] = jQuery("div.tp_itemdate", jq.eq(i)).html().replace(/: +/g, "");
			
								url = dat["headline"].attr("href");
								url = url.replace(/sierraclub\.portspaces\.com/, 'connect.sierraclub.org');
			
								jqBoxCtxt.prepend
								(
									"<div class=\"forum_post\">"+
									"<h2><a href=\""+url+"\">"+dat["headline"].html()+"</a></h2>"+
									"<div class=\"post_interval\">"+dat["interval"]+"</div>"+
									"<div class=\"post_discuss\"><a href=\""+url+"\">Discuss</a></div>"+
									"</div>"
								);
								state = "start";
								break;
						}
					}
					jq.remove();
					
					if (tb = sccxr.tabBoxA.boxes["tab_box_home_mid"])
					{
						tb.setHeight();
					}
				}
			}
		);
	}
	
	sccxr.hpFeatureTabBox = function(selector)
	{
		var jqc = jQuery(selector);
		this.hpFeatureTabBoxSObj("div.tp_home_latest_groups", jqc, {"joinSrc": "/images/buttons/join-v2.gif"});
		this.hpFeatureTabBoxSObj("div.tp_home_latest_actions", jqc, {"joinSrc": "/images/buttons/take_action_sm.gif"});
		this.hpFeatureTabBoxFR("div.tp_home_latest_discussions", jqc);
	}
/*
	END: Homepage module fixers
*/



/*
	START: Discussion Box Fixer
*/
	sccxr.discussionBoxFixer = function(selector)
	/* selector = "content_block tp_discussion_box" */
	{
		delayedExec.add
		(
			{
				"selector": selector,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc, jq, i, c, state = "pnl", div, dat, objs = new Array(), html, m;
					jqc = jQuery(this.selector);
			
					jq = jQuery("div.tp_module div", jqc);
					for (i = 0, c = jq.length; i < c; i++)
					{
						div = jq.eq(i);
						switch (state)
						{
							case "pnl":
								state = "pnl_inner";
								break;
							case "pnl_inner":
								state = "start";
								break;
							case "start":
								dat = new Object();
								dat.title = jQuery("a", div).html();
								dat.url = jQuery("a", div).attr("href");
								state = "date_container";
								break;
							case "date_container":
								state = "get_interval";
								break;
							case "get_interval":
								if (m = div.eq(0).html().match(/:\s*(([0-9]+)\s+(days|day|hour|hours|minute|minutes|second|seconds)\s+ago)/i))
								{
									dat.timeInterval = m[1];
								}
								else
								{
								}
								objs.push(dat);
								state = "email_this";
								break;
							case "email_this":
								state = "start";
								break;
						}
					}
					
					html = '<div class="discussion_topics">';
					for (i = 0, c = objs.length; i < c; i++)
					{
						dat = objs[i];
						html +=
							'<div class="discussion_topic">'+
								'<div class="topic_title"><a href="'+dat.url+'">'+dat.title+'</a></div>'+
								'<div class="days_ago">'+dat.timeInterval+'</div>'+
							'</div>'
					}
					html += '</div>';
			
					jq = jQuery("div.tp_module", jqc).after(html);
					jq.css("display", "none");
				}
			}
		);
	}
/*
	END: Discussion Box Fixer
*/


/*
	START: Protect Page
*/
	sccxr.protectPageBoxFixer = function(jqc, className)
	{
		delayedExec.add
		(
			{
				"jqc": jqc,
				"className": className,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var i, c, jq, jqbc, objs, dat, html;

					objs = this.socialObjModuleXV(jqbc = jQuery("div."+this.className, this.jqc));
					html = "";
					for (i = 0, c = objs.length; i < c; i++)
					{
						dat = objs[i];
						html +=
							'<div class="float_l action_container">'+
								'<a href="'+dat.objURL+'"><img src="'+dat.objImgSrc+'" width="128" height="128" alt="" /></a>'+
								'<h3><a href="'+dat.objURL+'">'+dat.objTitle+'</a></h3>'+
							'</div>';
					}
					
					jq = jQuery("div.tp_module", jqbc).after(html);
					jq.css("display", "none");
				}
			}
		);
	}

	sccxr.protectPageFixerActions = function(jqc)
	{
		delayedExec.add
		(
			{
				"jqc": jqc,
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var i, c, state = 'start', action, jq, html = "";
					var dats = new Array();
			/*
					var actionsTP = jQuery("div.tp_latest_actions div.tp_boldtxt10", jqc);
			
					for (i = 0, c = actionsTP.length; i < c; i++)
					{
						dats[i] = new Object();
						action = actionsTP.eq(i);
						dats[i].url = jQuery("div.tp_thumbbg a", action).attr("href");
						dats[i].src = jQuery("div.tp_thumbbg a img", action).attr("src");
						dats[i].title = jQuery("a", action).eq(1).html();
					}
			*/
			
					var actionsTP = jQuery("div.tp_latest_actions div.tp_module div", this.jqc).eq(0);
					i = 0;
					while (actionsTP.length && jQuery("a", actionsTP).length)
					{
						dats[i] = new Object();
						action = actionsTP.eq(0);
						dats[i].url = jQuery("a", action).eq(0).attr("href");
						dats[i].src = jQuery("a img", action).eq(0).attr("src");
						dats[i].title = jQuery("a", action).eq(1).html();
						actionsTP = actionsTP.next();
						i++;
					}
			
					for (i = 0, c = dats.length; i < c; i++)
					{
						dat = dats[i];
						if (dat.src)
						{
							if (m = dat.src.match(/^(https?:\/\/[^\/]+\/)/))
							{
								dat.src =
									"http://connect.sierraclub.org/"+
									dat.src.substr(m[1].length);
							}
							else
							{
								dat.src =
									"http://connect.sierraclub.org"+
									dat.src;
							}
						}
						html +=
							'<div class="float_l action_container">'+
								'<a href="'+dat.url+'"><img src="http://connect.sierraclub.org'+dat.src+'" width="128" height="128" alt="" /></a>'+
								'<h3><a href="'+dat.url+'">'+dat.title+'</a></h3>'+
							'</div>';
					}
					jq = jQuery("div.tp_latest_actions div.tp_module", jqc).after(html);
					jq.css("display", "none");
				}
			}
		);
	}

	sccxr.protectPageFixer = function(id)
	{
		//var jqc = jQuery("div#"+id), tb;
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var tb, jqs, jq, i, c, src, m, href;
					if (tb = sccxr.tabBoxA.boxes["tab_box_protect_actions"])
					{
						tb.setHeight();
					}

					jqs = jQuery("div#tab_box_protect_actions img");
					for (i = 0, c = jqs.length; i < c; i++)
					{
						jq = jqs.eq(i);
						if ((src = jq.attr("src")) && src.match(/join\.[^\.]+/i))
						{
							jq.attr("src", "http://climatecrossroads.sierraclub.org/images/buttons/join-v2.gif");
						}
					}

					jqs = jQuery("div#tab_box_protect_actions a.boldlnk12");
					for (i = 0, c = jqs.length; i < c; i++)
					{
						jq = jqs.eq(i);
						if (src = jq.html())
						{
							jq.html(sccxr.truncator(src.replace(/^\s*/, "").replace(/\s*$/, ""), 37, "..."));
						}
					}

					jqs = jQuery("div#tab_box_protect_actions a");
					for (i = 0, c = jqs.length; i < c; i++)
					{
						jq = jqs.eq(i);
						href = jq.attr("href");
						if (href && (typeof href == "string"))
						{
							if (m = href.match(/^(https?:\/\/[^\/]+\/)/))
							{
								href =
									"http://connect.sierraclub.org/"+
									href.substr(m[1].length);
							}
							else
							{
								href =
									"http://connect.sierraclub.org"+
									href;
							}
						}
						jq.attr("href", href);
					}
				}
			}
		);
		//this.protectPageBoxFixer(jqc, "tp_top_actions");
		//this.protectPageFixerActions(jqc);	
	}
/*
	END: Protect Page
*/


/*
	START: Determine Login Status
*/
	sccxr.validSSOLogin = null;
	sccxr.validSSOInited = false;
	sccxr.loginCheckLimit = 200;
	sccxr.loginCheckCount = 0;
	sccxr.loginCheckTimeout = 50;
	sccxr.ssoCookieKey = Math.round(Math.random() * 1000000);
	sccxr.loginHandlers = [];

	sccxr.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 () { sccxr.getSSOLogin(true) }, this.loginCheckTimeout);
		}
	}
	
	sccxr.redirectLoginIndex = function()
	{
	}
	
	sccxr.showLoginHeader = function()
	{
		sccxr.loginHandlers.push
		(
			function(validSSOLogin)
			{
				var jqc, i, c, nexturl, links;
		
				jqc = jQuery("div#fw_header_user_links");
				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);
					}
				}
			}
		);
		sccxr.getSSOLogin();
	}
	
	
	sccxr.showLoginRightCol = function()
	{
		sccxr.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");
				}
			}
		);
		
		sccxr.getSSOLogin();
	}
	
	sccxr.featuredPartnersJQ = null;
	sccxr.fixFeatPartners = function()
	{
		var i, c, n, maxH, h;
		if (this.featuredPartnersJQ === null)
		{
			this.featuredPartnersJQ = jQuery("div#hp_featured_partners div.rotating");
			maxH = 0;
			for (i = 0, c = this.featuredPartnersJQ.length; i < c; i++)
			{
				h = this.featuredPartnersJQ.get(i).offsetHeight;
				maxH = (h > maxH) ? h : maxH;
				if (i)
				{
					this.featuredPartnersJQ.eq(i).css("display", "none");
				}
			}
			jQuery("div#hp_featured_partners div.rotating_partners").css("height", maxH+"px");
			this.featuredPartnersJQ.eq(0).addClass("visible").fadeIn("slow");
		}
		else
		{
			for (i = 0, c = this.featuredPartnersJQ.length; i < c; i++)
			{
				n = this.featuredPartnersJQ.eq(i);
				if (n.hasClass("visible"))
				{
					n.removeClass("visible").fadeOut("slow");
					if (i == (c - 1))
					{
						this.featuredPartnersJQ.eq(0).addClass("visible").fadeIn("slow");
					}
					else
					{
						this.featuredPartnersJQ.eq(i + 1).addClass("visible").fadeIn("slow");
					}
					break;
				}
			}
		}
		setTimeout("sccxr.fixFeatPartners();", 5000);
	}


	jQuery("div.tp_module div.tpevents").ready
	(
		function()
		{
			delayedExec.add
			(
				{
					"flag": "tpBulkLoaded",
					"exec": function()
					{
							var jq, i, c, n;
							jq = jQuery("div.tp_module div.tpevents a");
							for (i = 0, c = jq.length; i < c; i++)
							{
								n = jq.eq(i);
								if (n.attr("href").substr(0, 1) == "/")
								{
									n.attr("href", "http://connect.sierraclub.org"+n.attr("href"));
								}
							}
					}
				}
			);
		}
	);


/*
	START: Local events scrubber
*/
	sccxr.hpLocalEventsFixer = function()
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqs = jQuery("div.tp_home_latest_events div.eventcontainer"), jq, i, c, html = "", eventtxt, m, hour, ampm, href;
					for (i = 0, c = jqs.length; i < c; i++)
					{
						jq = jqs.eq(i);
						eventtxt = jQuery("div.eventtxt", jq).eq(0).html();
						if (eventtxt && (typeof eventtxt == "string") && (m = eventtxt.match(/(^|\s|>)([0-9]+):([0-9]+)(\s|<|$)/)))
						{
							if ((hour = new Number(m[2])) > 12)
							{
								hour -= 12;
								ampm = "PM";
							}
							else
							{
								ampm = "AM";
							}
							eventtxt =
								eventtxt.replace(new RegExp("(^|\\s|>)("+m[2]+"):("+m[3]+")(\\s|<|$)"), "$1"+hour+":$3 "+ampm+"$4");
						}

						href = jQuery("div.eventlnk a", jq).eq(0).attr("href");
						if (href && (typeof href == "string"))
						{
							if (m = href.match(/^(https?:\/\/[^\/]+\/)/))
							{
								href =
									"http://connect.sierraclub.org/"+
									href.substr(m[1].length);
							}
							else
							{
								href =
									"http://connect.sierraclub.org"+
									href;
							}
						}

						html +=
						(
							"<div class=\"forum_post\">"+
							"<h2><a href=\""+href+"\">"+jQuery("div.eventlnk a", jq).eq(0).html()+"</a></h2>"+
							"<div class=\"post_interval\">"+eventtxt+"</div>"+
							"</div>"
						);
					}
					jQuery("div.tp_home_latest_events div.tp_module").after(html).css("display", "none");
					//sccxr.clearPortInlineStyle("div#hp_rcol_local_events div.tp_module");
					//jQuery("div#hp_rcol_local_events div.tpevents div div").eq(0).addClass("tpevent").next().addClass("tpevent");
				}
			}
		);
	}

	sccxr.rcLocalEventsFixer = function()
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqc = jQuery("div#hp_rcol_local_events div.tp_module div.eventcontainer");
					var jqs = jQuery("a", jqc), jq, i, c, m, href, eventtxt, m, hour, ampm;
					for (i = 0, c = jqs.length; i < c; i++)
					{
						jq = jqs.eq(i);

						href = jq.attr("href");
						if (m = href.match(/^(https?:\/\/[^\/]+\/)/))
						{
							href =
								"http://connect.sierraclub.org/"+
								href.substr(m[1].length);
						}
						else
						{
							href =
								"http://connect.sierraclub.org"+
								href;
						}
						jq.attr("href", href);
					}

					jqs = jQuery("div.eventtxt", jqc)
					for (i = 0, c = jqs.length; i < c; i++)
					{
						jq = jqs.eq(i);
						eventtxt = jq.html();
						if (eventtxt && (typeof eventtxt == "string") && (m = eventtxt.match(/(^|\s|>)([0-9]+):([0-9]+)(\s|<|$)/)))
						{
							if ((hour = new Number(m[2])) > 12)
							{
								hour -= 12;
								ampm = "PM";
							}
							else
							{
								ampm = "AM";
							}
							eventtxt =
								eventtxt.replace(new RegExp("(^|\\s|>)("+m[2]+"):("+m[3]+")(\\s|<|$)"), "$1"+hour+":$3 "+ampm+"$4");
							jq.html(eventtxt);
						}
					}
				}
			}
		);
	}

	sccxr.rcRelatedEventsFixer = function()
	{
		delayedExec.add
		(
			{
				"flag": "tpBulkLoaded",
				"exec": function()
				{
					var jqs = jQuery("div#rc_local_events_box div.eventcontainer"), jq, i, c, html = "", eventtxt, m, hour, ampm, href;
					for (i = 0, c = jqs.length; i < c; i++)
					{
						jq = jqs.eq(i);
						eventtxt = jQuery("div.eventtxt", jq).eq(0).html();
						if (eventtxt && (typeof eventtxt == "string") && (m = eventtxt.match(/(^|\s|>)([0-9]+):([0-9]+)(\s|<|$)/)))
						{
							if ((hour = new Number(m[2])) > 12)
							{
								hour -= 12;
								ampm = "PM";
							}
							else
							{
								ampm = "AM";
							}
							eventtxt =
								eventtxt.replace(new RegExp("(^|\\s|>)("+m[2]+"):("+m[3]+")(\\s|<|$)"), "$1"+hour+":$3 "+ampm+"$4");
							jQuery("div.eventtxt", jq).eq(0).html(eventtxt);
						}

						href = jQuery("div.eventlnk a", jq).eq(0).attr("href");
						if (href && (typeof href == "string"))
						{
							if (m = href.match(/^(https?:\/\/[^\/]+\/)/))
							{
								href =
									"http://connect.sierraclub.org/"+
									href.substr(m[1].length);
							}
							else
							{
								href =
									"http://connect.sierraclub.org"+
									href;
							}
						}
						jQuery("div.eventlnk a", jq).eq(0).attr("href", href);
					}
				}
			}
		);
	}
/*
	END: Local events scrubber
*/