var ap2=
{
	"imgPreloads": [],
	"paths": {},
	"onLoadJS": function(url, test, callback)
	{
		var thisObj = this;
		if (!test())
		{
			var loaded = false;
			var load = function()
			{
				if (test())
				{
					callback();
				}
				else
				{
					if (!loaded && url)
					{
						var el = document.createElement("script");
						el.setAttribute("type", "text/javascript");
						el.setAttribute("src", url);
						document.getElementsByTagName("head")[0].appendChild(el);
						loaded = true;
					}
					setTimeout(function() { load(); }, 50);
				}
			}
			load();
		}
		else
		{
			callback();
		}
	},

	"featureBoxesAHeight": function(jqc)
	{
		var boxes = jQuery("div.box div.content", jqc), h, mh = 0, i, c;
		for (i = 0, c = boxes.length; i < c; i++)
		{
			h = boxes.get(i).offsetHeight;
			mh = (h > mh) ? h : mh;
		}
		boxes.css("height", mh+"px");
	},
	
	"tabBox": function(jqc, returnResizer)
	{
		if (jqc.length)
		{
			returnResizer = returnResizer ? true : false;
			var contentBox = jQuery("div.contents", jqc);
			var contents = jQuery("div.content", contentBox), i, c, content, hMax = 0;

			var tabs = jQuery("div.tab", jqc);
			var anonClick = function(ind)
			{
				var f = function()
				{
					contents.addClass("content_off").eq(ind).removeClass("content_off");
					tabs.removeClass("tab_on").eq(ind).addClass("tab_on");
					return false;
				}
				return f;
			}

			for (i = 0, c = contents.length; i < c; i++)
			{
				content = contents.get(i);
				hMax = (hMax < content.offsetHeight) ? content.offsetHeight : hMax;
				tabs.eq(i).click(anonClick(i));
			}
			contents.addClass("content_off").eq(0).removeClass("content_off");
			tabs.eq(0).addClass("tab_on");
			contentBox.css("height", hMax+"px");
			contents.css("height", hMax+"px").css("width", contentBox.get(0).offsetWidth+"px");
			if (returnResizer)
			{
				var resizer = function()
				{
					var i, c, content, hMax = 0;
					contents.css("height", "auto");
					for (i = 0, c = contents.length; i < c; i++)
					{
						content = contents.get(i);
						hMax = (hMax < content.offsetHeight) ? content.offsetHeight : hMax;
					}
					contentBox.css("height", hMax+"px");
					contents.css("height", hMax+"px").css("width", contentBox.get(0).offsetWidth+"px");
				}
				return resizer;
			}
		}
		return null;
	},
	
	"util":
	{
		"getParentNodeIter": function(n, tag, classNames, id)
		{
			var found = true, c, i;
	
			if (!n || !n.tagName)
			{
				return jQuery([]);
			}
	
			if ((tag != "") &&
					(tag != "*") && 
					(n.tagName.toUpperCase() != tag))
			{
				found = false;
			}
	
			if (found &&
				 (id != "") &&
				 (n.id != id))
			{
				found = false;
			}
	
			if (found && (c = classNames.length))
			{
				for (i = 0; i < c; i++)
				{
					if (!n.className.match(new RegExp("(^|\\s)"+classNames[i]+"(\\s|$)")))
					{
						found = false;
						break;
					}
				}
			}
			
			if (found)
			{
				return jQuery(n);
			}
			else
			{
				if (n.parentNode)
				{
					return this.getParentNodeIter(n.parentNode, tag, classNames, id);
				}
				else
				{
					return jQuery([]);
				}
			}
		},
		"getParentNode": function(n, selector)
		{
			var ch, b = "", i, c, tag = "", classNames = [], id = "", state = "START";
	
			if (!n || !n.length)
			{
				return jQuery([]);
			}
	
			for (i = 0, c = selector.length; i < c; i++)
			{
				ch = selector.substr(i, 1);
				switch(state)
				{
					case "START":
						if (ch == "#")
						{
							tag = b;
							b = "";
							state = "IN_ID";
						}
						else if (ch == ".")
						{
							tag = b;
							b = "";
							state = "IN_CLASS";
						}
						else
						{
							b += ch;
						}
						break;
					case "IN_ID":
						if (ch == ".")
						{
							id = b;
							b = "";
							state = "IN_CLASS";
						}
						else
						{
							b += ch;
						}
						break;
					case "IN_CLASS":
						if (ch == "#")
						{
							classNames.push(b);
							b = "";
							state = "IN_ID";
						}
						else if (ch == ".")
						{
							classNames.push(b);
							b = "";
							state = "IN_CLASS";
						}
						else
						{
							b += ch;
						}
						break;
				}
			}
	
			switch(state)
			{
				case "START":
					tag = b;
					break;
				case "IN_ID":
					id = b;
					break;
				case "IN_CLASS":
					classNames.push(b);
					break;
			}
			return this.getParentNodeIter(n.get(0).parentNode, tag.toUpperCase(), classNames, id);
		},
		"cookie":
		{
			"cookie": "ap2",
			"obj": null,
			"semicolonRegExp": /\%3B/g,
			"semicolonEnc": "%3B",
			"domain": window.location.host.replace(/^.+\.([^\.]+\.[^\.]+)$/, "$1"),
			"get": function(k)
			{
				if (!this.obj)
				{
					this.init();
				}
				return this.obj[k];
			},
			"set": function(k, v)
			{
				if (!this.obj)
				{
					this.init();
				}
				this.obj[k] = v;
				this.write();
			},
			"init": function()
			{
				var m;
				if (m = document.cookie.match(new RegExp("(^|\\s)"+this.cookie+"=([^;]+)(;|$)")))
				{
					this.obj = jQuery.parseJSON(m[2].replace(this.semicolonRegExp, ";"));
				}
				else
				{
					this.obj = {};
				}
			},
			"write": function()
			{
				document.cookie =
					this.cookie+"="+this.encode(this.obj).replace(/;/g, this.semicolonEnc)+
					"; path=/"+
					"; domain=."+this.domain;
			},
			"encode": function(obj)
			{
				var k, r = "", i, c;
				switch (typeof obj)
				{
					case "string":
						return '"'+this.esc(obj)+'"';
						break;
					case "number":
						return ""+obj;
						break;
					case "object":
						for (k in obj)
						{
							if (!(""+k).match(/^[0-9]+$/))
							{
								isAssoc = true;
								break;
							}
						}

						if ((obj === null) || (obj === undefined))
						{
							return "null";
						}
						else if (obj.length === undefined)
						{
							for (k in obj)
							{
								r += ',"'+this.esc(k)+'": '+this.encode(obj[k]);
							}
							return "{"+r.substr(1)+"}";
						}
						else
						{
							for (i = 0, c = obj.length; i < c; i++)
							{
								r += ','+this.encode(obj[i]);
							}
							return "["+r.substr(1)+"]";
						}
						break;
					default:
						return "null";
				}
			},
			"esc": function(str)
			{
				return str.replace(/\n/g, "\\n").replace(/"/g, "\\\"");
			}
		}
	},

	"primaryNav": function(preloads)
	{
		var classPre = "level_", classPost = "_nav", classPostDelim = "_delim", classRegexp = new RegExp("(^|\\s)"+classPre+"([0-9]+)"+classPost+"(\\s|$)");
		// Set mousover/out handlers
		var anon = function()
		{
			var timeout = null;
			var over = function()
			{
				var m, thisJQ, h, flyout;
				if (timeout)
				{
					clearTimeout(timeout);
					timeout = null;
				}
				if (m = this.className.match(classRegexp))
				{
					thisJQ = jQuery(this).addClass(classPre+m[2]+classPost+"_over")
					if (m[2] == "1")
					{
						thisJQ.prev().addClass(classPre+m[2]+classPostDelim+"_over");
						thisJQ.next().addClass(classPre+m[2]+classPostDelim+"_over");
						if ((flyout = jQuery("div.level_1_flyout_body", thisJQ)).length)
						{
							h = flyout.get(0).offsetHeight;
							jQuery("div.level_1_flyout_bg_inner", thisJQ).css("height", h+"px");
							jQuery("div.level_1_flyout_bg", thisJQ).css("height", h+"px");
						}
					}
				}
			};
			var out = function()
			{
				var m, thisJQ = jQuery(this);
				if (timeout)
				{
					clearTimeout(timeout);
					timeout = null;
				}
				if (m = this.className.match(classRegexp))
				{
					if (m[2] == "1")
					{
						thisJQ.prev().removeClass(classPre+m[2]+classPostDelim+"_over");
						thisJQ.next().removeClass(classPre+m[2]+classPostDelim+"_over");
					}
					timeout = setTimeout(function() { thisJQ.removeClass(classPre+m[2]+classPost+"_over"); }, 25);
				}
			};
			return [over, out];
		}

		lis = jQuery("#fw_primary_nav div.level_1_nav").each
		(
			function()
			{
				var handlers = anon();
				jQuery(this).mouseover(handlers[0]).mouseout(handlers[1]);
			}
		);
	},

	"subNav": function()
	{
var dbug = window.location.search.match(/db=ug/), dbugc = 0;
		var jqc = jQuery("#left_nav_container");
		var loc;
		if (jqc.length)
		{
			loc = window.location.pathname.replace(/\.[^\.]+$/, "").toLowerCase().replace(/\/articles\/.*$/, "/").replace(/\/index$/, "/");
			jQuery("a", jqc).each
			(
				function(i)
				{
					var href =
						this.href.replace(/^[^:]+:\/\/[^\/]+\//, "/").replace(/\.[^\.]+$/, "").toLowerCase().replace(/\/articles\/.*$/, "/");
					var n, nn;
					if (loc == href)
					{
						n = jQuery(this).parent().addClass("navigationItemInSection");

						// Make the next(child) submenu have the in section state
						if ((nn = n.next()).hasClass("navigationSubMenu"))
						{
							nn.addClass("navigationSubMenuInSection");
						}

						// Make the parent submenu have the in section state
						if ((nn = n.parent()).hasClass("navigationSubMenu"))
						{
							nn.addClass("navigationSubMenuInSection");
							nn.prev().addClass("navigationItemInSection");
						}
					}
				}
			);
		}
	},
	
	"rhtml": function(node)
	{
		document.write
		(
			'<script type="text/javascript" src="http://commonknow.com/ph/arc/rhtml.php?node='+node+'"></script>'
		);
	},
	"preload": function(preloads)
	{
		var i, c, img;
		for (i = 0, c = preloads.length; i < c; i++)
		{
			(img = new Image()).src = preloads[i];
			this.imgPreloads.push(img);
		}
	},

	"googleFeedLoaded": false,
	"googleFeedLoad": function(url, callback)
	{
		var feed = new google.feeds.Feed(url);
		feed.setNumEntries(4);
		feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
		feed.load(callback);
	},
	"googleFeed": function(url, callback)
	{
		var thisObj = this;
		if (!url.length)
		{
			return;
		}

		if (!this.googleFeedLoaded)
		{
			google.load("feeds", "1");
			this.onLoadJS
			(
				"/assets-ap10/js/jqtpl.js",
				function() { return window.jQTpl; },
				function() { }
			);
			this.googleFeedLoaded = true;
		}

		try
		{
			if (google.feeds && google.feeds.Feed)
			{
				this.googleFeedLoad(url, callback);
				return;
			}
		}
		catch (e)
		{
			// Ignore
		}
		setTimeout(function() { thisObj.googleFeed(url, callback); }, 50);
	},
	"recentItemsFeed": function(result, selector, visibleClass)
	{
		this.onLoadJS
		(
			"/assets-ap10/js/jqtpl.js",
			function() { return window.jQTpl; },
			function()
			{
				var jqc = jQuery(selector);
				var tpl = new jQTpl(jqc), entries, entry, i, c, d, items = [];
				if (result.feed && (entries = result.feed.entries) && (c = entries.length))
				{
					for (i = 0; i < c; i++)
					{
						entry = entries[i];
						d =
						{
							"a": entry.title,
							"a/attr/href": entry.link
						};
						items.push(tpl.make("li", d));
					}
					jqc.replaceWith(tpl.make("", {"ul": items}).addClass(visibleClass));
				}
				else
				{
					// No feed items
				}
			}
		);
	},
	"recentNewsFeed": function(result)
	{
		this.recentItemsFeed(result, "#area_landing_recent_news_feed", "section_recent_news_viz");
	},
	"recentDiscussionFeed": function(result)
	{
		this.recentItemsFeed(result, "#area_landing_recent_discussion_feed", "section_recent_discussion_viz");
	},

	"areaLandingArticlesBlock": function(selector, classSingle, cDiv)
	{
		var grpLabels = ['a', 'b', 'c'], grpLabel, grps = [], grp, i, c, state;
		var jqc = jQuery(selector, cDiv);
		for (i = 0, c = grpLabels.length; i < c; i++)
		{
			grpLabel = grpLabels[i];
			grps.push
			(
				{
					"label": grpLabel,
					"articles": jQuery("div.article_grp_"+grpLabel, jqc),
					"more": jQuery("div.article_grp_"+grpLabel+"_more", jqc)
				}
			);
		}

		state = "start";
		var anonClick = function(jq, display)
		{
			var f = function()
			{
				jq.css("display", display);
				return false;
			}
			return f;
		}
		for (i = 0, c = grps.length; i < c; i++)
		{
			grp = grps[i];
			switch (state)
			{
				case "start":
					if (!jQuery("div.article", grp.articles).length)
					// No articles at all - hide the whole block
					{
						jqc.addClass("hidden");
						return false;
					}
					state = "grps";
					break;
				case "grps":
					if (!jQuery("div.article", grp.articles).length)
					{
						if (i == 1)
						// If this is the second group, make this a single box
						{
							jqc.addClass(classSingle);
						}
						state = "none";
					}
					else
					{
						jQuery("a", grp.more).click(anonClick(grp.articles, "block"));
						jQuery("a.articles_hide", grp.articles).click(anonClick(grp.articles, "none"));
						break;
					}
				default:
					grp.articles.addClass("hidden");
					grp.more.addClass("hidden");
					break;
			}
		}
		return true;
	},
	"areaLandingSlideshow": function()
	{
		var slide, newSlide, jqc = jQuery("div#area_landing_slideshow"), jq, slides, inc, direction;
		if (jqc.length)
		{
			slides = jQuery("div.slides a", jqc);
			if (slides.length == 1)
			{
				slides.css("display", "block");
			}
			else
			{
				slides.eq(0).css("display", "block");
				jQuery("div.slide_ctl_bg", jqc).css("display", "block");
				jQuery("div.slide_ctl", jqc).css("display", "block");
				direction = "fwd";
				ind = 0;
				timeout = null;
				var inc = function(newDirection)
				{
					var nextInd = ind;
					if (newDirection == "pause")
					{
						if (timeout)
						{
							clearTimeout(timeout);
						}
						return;
					}

					if (timeout)
					{
						clearTimeout(timeout);
					}

					if (newDirection == "fwd")
					{
						if (++nextInd == slides.length)
						{
							nextInd = 0;
						}
					}
					else
					{
						if (--nextInd == -1)
						{
							nextInd = (slides.length - 1);
						}
					}
					slides.eq(ind).fadeOut("slow");
					slides.eq(nextInd).fadeIn("slow");
					ind = nextInd;
					direction = newDirection;
					timeout = setTimeout(function() { inc(direction); }, 5000);
				}

				jQuery("div.slide_ctl a.prev", jqc).click(function() { inc("back"); return false; });
				jQuery("div.slide_ctl a.pause", jqc).click(function() { inc("pause"); return false; });
				jQuery("div.slide_ctl a.next", jqc).click(function() { inc("fwd"); return false; });

				timeout = setTimeout(function() { inc(direction); }, 5000);
			}
		}
	},
	"areaLandingArticles": function()
	{
		var cDiv = jQuery("#contentDiv");
		this.areaLandingArticlesBlock("div.main_box_area_landing_experts", "main_box_area_landing_experts_one", cDiv);
		this.areaLandingArticlesBlock("div.main_box_area_landing_blogs", "main_box_area_landing_blogs_one", cDiv);
		this.areaLandingArticlesBlock("div.main_box_area_landing_articles", "main_box_area_landing_articles_one", cDiv);
		this.areaLandingSlideshow();
	},

	"expertLandingPage": function()
	{
		var cDiv = jQuery("#contentDiv ");
		jQuery("div.main_box_experts", cDiv).removeClass("hidden");
		jQuery("div.main_box_contributors", cDiv).removeClass("hidden");
	},

	"expertDetailArticles": function()
	{
		var cDiv = jQuery("#contentDiv");
		var flags =
		[
			this.areaLandingArticlesBlock("div.main_box_expert_detail_blogs", "main_box_expert_detail_blogs_one", cDiv),
			this.areaLandingArticlesBlock("div.main_box_expert_detail_advice", "main_box_expert_detail_advice_one", cDiv),
			this.areaLandingArticlesBlock("div.main_box_expert_detail_articles", "main_box_expert_detail_articles_one", cDiv)
		];

		cDiv = jQuery("div.main_box_expert_detail_intro div.expert_more", cDiv);
		if (flags[0])
		{
			jQuery("a.blog", cDiv).removeClass("hidden");
		}
		if (flags[1])
		{
			jQuery("a.q_and_a", cDiv).removeClass("hidden");
		}
		if (flags[2])
		{
			jQuery("a.expert_advice", cDiv).removeClass("hidden");
		}

		if (flags[0] && flags[1])
		{
			jQuery("span.blog", cDiv).removeClass("hidden");
		}
		if (flags[1] && flags[2])
		{
			jQuery("span.q_and_a", cDiv).removeClass("hidden");
		}
	},

	"textSize":
	{
		"link": null,
		"cookie": null,
		"cssPrefix": "",
		"set": function(code)
		{
			var el;
			if (this.link !== null)
			{
				this.link.remove();
				this.link = null;
			}
			if ((code == "big") || (code == "bigger"))
			{
				el = document.createElement("link");
				el.setAttribute("type", "text/css");
				el.setAttribute("rel", "stylesheet");
				el.setAttribute("href", this.cssPrefix+"font-size-"+code+".css");
				document.getElementsByTagName("head")[0].appendChild(el);
				this.link = jQuery(el);
				this.cookie.set("TSIZE", code);
			}
			else
			{
				this.cookie.set("TSIZE", "");
			}
		},
		"init": function(cookie, cssPrefix)
		{
			var code;
			jQuery("#fw_header_text_size a").click(function() { return false; });
			jQuery("#fw_header_text_size").mouseover
			(
				function()
				{
					jQuery(this).addClass("selector_over");
				}
			).mouseout
			(
				function()
				{
					jQuery(this).removeClass("selector_over");
				}
			);
			this.cssPrefix = cssPrefix;
			this.cookie = cookie;
			if ((code = this.cookie.get("TSIZE")) && code.length)
			{
				this.set(code);
			}
		}
	}
};


jQuery(document).ready
(
	function()
	{
		jQuery("div.loginLinks a.loginHref").click
		(
			function()
			{
				var f = function()
				{
					var n, done = false;
					if ((n = jQuery("body > div.yui-panel-container")).length)
					{
						n.css("z-index", "50001");
						jQuery("body > div.mask").css("z-index", "50000");
						done = true;
					}
					
					if (!done)
					{
						setTimeout(function() { f(); }, 50);
					}
				};
				f();
			}
		);
	}
);

