// External Page
// 
// Every <a rel="externalpage-something" href="...">content</a> will have its 
// link loaded into an iframe

(function($)
{
	var sourceElements = {}; // sourceElements['id'] = domelement

	var relRegexp = /\sexternalpage-(\S+)\s/;
	var openbydefaultRegexp = /\sexternalpageopenbydefault\s/;
	
	
	$.ExternalPage = {
		disabled: false,
		
		setDisabled: function(disabled)
		{
			$.ExternalPage.disabled = disabled;
		}
	};
	
	$(function()
	{
		var a, links, rel, regexp, result;
		
		links = $('a[rel]').get();
		for (a = 0; a < links.length; a++)
		{
			rel = links[a].getAttribute("rel");
			if (!rel) continue;
			
			result = relRegexp.exec(" "+rel+" ");
			if (result)
			{
				// result[1] is the target id
				$(links[a]).bind("click", {targetId: result[1]}, externalpage_click);
				if (openbydefaultRegexp.test(" "+rel+" "))
					$(links[a]).click();
			}
		}
	});
	
	$.fn.externalpage = function()
	{
		var links, a, len, rel;
		links = $(this).get();
		
		for (a = 0, len = links.length; a < len; a++)
		{
			rel = links[a].getAttribute("rel");
			if (!rel) continue;
			
			result = relRegexp.exec(" "+rel+" ");
			if (result)
			{
				// result[1] is the target id
				$(links[a]).bind("click", {targetId: result[1]}, externalpage_click);
				if (openbydefaultRegexp.test(" "+rel+" "))
					$(links[a]).click();
			}
		}
	};
	
	function externalpage_click(e)
	{
		var oldSource, source, target; 

		if ($.ExternalPage.disabled) return;
		e.preventDefault();
		
		oldSource = sourceElements[e.data.targetid];
		sourceElements[e.data.targetid]	= source = this; // <a rel="externalpage-something">...</a>
		target = document.getElementById(e.data.targetId);
		if (!target) return;
		target.setAttribute('src', source.getAttribute('href'));
		
		$(source).addClass("externalpage-open");
		$(source.parentNode).addClass("externalpage-open");
		if (oldSource && oldSource !== source)
		{
			$(oldSource).removeClass("externalpage-open");
			$(oldSource.parentNode).removeClass("externalpage-open");
		}
	}
})(jQuery);