(function() {
	
	if(typeof DWREngine !== 'undefined') {
		DWREngine.setErrorHandler(function() {
			DWREngine.setErrorHandler(function() {
				setTimeout(function() {
					window.location.reload();
				}, 1000);
			});
		});		
	}
	
	PAGESETUP.subscribe('pageLoaded', function(args) {
		if(document.getElementById('tutorial-list')) {
			$("#news").css('display','block');
			if(typeof $("#news").newsTicker != 'undefined') {
				$("#news").newsTicker();
			}
		}
		
		if(document.getElementById('facebook-app-link')) {
			var p, showPanel = false;
			
			var fbSetupContainer = function() {				
				p = new YAHOO.gni.panels.YDPanel('gni-fbsetup', {
						fixedcenter: true,
						modal: true
				});

				p.setHeader("How to install the Facebook Application");
				
				var bodyText = "<ol>" +
					"<li class='step-one'>If you are signed in to Facebook, please sign out.</li>" +
					"<li class='step-two'>Visit the <a href='http://apps.facebook.com/youdiligence' target='_blank'>" +
					"Facebook Application site</a>. This link will open in a new window so you " +
					"can come back to this page.</li>" +
					"<li class='step-three'>When prompted to log in, get your child to give their user name and" +
					" password and to accept the install process.</li>" +
					"</ol>";
					
				p.setBody(bodyText);
				
				p.render((function() {
					var container = document.createElement('div');
					container.style.position = 'absolute';

					document.body.appendChild(container);

					return container;
				})());
				
				if(showPanel) { p.show(); }
			}
			
			YAHOO.util.Event.addListener('facebook-app-link', 'click', function(ev) {
				YAHOO.util.Event.preventDefault(ev);
				
				if(p) {
					p.show();					
				} else {
					showPanel = true;
				}
			});
			
			this.requireModule('yd-panel');
			this.subscribe('allModulesLoaded', fbSetupContainer);			
		}
	});
	
	PAGESETUP.subscribe('reportsPage', function() {
//		removed dragdrop, it's extraordinarily expensive to operate
		this.requireModule('dragdrop');
		this.requireModule('connection');
		this.requireModule('calendar');
//		this.requireModule('yd-monitoredactors');
		this.requireModule('yd-network-manager');

		this.requireModule('yd-offendingterms');
		this.requireModule('yd-addressbook');
		this.requireModule('reports-page-functions');
		
		var windowLoaded = false;
		var maxLoadTime = 30000; // 30 seconds
		jQuery(window).load(function() { windowLoaded = true; });
				
		this.subscribe('allModulesLoaded', function() {
			var generateContainer = function() {
				var container = document.createElement('div');
				container.style.position = 'absolute';
				
				document.body.appendChild(container);
				
				return container;
			};
			
			var changePlanUri = documentRoot + 'yd/EditPlan.htm';
			var Y = YAHOO.namespace('yd');
			var P = YAHOO.gni.panels;
			var AM = JYDActorManager;
			var WM = JYDWordManager;
			
//			var c = document.getElementById('content');
			var y = 200;
			var x = YAHOO.util.Dom.getRegion("content").left;
			
			Y.actorsCount = 0;
			Y.maxActors = 0;
			
			var c1 = { xy: [ x, y ], zindex: 99 };
			//c1.parentFacebook = (typeof FACEBOOK !== 'undefined') ? FACEBOOK : false;
			//c1.parentMyspace = (typeof MYSPACE !== 'undefined') ? MYSPACE : false;
			
			var c2 = { xy: [0, 0], fixedcenter: true, zindex: 99 };
			var c3 = { xy: [0, 0], fixedcenter: true, zindex: 99 };
			
			var maxActorsMessage = "Your plan has reached its maximum " +
				"number of monitored children. You must either upgrade " +
				" your plan or remove children before adding new ones. " +
				" You can change your plan by selecting 'Change Plan' " +
				" below.";
			var maxActorsTitle = "Monitored Children Limit Reached";
			
			Y.actorsPanel			= new P.NetworkManager('gni-map',AM,c1);
			Y.addressBookPanel		= new P.AddressBookPanel('gni-abp', c2);
			Y.offendingTermsPanel	= new P.OffendingTermsPanel('gni-otp',WM,c3);
			Y.changePlanPanel		= new P.YDPanel('gni-cpp', { xy: [200,300], zindex: 99 });
			Y.planMaxedOutPanel		= new YAHOO.widget.SimpleDialog('gni-mop', {
				xy: [200,300],
				zindex: 99,
				visible: false,
				fixedcenter: true,
				icon: YAHOO.widget.SimpleDialog.ICON_INFO,
				width: "500px",
				buttons: [{
					text: "Change Plan",
					handler:function() { 
						this.hide();
						Y.changePlanPanel.show();
//						window.location = documentRoot + 'yd/MyAccount.htm';
					},
					isDefault: true
				},{
					text: "Cancel",
					handler: function() {
						this.hide();
					}
				}]
			});
			Y.planMaxedOutPanel.setHeader(maxActorsTitle);
			Y.planMaxedOutPanel.setBody(maxActorsMessage);

			Y.actorsPanel.DWR.submitEvent.subscribe(refreshActorList);
			Y.offendingTermsPanel.wordManager.newWordEvent.subscribe(
				refreshWordList);

			Y.actorsPanel.render(generateContainer());
			Y.addressBookPanel.render(generateContainer());
			Y.offendingTermsPanel.render(generateContainer());
			Y.planMaxedOutPanel.render(generateContainer());
			
			Y.changePlanPanel.setHeader("Change Plan");			
			YAHOO.util.Connect.asyncRequest('GET', changePlanUri, {
				success: function(o) {
					Y.changePlanPanel.setBody("");
					Y.changePlanPanel.render(generateContainer());

					Y.changePlanPanel.body.innerHTML = o.responseText;

					var codeBox = document.getElementById("edit-plan-code");
					var useInnerText = (typeof codeBox.innerText !== 'undefined');
					var code = (useInnerText) ? codeBox.innerText : codeBox.textContent;

					eval(code); // note eval					
				},
				failure: function(o) {
				},
				timeout: 5000,
				scope: this
			});
			
			
			if(Y.showPanelOnLoad) {
				var mode = (YAHOO.yd.showParentInfo) ? 'use-parent' : 'use-child';
				
				Y.actorsPanel.DWR.newActor();
				Y.actorsPanel.show();
				Y.actorsPanel.networkAdder.cfg.setProperty('mode', mode);
			}			

		    refreshActorList();
			refreshMaxActorCount();		
		    refreshCategoryList();
			calendarInit();			
		}, this, true);
	});
	
	
	PAGESETUP.subscribe('myAccountPage', function() {
		this.requireModule('yd-panel');
		this.requireModule('connection');

		var Event = YAHOO.util.Event;
		var Dom = YAHOO.util.Dom;
		var button = Dom.getElementsByClassName('account-edit-plan')[0];
		var changePlanUri = button.href;
		var panel = null;

		Event.addListener(button, 'click', function(eventObject) {
			Event.preventDefault(eventObject);

			panel.show();
		});

		this.subscribe('allModulesLoaded', function() {
			panel = new YAHOO.gni.panels.YDPanel('change-plan-panel', {
				visible: false,
				xy: [ 300, 300 ]
			});

			YAHOO.util.Connect.asyncRequest('GET', changePlanUri, {
				success: function(o) {
					panel.setBody("");
					panel.render(document.body);

					panel.body.innerHTML = o.responseText;

					var codeBox = document.getElementById("edit-plan-code");
					var useInnerText = (typeof codeBox.innerText !== 'undefined');
					var code = (useInnerText) ? codeBox.innerText : codeBox.textContent;

					eval(code); // note eval
				},
				failure: function(o) {
					panel.setBody(o.responseText);
					panel.render(document.body);

				},
				timeout: 5000,
				scope: this
			});
			
			panel.setHeader('Change your plan');
			initCancelDialogue();

		}, this, true);
	});
	
	PAGESETUP.subscribe('socialFeedPage', function() {
		var itemsPerPage = 5;
				
		var feeds = {
			socialNetworkNews: {
				feedName: 'social-network-news',
				current: 0,
				max: (Math.ceil(jQuery('.social-network-news .feed-list-item').size() / itemsPerPage) - 1)
			},
			youDiligenceInThePress: {
				feedName: 'youdiligence-in-the-press',
				current: 0,
				max: (Math.ceil(jQuery('.youdiligence-in-the-press .feed-list-item').size() / itemsPerPage) -1)
			}
		};
		
		var showPage = function(feed) {
			var feedItems = '.'+feed.feedName+' .feed-list-item';

			var lowerBound = (itemsPerPage * feed.current) - 1;
			var upperBound = itemsPerPage * (feed.current+1) - 1;
	
			if(lowerBound > 0) {
				jQuery(feedItems).css('display','none');
				jQuery(feedItems+':gt('+lowerBound+')').css('display','block');				
			} else {
				jQuery(feedItems).css('display','block');				
			}
			jQuery(feedItems+':gt('+upperBound+')').css('display','none');
			
			jQuery('.'+feed.feedName+' .previous-page').toggleClass('disabled',(feed.current === 0));
			jQuery('.'+feed.feedName+' .next-page').toggleClass('disabled',(feed.current >= feed.max));
		};
		
		jQuery('.external-news-feeds .feed .paginator').css('display','block');

		jQuery('.external-news-feeds .paginator .previous-page').click(function() {
			if(jQuery(this).hasClass('disabled')) { return true; }
			
			var feed = this.parentNode.parentNode;
			
			if(jQuery(feed).hasClass('youdiligence-in-the-press')) {
				feed = feeds.youDiligenceInThePress;
			} else {
				feed = feeds.socialNetworkNews;				
			}
			
			feed.current --;
			showPage(feed);
//			jQuery(this).toggleClass('disabled',(feed.current == 0));		
//			jQuery('.next-page',this.parentNode).toggleClass('disabled',!(feed.current < feed.max));
		});
		jQuery('.external-news-feeds .paginator .next-page').click(function() {
			if(jQuery(this).hasClass('disabled')) { return true; }
			
			var feed = this.parentNode.parentNode;
			
			if(jQuery(feed).hasClass('youdiligence-in-the-press')) {
				feed = feeds.youDiligenceInThePress;
			} else {
				feed = feeds.socialNetworkNews;				
			}
			
			feed.current ++;
			showPage(feed);
		});
		

		showPage(feeds.youDiligenceInThePress, feeds.youDiligenceInThePress.current);
		showPage(feeds.socialNetworkNews, feeds.socialNetworkNews.current);
	});
	
	PAGESETUP.subscribe('viewReportPage', function() {
		
		jQuery(".step-one .login .remind-me").click(function() {
			 var l = "" +  window.location;
             if(l.indexOf("http:") != -1){
                     l = l.replace("http:","https:");
             }
			
             jQuery.getJSON(window.location + "&getCredentials=true&callback=?", function(data) {
                 jQuery(".step-one .login .username .field").text(data.username);
                 jQuery(".step-one .login .password .field").text(data.password);
                 
                 jQuery(".step-one .login").toggleClass('hidden');
             });
		});
	});

})();