YUI().use('node', 'event-custom', function(Y) {
	var nmModules = $H();
	var sections = $H();

	Y.Global.on('loadcontent:callback', function(page) {
		ajaxpageCallback(page);
	});

	webkit.modinit('contact');

	if ($(document.body).hasClassName("nm_currentPage_home")) {
		webkit.setupButton('learnmorebutton', homeLMButton);
		webkit.initNewsCrawl('newscrawlwrapper');
	}
	else if ($(document.body).hasClassName("nm_currentPage_learnmore")) {
		learnMoreObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_support")) {
		supportObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_websites")) {
		websitesObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_blog")) {
		blogObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_services")) {
		servicesObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_servicecontract")) {
		serviceContractObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_servermonitoringcontract")) {
		serverMonitoringContractObservers();
	}

	mailinglistInit();

	webkit.contactNavButton();	

	currentsection = 0;
	
	
	function ajaxpageCallback(page) {
		page = page.details[0];
		if (page.match(/^lm-/)) {
			var lmsection = page.replace(/^lm-/,'');
			slideActiveSection('learnmore' + lmsection);		
		}
		else if (page.match(/^tab-/)) {
			var tab = page.replace(/^tab-/,'');
			switch (tab) {
				case 'servicestab':
				webkit.makeTabActive('servicestab', 'upgradetable', 'servicetable');
				break;

				case 'upgradestab':
				webkit.makeTabActive('upgradestab', 'servicetable', 'upgradetable');
				break;
			}		
		}
	}

	function homeLMButton() {
		window.location.href = '/learnmore';
	}

	function learnMoreObservers() {
		if ($('sectionwrapper')) {
			// position section buttons
			var leftSpace;
			var x=0;
			var delayTime;
			var thisLeftSpace;
			//$('activesection').addClassName('displaynone');
			$$('#sectionwrapper .sections').each(function(o, i) {
				leftSpace = x * 50;
				delayTime = i * .3;				
				$('' + o.id + '_button').setStyle({display:'none',position:'absolute',left:leftSpace + 'px'});
				setTimeout( function() {
					new Effect.Grow('' + o.id + '_button', { duration: 0.5, afterFinish:function() {
						if (i == 5) {
							// last button has been rendered, render active state div
							var thisPath = window.location.pathname;
							switch (thisPath) {
								case '/learnmore/theprocess':
								$('activesection').setStyle({left:'-4px'});
								new Effect.Appear('activesection', { duration:0.75 });
								break;

								case '/learnmore/getstarted':
								$('activesection').setStyle({left:'48px'});
								new Effect.Appear('activesection', { duration:0.75 });
								break;

								case '/learnmore/webkit':
								$('activesection').setStyle({left:'98px'});
								new Effect.Appear('activesection', { duration:0.75 });
								break;

								case '/learnmore/customizations':
								$('activesection').setStyle({left:'148px'});
								new Effect.Appear('activesection', { duration:0.75 });
								break;

								case '/learnmore/upgrades':
								$('activesection').setStyle({left:'198px'});
								new Effect.Appear('activesection', { duration:0.75 });
								break;

								case '/learnmore/pricing':
								$('activesection').setStyle({left:'248px'});
								new Effect.Appear('activesection', { duration:0.75 });
								break;

								case '/learnmore/aboutnm':
								$('activesection').setStyle({left:'296px'});
								new Effect.Appear('activesection', { duration:0.75 });
								break;
							}
						}
					}});	
				},Math.round(delayTime * 1000));
				x++;
				/*	
				o.absolutize();
				thisLeftSpace = $(o.id + '_button').getStyle('left').replace(/px/,'') - 2;
				sections.set(o.id,thisLeftSpace);
				*/
				$('' + o.id + '_button').observe('mouseover', function(e) {	
					if ($('activesection').getStyle('left') == sections.get(o.id) + 'px') {
						// mouseover active section, return
						return;
					}
					webkit.buttonMouseEffect('' + o.id + '_button','over');
					$('learnmore_none').addClassName('displaynone');
					$$('#sectionwrapper .learnmoresummary').each(function(h) {
						// hide all other summaries except for active one
						if (h.id == o.id + '_summary') {
							$(h.id).removeClassName('displaynone');
						}
						else if (h.id !== 'learnmore_none') {
							$(h.id).addClassName('displaynone');
						}	
					});
				});
				$('' + o.id + '_button').observe('mouseout', function(e) {
					if ($('activesection').getStyle('left') == sections.get(o.id) + 'px') {
						// mouseout active section, return						
						return;
					}
					webkit.buttonMouseEffect('' + o.id + '_button','out');					
					$('learnmore_none').removeClassName('displaynone');
					$(o.id + '_summary').addClassName('displaynone');
				});
				$('' + o.id + '_button').observe('click', function(e) {
					e.stop();
					webkit.buttonMouseEffect(o.id + '_button','out');												
					$('learnmorecontent').addClassName('wait');
					slideActiveSection(o.id);						
				});
			});
		}	

		if ($('webkitwrapper')) {
			webkitObservers();
		}	

		// invoke observers for nav links
		learnMoreNav();
	}

	function learnMoreNav() {
		webkit.modinit('contact');
		$$('#learnmorefooter .lmnext').each(function(o) {
			o.stopObserving('click');
			o.observe('click', function(e) {
				e.stop();
				new Effect.ScrollTo('sectionwrapper', { duration:0.2, afterFinish:function() {
					var nextsection = parseInt(o.id.replace(/^lmnext_/,'')) + 1;
					slideActiveSection('learnmore' + nextsection);			
				}});
			});
		});

		if ($('pricinglink')) {
			$('pricinglink').observe('click', function(e) {
				e.stop();
				new Effect.ScrollTo('sectionwrapper', { duration:0.2, afterFinish:function() {				
					slideActiveSection('learnmore6');				
				}});
			});
		}
	}

	 function slideActiveSection(activesection) {
		if (activesection.match(/^module_/)) {
			activesection = activesection.replace(/^module_/,'');
			slideActiveSectionMove(0,nmModules.get(activesection),'activemodule');
		}
		else if (activesection.match(/^learnmore/)) {
			currentsection = activesection.replace(/^learnmore/,'');
			var xVal;
			switch (activesection) {
				case 'learnmore1':
				var thisURL = '/learnmore/theprocess';
				break;

				case 'learnmore2':
				var thisURL = '/learnmore/getstarted';
				break;

				case 'learnmore3':
				var thisURL = '/learnmore/webkit';
				break;

				case 'learnmore4':
				var thisURL = '/learnmore/customizations';
				break;

				case 'learnmore5':
				var thisURL = '/learnmore/upgrades';
				break;

				case 'learnmore6':
				var thisURL = '/learnmore/pricing';
				break;

				case 'learnmore7':
				var thisURL = '/learnmore/aboutnm';
				break;
			}
			// determine section number
			$$('#sectionwrapper .sections').each(function(o, idx) {
				if (o.id == activesection) {
					xVal = (idx * 50) - 4;
				}
			});
			slideActiveSectionMove(xVal,-2,'activesection',thisURL);
		}
	}

	function slideActiveSectionMove(xVal, yVal, activediv, pageURL) {
		$('activesection').removeClassName('displaynone');
		new Effect.Move(activediv, { x:xVal, y:yVal, mode:'absolute', duration:0.5, transition:Effect.Transitions.sinoidal, afterFinish: function() {
			if (pageURL && activediv == "activesection") {
				webkit.recordHistory('lm-' + currentsection); 
				if (webkit.cacheget('learnmore', pageURL)) {
					webkit.cacheoutput('learnmore', pageURL, $('learnmorecontent'));
					learnMoreNav();					
					$('learnmorecontent').removeClassName('wait');					
				}
				else {
					new Ajax.Updater('learnmorecontent', pageURL + '/ajaxreload', {
						onComplete:function() {
							$('learnmorecontent').removeClassName('wait');
							webkit.cacheset('learnmore', pageURL, $('learnmorecontent'));
							learnMoreNav();
							if ($('webkitwrapper')) {
								webkitObservers();
							}
						}
					})					
				}				
			}
		}});	
	}

	function webkitObservers() {
		$$('#modulewrapper .nmModule').each(function(o) {
			o.absolutize();
			var thisMoveTo = parseInt(o.getStyle('top').replace(/px/,'')) - 2;
			nmModules.set(o.id,thisMoveTo);
			$('module_' + o.id).observe('mouseover', function() {
				if (!$('wkcontent_' + o.id).visible()) {
					webkit.buttonMouseEffect('module_' + o.id,'over');
				}
			});
			$('module_' + o.id).observe('mouseout', function() {
				webkit.buttonMouseEffect('module_' + o.id,'out');
			});
			$('module_' + o.id).observe('click', function(e) {		
				webkit.buttonMouseEffect('module_' + o.id,'out');
				showModule(o.id);
				e.stop();
			})
		})
	}

	function showModule(ID) {
		$$('#webkitcontent div').each(function(o) {
			if ($(o).visible()) {
				slideActiveSection('module_' + ID);
				new Effect.Fade(o.id, { duration: 0.5, afterFinish: function() {
					new Effect.Appear('wkcontent_' + ID, { duration:0.5 });
					}})
				}
			});
	}

	function searchSupport() {
		if (!$('search').getValue()) { return; }
		new Ajax.Updater('supportwrapper', '/searchsupport/' + $('search').getValue());
	}

	function searchBlog() {
		if (!$('search').getValue()) { return; }
		new Ajax.Updater('blogcontents', '/searchblog/' + $('search').getValue());
	}

	function supportObservers() {
		$('search').focus();

		webkit.setupButton('searchbutton', searchSupport);
		$('search').observe('keypress', function(e) {
			var key = e.which || e.keyCode;
			if (key == Event.KEY_RETURN) {
				e.stop();
				searchSupport();
			}
		});

		if ($('submit')) {
			submitComments();					
		}

		$$('#supportwrapper .supportcat').each(function(o) {
			o.observe('click', function(e) {
				e.stop();
				var category = o.id.replace(/^display_/,'');
				if ($('list_' + category).hasClassName('displaynone')) {
					$('list_' + category).setStyle({display:'none'});
					$('list_' + category).removeClassName('displaynone');
					new Effect.Appear('list_' + category, { duration:0.5, afterFinish:function() {
						$('display_' + category).removeClassName('revealcat');
						$('display_' + category).addClassName('concealcat');						
					}});
				}
				else {
					new Effect.Fade('list_' + category, { duration:0.5, afterFinish:function() {
						$('list_' + category).addClassName('displaynone');
						$('display_' + category).removeClassName('concealcat');
						$('display_' + category).addClassName('revealcat');
					}})
				}
			});
		});
	}

	function websitesObservers() {
		$$('.visitsite .buttonWrapper').each(function(o) {
			var siteID = o.id.replace(/^visit/,'');
			var thishref = $(siteID).select('a');			
			webkit.setupButton(o.id, websiteButtons, thishref[0]);
		})		
	}

	function websiteButtons(thishref) {
		window.location.href = thishref;
	}

	function blogObservers() {
		webkit.modinit('fbshare');

		if ($('search')) {
			$('search').focus();

			webkit.setupButton('searchbutton', searchBlog);
			$('search').observe('keypress', function(e) {
				var key = e.which || e.keyCode;
				if (key == Event.KEY_RETURN) {
					e.stop();
					searchBlog();
				}
			});	
		}

		if ($('submit')) {
			submitComments();					
		}

		webkit.setupButton('showboth', blogDisplayMode, 'showboth');
		webkit.setupButton('showgeek', blogDisplayMode, 'showgeek');
		webkit.setupButton('shownews', blogDisplayMode, 'shownews');	

		if (!webkit.jsondata.startcategory) {
			$('link-showboth').addClassName('active');			
		}
		else if (webkit.jsondata.startcategory == "geekery") {
			$('link-showgeek').addClassName('active');
		}
		else if (webkit.jsondata.startcategory == "news") {
			$('link-shownews').addClassName('active');
		}

		// more links
		$$('#blogcontents .morelink').each(function(o) {
			o.observe('click', function(e) {
				e.stop();
				var foldnum = o.id.replace(/^foldlink_/,'');
				$('fold_' + foldnum).removeClassName('displaynone');
				$('morewrapper_' + foldnum).addClassName('displaynone');
				new Effect.ScrollTo('fold_' + foldnum, { duration:0.5 });
			});
		});
	}

	function blogDisplayMode(displaymode) {
		switch (displaymode) {
			case 'showboth':
			$$('#blogcontents .blogpost').each(function(o) {
				o.removeClassName('displaynone');
			});
			$('link-showboth').addClassName('active');			
			$('link-showgeek').removeClassName('active');
			$('link-shownews').removeClassName('active');			
			break;

			case 'showgeek':
			$$('#blogcontents .geekpost').each(function(o) {
				o.removeClassName('displaynone');
			});
			$$('#blogcontents .newspost').each(function(o) {
				o.addClassName('displaynone');
			});
			$('link-showboth').removeClassName('active');			
			$('link-showgeek').addClassName('active');
			$('link-shownews').removeClassName('active');
			break;

			case 'shownews':
			$$('#blogcontents .geekpost').each(function(o) {
				o.addClassName('displaynone');
			});
			$$('#blogcontents .newspost').each(function(o) {
				o.removeClassName('displaynone');
			});
			$('link-showboth').removeClassName('active');			
			$('link-showgeek').removeClassName('active');
			$('link-shownews').addClassName('active');
			break;
		}
	}

	function submitComments() {
		$('submit').observe('mouseover', function() {		
			webkit.buttonMouseEffect('submit','over');		
		});
		$('submit').observe('mouseout', function() {
			webkit.buttonMouseEffect('submit','out');		
		});
		$('submit').observe('click', function() {
			$('commentform').submit();
		});
	}

	function servicesObservers() {		
		webkit.setupTab('servicestab');
		webkit.setupTab('upgradestab');
	}

	function mailinglistInit() {
		$('mailinglist').observe('click', function(e) {
			e.stop();
			Modalbox.show('/mailinglist', { title: 'Subscribe/Unsubscribe to our mailing list', afterLoad:function() {
				webkit.modinit('mailinglist');
			}});
		})
	}

	function serviceContractObservers() {
		webkit.setupButton('agree', this.serviceContractSign);
	}

	function serverMonitoringContractObservers() {
		webkit.setupButton('agree', this.serverMonitoringContractSign);
	}

	function serviceContractSign() {
		if (!$('email').getValue()) { return; }
		new Ajax.Request('/servicecontract/checkaddress', {
			method:'post',
			parameters:'email=' + $('email').getValue(),
			onComplete:function(transport) {
				if (transport.responseText == 'success') {
					$('submitfeedback').update('Thank you! We have been notified of your acceptance of these terms and will follow up with you shortly...')
				}
				else if (transport.responseText == 'already signed') {
					$('submitfeedback').update('ERROR: our records show that you have already signed this agreement');
				}
				else {
					$('submitfeedback').update('ERROR: the email address you entered cannot be found.');										
				}
			}
		});
	}

	function serverMonitoringContractSign() {
		if (!$('email').getValue()) { return; }
		new Ajax.Request('/servicecontract/smccheckaddress', {
			method:'post',
			parameters:'email=' + $('email').getValue(),
			onComplete:function(transport) {
				if (transport.responseText == 'success') {
					$('submitfeedback').update('Thank you! We have been notified of your acceptance of these terms and will follow up with you shortly...')
				}
				else if (transport.responseText == 'already signed') {
					$('submitfeedback').update('ERROR: our records show that you have already signed this agreement');
				}
				else {
					$('submitfeedback').update('ERROR: the email address you entered cannot be found.');										
				}
			}
		});
	}
	
});

