NetworkNews = function(config){
	/*
		TODO:
		- Integrate into TWP namespace.
		- Plug-in-ize it.
		- Better document exactly what needs to be configured and related consequences.
		- Better control of tabs through configuration.
		- Better control of HTML throught HTML templates, including ability to configure wrapping template
		- Make a getInformation method using this.targetedCode
	*/

	// START: Framework independent methods
	this.findAppropriateConfig = function(){
		var config = NetworkNews.defaults.config["default"];
		var pathname = location.pathname;
		var hostname = location.hostname;

		if ( pathname.match(NetworkNews.Constants.re["article-path"]) ) {
			config = NetworkNews.defaults.config["article"];
		} else if ( pathname.match(NetworkNews.Constants.re["multimedia-path"]) ) {
			config = NetworkNews.defaults.config["multimedia"];
		} else if ( pathname.match(NetworkNews.Constants.re["hp-path"]) && !hostname.match(NetworkNews.Constants.re["blog-domain"]) ) {
			config = NetworkNews.defaults.config["hp"];
		} else if ( hostname.match(NetworkNews.Constants.re["blog-domain"]) ) {
			config = NetworkNews.defaults.config["blog"];
		} else if ( pathname.match(NetworkNews.Constants.re["profile-path"]) ) {
			config = NetworkNews.defaults.config["profile"];
		}

		return config;
	}
	this.initFacebook = function(){
		this.generateFbCrossDomainReciever();

//		window.fbAsyncInit = function() {
		FB.init({
			apiKey:NetworkNews.Constants.API_KEY,
			cookie:true, // used for getLoginStatus
			xfbml:true // used for fb:fan, +other stuff
		});
//		};
	}
	this.finish = function(){
		this.finishFacebook();
	}
	this.finishFacebook = function(){
		FB.XFBML.parse();
		// with callback
		// FB.XFBML.parse( null, this.fbParseDone );
	}
	this.initAllModules = function(){
		for(var i=0; i < this.config.modules.length ;i++){
			var module = this.config.modules[i];
			for(var j=0; j < module.widgets.length ;j++){
				var widget = module.widgets[j];

				// for ease of management
				var targetedCode = {code:'',targets:[],ok:false};

				// set href
				if ( widget.needsHref ) {
					if ( widget.isFbIframe ) {
						if ( this.orbitId ) {
							// if there's an Orbit Id
							widget.fb.attrs['href']=this.getUrl({orbitId:this.orbitId});
						} else if ( false ) {
							// do other stuff
						}
					} // end if isFbIframe
				}

				// set targets & code
				if ( widget.needsTargetId || widget.needsTargetTag ) {

					// get targets by id
					if ( widget.needsTargetTag ) {
						targetedCode.targets = targetedCode.targets.concat( this.getTargets({tag:widget.selectors.tags['target']}) );
					}
					// get targets by tag
					if ( widget.needsTargetId ) {
						targetedCode.targets = targetedCode.targets.concat( this.getTargets({id:widget.selectors.ids['target']}) );
					}

					// set code
					targetedCode.code = this.prepareWidget(widget);

					if ( !!targetedCode.code && !!targetedCode.targets.length ) {
						targetedCode.ok = true;
						this.targetedCode = this.targetedCode.concat( targetedCode )
					}

				} else if ( widget.isMultiWidgeted ) {
					this.initMultiWidgets(widget);
				}

			}
		}

		// this places the actual code
		for(var k=0;k < this.targetedCode.length;k++){
			var targetedCode = this.targetedCode[k];
			if ( targetedCode.ok ) {
				this.placeWidget(targetedCode.code,targetedCode.targets);
			}
		}

	}
	this.renderMyActivity = function(widget){
		var code = '';
		// code += '<ul class="NN-liked-items"><li><div><a href="#LINK_TO_ARTILE"><img src="http://www.washingtonpost.com/wp-srv/networked-news/images/like-thumbnail.jpg" alt="LIKED_ITEM_TITLE"/></a></div><div><h5><a href="#LINK_TO_ARTICLE">Title of "Your Liked" Article Goes Here</a></h5><p><a href="#LINK_TO_FACEBOOK">24 People</a> like <a href="LINK_TO_ARTILE">this article</a></p></div></li><li><div><a href="#LINK_TO_ARTILE"><img src="http://www.washingtonpost.com/wp-srv/networked-news/images/like-thumbnail-2.jpg" alt="LIKED_ITEM_TITLE"/></a></div><div><h5><a href="#LINK_TO_ARTICLE">Title of "Your Liked" Article Goes Here</a></h5><p><a href="#LINK_TO_FACEBOOK">24 People</a> like <a href="LINK_TO_ARTILE">this article</a></p></div></li></ul><h1>Fake Code</h1>';
		return code;
	}
	this.getUrl = function(hints){
		var url = null;
		hints = hints||{};

		if ( hints.orbitId ){
			try{
				url = 'http://www.washingtonpost.com'+getUrlFromId(hints.orbitId);
			} catch(e) {
				// getUrlFromId not available
			}
		}
		return url;
	}
	this.prepareWidget = function(widget){
		var code = '';
		// initWidget if it needs it
		if ( typeof widget.initWidget == "function" ) {
			widget.initWidget();
		}
		if ( widget.isFbIframe ) {
			code += '<fb:'+widget.fb.tag+' ';
			attrs = widget.fb.attrs||{};
			for (var attr in attrs){
				code += attr+'="'+attrs[attr]+'" ';
			}
			code += '></fb:'+widget.fb.tag+'>';
		} else if (widget.isFbApi && widget.apiCallback && this[widget.apiCallback]) {
			code = this[widget.apiCallback](widget);
		}
		return code;
	}
	// END: Framework independent methods

	// START: Main
	this.isActive = false;
	this.targetedCode = []; // {code:"HTML",targets:[elements],ok:true/false}
	this.init(config);
	// END: Main
}

NetworkNews.Constants = NetworkNews.Constants || {
	userPreferences:{
		on:(typeof getCookie=='function'&&(getCookie('nn_pref')==null||getCookie('nn_pref')=='true'))?true:false
	},
	hasAd:false, // modified by ad script
	Domains : {
		live:'www.washingtonpost.com',
		test:'testweb8g.digitalink.com',
		dev:'localhost.digitalink.com'
	},
	re : {
		"article-path":new RegExp(/^\/wp-dyn\/content\/(article|blog|discussion)\/.*?\/(AR|BL|DI)/),
		"multimedia-path":new RegExp(/^\/wp-dyn\/content\/(audio|gallery|graphic|panorama|photo|video)\/.*?\/(AU|GA|GR|PA|VI)/),
		"blog-domain":new RegExp(/^(blogs|views|voices).washingtonpost.com$/),
		"live-domain":new RegExp(/^[^\.]+.washingtonpost.com$/),
		"hp-domain":new RegExp(/^\/$/),
		"hp-path":new RegExp(/^(\/wp-srv\/(national|local|national-local)\.html|\/)$/),
		"profile-path":new RegExp(/^\/wp-srv\/network-news\/(index\.html)?$/)
	},
	FB_APIKey : {
		live:'f26d9bd97784160a1b327c99585ddd35',
		test:'83e367a96022b5b71ffeb42dcfadf525',
		dev:'83e367a96022b5b71ffeb42dcfadf525'
	},
	Selectors:{
		ids:{
			fbCrossDomainReciever:"fb-root"
		},
		classes:{
			tabs:'NN-tabs',
			adUnit:'NN-ad-unit'
		},
		tags:{
			fbCrossDomainReciever:"body"
		}
	}
}
NetworkNews.Constants.API_KEY = (new String(location.hostname).indexOf(NetworkNews.Constants.Domains.live)==0)?NetworkNews.Constants.FB_APIKey.live:NetworkNews.Constants.FB_APIKey.test;
NetworkNews.Constants.Domain = (!!(new String(location.hostname).match(NetworkNews.Constants.re["live-domain"])))?NetworkNews.Constants.Domains.live:NetworkNews.Constants.Domains.test;

NetworkNews.defaults = NetworkNews.defaults || {
	methods:{
		// if "this" is used, this strategy might not work. Be careful.
		init:function(config){
			document.write('<style>.NN-ww {display:none;} #top-box-out-nn{height:29px;border-bottom:1px solid #B1C3D4;} #NN-page #NN-opted-out{display:block;}</style>');
		}
	}
}

NetworkNews.defaults.widgets = {
	"fan":{
		"hp":{
			initWidget:function(){
			},
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"fan",
				attrs:{
					width:309,
					height:800,
					profile_id:6250307292,
					stream:1,
					connections:0,
					logobar:0
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-fan-hp',
					"parent-module":'NN-module-hp'
				},
				classes:{
				}
			}
		},
		"right-rail":{
			initWidget:function(){
			},
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"fan",
				attrs:{
					width:326,
					// height:200,
					profile_id:6250307292,
					stream:1,
					connections:0,
					logobar:0
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-fan-rr',
					"parent-module":'NN-module-rr'
				},
				classes:{
				}
			}
		},
		"profile":{
			initWidget:function(){
			},
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"fan",
				attrs:{
					width:624,
					height:800,
					profile_id:6250307292,
					stream:1,
					connections:0,
					logobar:0
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-fan-profile',
					"parent-module":'NN-module-profile'
				},
				classes:{
				}
			}
		}
	},
	"social-bar":{
		"default":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"social-bar",
				attrs:{
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:false,
			needsTargetTag:true,
			dig:{
			},
			selectors:{
				tags:{
					"target":"body"
				},
				ids:{
				},
				classes:{
				}
			}
		}
	},
	"share":{
		"share-icon":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"share-button",
				attrs:{
					// href: set in init code
					type:'icon'
				}
			},
			needsHref:true,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-share-icon'
				},
				classes:{
				}
			}
		},
		"share-box-count":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"share-button",
				attrs:{
					// href: set in init code
					type:'box_count'
				}
			},
			needsHref:true,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-share-box-count'
				},
				classes:{
				}
			}
		}
	},
	"like":{
		"article-box":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"like",
				attrs:{
					// href: set in init code
					width:208, // fb min 225 for standard layout
					height:21, // fb min 35 w/o faces, 80 w/ faces for standard layout
					layout:'button_count',
					action:'recommend',
					show_faces:false,
					max_faces:3
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:true,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-like-article-box',
					"parent-module":'NN-module-sidebar'
				},
				classes:{
				}
			}
		},
		"article-bar":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"like",
				attrs:{
					// href: set in init code
					width:604, // fb min is 250
					height:80, // fb min is 35 w/o faces, 80 w/ faces
					layout:'standard',
					action:'recommend',
					show_faces:true,
					max_faces:12
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:true,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-like-article-bar',
					"parent-module":'NN-module-footer'
				},
				classes:{
				}
			},
			makeWayForTheAd:function(){
				if (typeof Prototype != 'undefined') {
					var bar = $(this.selectors.ids['target']);
					if(bar){bar.setStyle({"width":"389px"})}
				} else if (typeof jQuery != 'undefined') {
					var bar = jQuery('#'+this.selectors.ids['target']);
					if(bar){bar.css({'width':'389px'})}
				}
				if(this.isFbIframe){this.fb.attrs['width']=389;this.fb.attrs['max_faces']=8;}
			}
		},
		"blog-bar":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"like",
				attrs:{
					// href: set in init code
					width:454, // fb min is 225
					height:25, // fb min is 35 w/o faces, 80 w/ faces
					layout:'standard',
					action:'recommend',
					show_faces:false,
					max_faces:0
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:false,
			needsOtherContentId:true,
			needsUid:false,
			needsTargetId:false,
			needsTargetTag:false,
			isMultiWidgeted:true,
			dig:{
				attr:{
					id:"id",
					href:"id"
				}
			},
			selectors:{
				tags:{
				},
				ids:{
				},
				classes:{
					"target":'NN-widget-like-blog-bar'
				}
			}
		}
	}, // end like
	"profile-pic":{
		"default":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"profile-pic",
				attrs:{
					// uid: set in init code
					width:20,
					height:20,
					linked:false
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:true,
			needsTargetId:false,
			needsTargetTag:false,
			isMultiWidgeted:true,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
				},
				classes:{
					"target":'NN-fb-logo'
				}
			}
		}
	}, // end profile-pic
	"recommendations":{
		"hp":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"recommendations",
				attrs:{
					// href: set in init code
					width:309,
					height:800,
					header:false,
					site:"washingtonpost.com"
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-recommendations-hp',
					"parent-module":'NN-module-hp'
				},
				classes:{
				}
			}
		},
		/* START: DEPRECATED: Using activity/recommendations combo */
		"right-rail":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"recommendations",
				attrs:{
					// href: set in init code
					width:326,
					height:200,
					header:false,
					site:"washingtonpost.com"
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-recommendations-rr',
					"parent-module":'NN-module-rr'
				},
				classes:{
				}
			}
		},
		/* END DEPRECATED: Using activity/recommendations combo */
		"profile":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"recommendations",
				attrs:{
					// href: set in init code
					width:624,
					height:800,
					header:false,
					site:"washingtonpost.com"
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-recommendations-profile',
					"parent-module":'NN-module-profile'
				},
				classes:{
				}
			}
		}
	}, // end: recommendations
	"activity":{
		"hp":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"activity",
				attrs:{
					// href: set in init code
					width:309,
					height:800,
					header:false,
					site:"washingtonpost.com"
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-activity-hp',
					"parent-module":'NN-module-hp'
				},
				classes:{
				}
			}
		},
		"right-rail":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"activity",
				attrs:{
					// href: set in init code
					recommendations:"true",
					width:326,
					height:400,
					header:false,
					site:"washingtonpost.com"
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-activity-rr',
					"parent-module":'NN-module-rr'
				},
				classes:{
				}
			}
		},
		"profile":{
			isFbIframe:true,
			isFbApi:false,
			fb:{
				tag:"activity",
				attrs:{
					// href: set in init code
					width:624,
					height:800,
					header:false,
					site:"washingtonpost.com"
					// font: use defaults
					// background_color: "white"
				}
			},
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-activity-profile',
					"parent-module":'NN-module-profile'
				},
				classes:{
				}
			}
		}
	}, // end: activity
	"myactivity":{
		"hp":{
			isFbIframe:false,
			isFbApi:true,
			apiCallback:"renderMyActivity",
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-myactivity-hp',
					"parent-module":'NN-module-hp'
				},
				classes:{
				}
			}
		},
		"right-rail":{
			isFbIframe:false,
			isFbApi:true,
			apiCallback:"renderMyActivity",
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-myactivity-rr',
					"parent-module":'NN-module-rr'
				},
				classes:{
				}
			}
		},
		"profile":{
			isFbIframe:false,
			isFbApi:true,
			apiCallback:"renderMyActivity",
			needsHref:false,
			needsOtherContentId:false,
			needsFbUid:false,
			needsTargetId:true,
			needsTargetTag:false,
			isMultiWidgeted:false,
			dig:{
			},
			selectors:{
				tags:{
				},
				ids:{
					"target":'NN-widget-myactivity-profile',
					"parent-module":'NN-module-profile'
				},
				classes:{
				}
			}
		}
	} // end: myactivity
} // end: widgets
NetworkNews.defaults.modules = {
	"article-box":{
		widgets:[
			NetworkNews.defaults.widgets["like"]["article-box"]
		]
	},
	"article-bar":{
		widgets:[
			NetworkNews.defaults.widgets["like"]["article-bar"]
		]
	},
	"right-rail":{
		widgets:[
			// NetworkNews.defaults.widgets["recommendations"]["right-rail"],
			NetworkNews.defaults.widgets["activity"]["right-rail"] // activity recommendations combo
			// NetworkNews.defaults.widgets["fan"]["right-rail"]
			// NetworkNews.defaults.widgets["myactivity"]["right-rail"]
		]
	},
	"blog-bar":{
		widgets:[
			NetworkNews.defaults.widgets["like"]["blog-bar"]
		]
	},
	"profile-pic":{
		widgets:[
			NetworkNews.defaults.widgets["profile-pic"]["default"]
		]
	},
	"profile":{
		widgets:[
			NetworkNews.defaults.widgets["recommendations"]["profile"],
			NetworkNews.defaults.widgets["activity"]["profile"]
			// NetworkNews.defaults.widgets["fan"]["profile"]
			// NetworkNews.defaults.widgets["myactivity"]["profile"]
		]
	},
	"hp":{
		widgets:[
			NetworkNews.defaults.widgets["recommendations"]["hp"],
			NetworkNews.defaults.widgets["activity"]["hp"]
			// NetworkNews.defaults.widgets["fan"]["hp"]
			// NetworkNews.defaults.widgets["myactivity"]["hp"]
		]
	},
	"share-icon":{
		widgets:[
			NetworkNews.defaults.widgets["share"]["share-icon"]
		]
	},
	"social-bar":{
		widgets:[
			NetworkNews.defaults.widgets["social-bar"]["default"]
		]
	}
}
NetworkNews.defaults.config = {
	"default":{
		modules:[
			NetworkNews.defaults.modules["profile-pic"],
			NetworkNews.defaults.modules["article-box"],
			NetworkNews.defaults.modules["article-bar"],
			NetworkNews.defaults.modules["right-rail"],
			NetworkNews.defaults.modules["blog-bar"],
			NetworkNews.defaults.modules["profile"],
			NetworkNews.defaults.modules["hp"],
			NetworkNews.defaults.modules["share-icon"]
			// NetworkNews.defaults.modules["social-bar"]
		]
	},
	"article":{
		modules:[
			NetworkNews.defaults.modules["profile-pic"],
			NetworkNews.defaults.modules["article-box"],
			NetworkNews.defaults.modules["article-bar"],
			NetworkNews.defaults.modules["right-rail"],
			NetworkNews.defaults.modules["share-icon"]
		]
	},
	"multimedia":{
		modules:[
			NetworkNews.defaults.modules["profile-pic"],
			NetworkNews.defaults.modules["article-box"],
			NetworkNews.defaults.modules["share-icon"]
			// NetworkNews.defaults.modules["social-bar"]
		]
	},
	"blog":{
		modules:[
			NetworkNews.defaults.modules["profile-pic"],
			NetworkNews.defaults.modules["blog-bar"],
			NetworkNews.defaults.modules["right-rail"]
		]
	},
	"profile":{
		modules:[
			NetworkNews.defaults.modules["profile-pic"],
			NetworkNews.defaults.modules["profile"]
			// NetworkNews.defaults.modules["social-bar"]
		]
	},
	"hp":{
		modules:[
			NetworkNews.defaults.modules["profile-pic"],
			NetworkNews.defaults.modules["hp"]
			// NetworkNews.defaults.modules["social-bar"]
		]
	}
}
// set up NetworkNews.prototype: prototype.js and jQuery compatible
if	(
		(typeof FB == 'undefined')
		|| (typeof NETWORK_NEWS_ON != 'undefined' && !NETWORK_NEWS_ON)
		|| !NetworkNews.Constants.userPreferences['on']
		|| (typeof Prototype != 'undefined' && Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) <= 6)
		|| (typeof jQuery != 'undefined' && jQuery.browser.msie && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) <= 6)
	) {
	NetworkNews.prototype = NetworkNews.defaults.methods;
} else if (typeof Prototype != 'undefined'){
	NetworkNews.prototype = {
		init:function(config){
			// get appropriate config if one wasn't provided
			this.config = config||this.findAppropriateConfig();
			this.orbitId = (typeof wp_article != 'undefined' && wp_article.id ) ? wp_article.id : null;
			this.isActive = true;

			var self = this;
			Event.observe(window,'load',function(){
				self.initFacebook();
				// START: Cross-module features
				self.makeHackAdjustments();
				self.initAdUnits();
				self.initWidgetTabs();
				// END: Cross-module features
				self.initAllModules();

				self.finish();
			});
		},
		makeHackAdjustments:function(){
			// Ninja videos have a doc-type that the rest of Orbit-generated pages don't, leading to this ugly necessity
			if ( this.orbitId && (this.orbitId).match(/^(VI)/) ) {
				$$('#NN-module-sidebar .NN-gray-btn.NN-profile span').each(function(e){e.innerHTML='Profile'})
			}
		},
		getTargets:function(props){
			var targets = new Array();
			props=props||{};
			if (props['id']){
				var t = $(props['id']);
				if(t)targets[0]=t;
			} else if (props['class']){
				targets=$$(props['class']);
			} else if (props['tag']) {
				targets=$$(props['tag']);
			}
			return targets;
		},
		placeWidget:function(code,targets){
			targets.each(function(target){
				target.insert({bottom:code});
			});
		},
		/* Prepares <div id="fb-root"></div> to be inserted before </body> */
		/* Should be first item in this.targetedCode */
		generateFbCrossDomainReciever:function(){
			var targetedCode = {code:'',targets:[],ok:false};
			if (! $(NetworkNews.Constants.Selectors.ids['fbCrossDomainReciever']) ){
				targetedCode.code = '<div id="fb-root"></div>'
				targetedCode.targets = targetedCode.targets.concat( this.getTargets({tag:NetworkNews.Constants.Selectors.tags['fbCrossDomainReciever']}) );

				if ( !!targetedCode.code && !!targetedCode.targets.length ) {
					targetedCode.ok = true;
					this.targetedCode = this.targetedCode.concat( targetedCode );
				}
			}
		},
		initAdUnits:function(){
			if ( typeof NetworkNews.Constants.hasAd != 'undefined' && NetworkNews.Constants.hasAd ) {
				// unhide the ad
				$$('.'+NetworkNews.Constants.Selectors.classes['adUnit']).each(function(unit){
					unit.removeClassName('NN-hide');
				});
				this.config.modules.each(function(module){
					module.widgets.each(function(widget){
						if(widget.makeWayForTheAd){widget.makeWayForTheAd()}
					});
				});
			}
		},
		initMultiWidgets:function(widget){
			var self = this;
			$$('.'+widget.selectors.classes['target']).each(function(item){
				var targetedCode = {code:'',targets:[],ok:false};

				// example: see blog-bar
				if ( widget.needsOtherContentId ) {
					var targetId = item.readAttribute(widget.dig.attr['id']);
					if ( targetId ) {
						if(widget.isFbIframe){widget.fb.attrs['href']=item.readAttribute(widget.dig.attr['href'])}
						targetedCode.code = self.prepareWidget(widget);
						targetedCode.targets = self.getTargets({id:targetId});
					}
				// example: see profile-pic
				} else if (widget.needsFbUid) {
					try {
						var uid = FB.getSession().uid;
						if(uid && widget.isFbIframe){
							widget.fb.attrs['uid']=uid;
						}
						targetedCode.code = self.prepareWidget(widget);
						targetedCode.targets = targetedCode.targets.concat(item);
					} catch(e) {
					}
				}

				if ( !!targetedCode.code && !!targetedCode.targets.length ) {
					targetedCode.ok = true;
					self.targetedCode = self.targetedCode.concat( targetedCode );
				}
			});
		},
		initWidgetTabs:function(){
			var self = this;
			$$('.'+NetworkNews.Constants.Selectors.classes['tabs']).each(function(root){
				var tabs = root.select('li');
				if (!! tabs.size() ) {
					var activeTab = (root.select('.active').size()) ? root.select('.active')[0] : tabs[0] ;
					tabs.each(function(tab){
						tab.observe('click',function(event){
							tab.fire("nn-tabs:click");
							// stop regular click event
							Event.stop(event);
						});
						tab.observe("nn-tabs:click",function(event){
							self.activateWidgetTabs(event,tabs);
						});
					});
					// activate active tab
					activeTab.fire("nn-tabs:click");
				}
			});
		},
		getWidgetTabId:function(str){
			str = str.toString();
			if( str ){
				str = str.replace(/.*\#/,'')
			}
			return str;
		},
		activateWidgetTabs:function(event,tabs){
			var self = this;
			var clickedTab = Event.findElement(event,'li');
			tabs.each(function(tab){
				$(self.getWidgetTabId(tab.select('a[href]'))).removeClassName('active').hide();
				tab.removeClassName('active');
			});
			clickedTab.addClassName('active');
			$(self.getWidgetTabId(clickedTab.select('a[href]'))).show().addClassName('active');
		},
		fbParseDone:function(){
/*
			$$('iframe').each(function(iframe){
				var src = iframe.readAttribute('src');
				if(src.match(/^http:..www.facebook.com/)){
				iframe.observe('load',function(event){
					iframe.fire("fb-iframe:load");
				});
				iframe.observe("fb-iframe:load",function(event){
					// alert("fb-iframe:load");
					// iframe.src = iframe.src;
				});
				var style = iframe.readAttribute('style');
				iframe.setAttribute('scrolling','auto');
				iframe.setAttribute('frameborder','0');
				iframe.setStyle({'overflow':'scroll'});
				}
			});
*/
		}
	}
} else if (typeof jQuery != 'undefined') {
	NetworkNews.prototype = {
		init:function(config){
			// get appropriate config if one wasn't provided
			this.config = config||this.findAppropriateConfig();
			this.orbitId = (typeof wp_article != 'undefined' && wp_article.id ) ? wp_article.id : null;
			this.isActive = true;

			var self = this;
			jQuery(document).ready(function(){
				self.initFacebook();
				// START: Cross-module features
				self.makeHackAdjustments();
				self.initAdUnits();
				self.initWidgetTabs();
				// END: Cross-module features
				self.initAllModules();

				self.finish();
			});
		},
		makeHackAdjustments:function(){
			// Ninja videos have a doc-type that the rest of Orbit-generated pages don't, leading to this ugly necessity
			if ( this.orbitId && (this.orbitId).match(/^VI/) ) {
				jQuery('#NN-module-sidebar .NN-gray-btn.NN-profile span').each(function(i,e){e.innerHTML='Profile'})
			}
		},
		getTargets:function(props){
			var targets = new Array();
			props=props||{};
			if (props['id']){
				var t = jQuery(document.getElementById(props['id']));
				if(t)targets[0]=t;
			} else if (props['class']){
				targets=jQuery('.'+props['class']);
			} else if (props['tag']) {
				targets=jQuery(props['tag']);
			}
			return targets;
		},
		placeWidget:function(code,targets){
			jQuery(targets).each(function(i,target){
				jQuery(target).append(code);
			});
		},
		/* Prepares <div id="fb-root"></div> to be inserted before </body> */
		/* Should be first item in this.targetedCode */
		generateFbCrossDomainReciever:function(){
			var targetedCode = {code:'',targets:[],ok:false};
			if (! jQuery(NetworkNews.Constants.Selectors.ids['fbCrossDomainReciever']) ){
				targetedCode.code = '<div id="fb-root"></div>'
				targetedCode.targets = targetedCode.targets.concat( this.getTargets({tag:NetworkNews.Constants.Selectors.tags['fbCrossDomainReciever']}) );

				if ( !!targetedCode.code && !!targetedCode.targets.length ) {
					targetedCode.ok = true;
					this.targetedCode = this.targetedCode.concat( targetedCode );
				}
			}
		},
		initAdUnits:function(){
			if ( typeof NetworkNews.Constants.hasAd != 'undefined' && NetworkNews.Constants.hasAd ) {
				// unhide the ad
				jQuery('.'+NetworkNews.Constants.Selectors.classes['adUnit']).each(function(i,unit){
					jQuery(unit).removeClass('NN-hide');
				});
				jQuery(this.config.modules).each(function(i,module){
					jQuery(module.widgets).each(function(j,widget){
						if(widget.makeWayForTheAd){widget.makeWayForTheAd()}
					});
				});
			}
		},
		initMultiWidgets:function(widget){
			var self = this;
			jQuery('.'+widget.selectors.classes['target']).each(function(i,item){
				var targetedCode = {code:'',targets:[],ok:false};
				if ( widget.needsOtherContentId ) {
					var targetId = jQuery(item).attr(widget.dig.attr['id']);
					if ( targetId ) {
						if(widget.isFbIframe){widget.fb.attrs['href']=jQuery(item).attr(widget.dig.attr['href']);}

						targetedCode.code = self.prepareWidget(widget);
						targetedCode.targets = self.getTargets({id:targetId});
					}
				// example: see profile-pic
				} else if (widget.needsFbUid) {
					try {
						var uid = FB.getSession().uid;
						if(uid && widget.isFbIframe){
							widget.fb.attrs['uid']=uid;
						}
						targetedCode.code = self.prepareWidget(widget);
						targetedCode.targets = targetedCode.targets.concat(item);
					} catch(e) {
					}
				}

				if ( !!targetedCode.code && !!targetedCode.targets.length ) {
					targetedCode.ok = true;
					self.targetedCode = self.targetedCode.concat( targetedCode );
				}

			});
		},
		initWidgetTabs:function(){
			var self = this;
			jQuery('.'+NetworkNews.Constants.Selectors.classes['tabs']).each(function(s,root){
				root = jQuery(root);
				var tabs = root.find('li');
				if (!! tabs.size() ) {
					var candidateActiveTabs = root.find('.active');
					var activeTab = (candidateActiveTabs.size()) ? candidateActiveTabs[0] : tabs[0];
					tabs.click(function(event){
						self.activateWidgetTabs(event,this,tabs);
					});
					jQuery(activeTab).click();
				}
			});
		},
		getWidgetTabId:function(str){
			if(str){
				str = str.replace(/.*\#/,'')
			}
			return '#'+str;
		},
		activateWidgetTabs:function(event,clickedTab,tabs){
			var self = this;
			event.preventDefault();
			tabs.each(function(s,tab){
				jQuery(self.getWidgetTabId(jQuery(tab).find('a').attr('href'))).removeClass('active').hide();
				jQuery(tab).removeClass('active');
			});
			jQuery(clickedTab).addClass('active');
			jQuery(self.getWidgetTabId(jQuery(clickedTab).find('a').attr('href'))).show().addClass('active');
		},
		fbParseDone:function(){
/*
			jQuery('iframe').each(function(i,iframe){
				var src = jQuery(iframe).attr('src');
				if(src.match(/^http:..www.facebook.com/)){
					var style = jQuery(iframe).attr('style');
					jQuery(iframe).attr('scrolling','auto');
					jQuery(iframe).attr('frameborder','0');
					jQuery(iframe).css({'overflow':'scroll'});
				}
			});
*/
		}
	}
} else {
	NetworNews.prototype=NetworkNews.defaults.methods;
}
