var nmModules = $H();
var sections = $H();

function customYUINav(ID) {
	if (ID.match(/^lm-/)) {
		var lmsection = ID.replace(/^lm-/,'');
		nm.slideActiveSection('learnmore' + lmsection);		
	}
	else if (ID.match(/^tab-/)) {
		var tab = ID.replace(/^tab-/,'');
		switch (tab) {
			case 'servicestab':
			webkit.makeTabActive('servicestab', 'upgradetable', 'servicetable');
			break;
			
			case 'upgradestab':
			webkit.makeTabActive('upgradestab', 'servicetable', 'upgradetable');
			break;
		}		
	}
}

document.observe("dom:loaded", function() {
	webkit.modinit('contact');
	
	if ($(document.body).hasClassName("nm_currentPage_home")) {
		webkit.setupButton('learnmorebutton', nm.homeLMButton);
		webkit.initNewsCrawl('newscrawlwrapper');
	}
	else if ($(document.body).hasClassName("nm_currentPage_learnmore")) {
		nm.learnMoreObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_support")) {
		nm.supportObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_websites")) {
		nm.websitesObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_blog")) {
		nm.blogObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_services")) {
		nm.servicesObservers();
	}
	else if ($(document.body).hasClassName("nm_currentPage_servicecontract")) {
		nm.serviceContractObservers();
	}
	
	nm.mailinglistInit();
	
	webkit.contactNavButton();	
});

function nm() {
	
	this.currentsection = 0;
	
	this.YUIcallback = function() {
		
	}
	
	this.homeLMButton = function() {
		window.location.href = '/learnmore';
	}
	
	this.learnMoreObservers = function() {
		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');
					nm.slideActiveSection(o.id);						
				});
			});
		}	

		if ($('webkitwrapper')) {
			nm.webkitObservers();
		}	
		
		// invoke observers for nav links
		nm.learnMoreNav();
	}
	
	this.learnMoreNav = function() {
		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;
					nm.slideActiveSection('learnmore' + nextsection);			
				}});
			});
		});
		
		if ($('pricinglink')) {
			$('pricinglink').observe('click', function(e) {
				e.stop();
				new Effect.ScrollTo('sectionwrapper', { duration:0.2, afterFinish:function() {				
					nm.slideActiveSection('learnmore6');				
				}});
			});
		}
	}
	
	 this.slideActiveSection = function(activesection) {
		if (activesection.match(/^module_/)) {
			activesection = activesection.replace(/^module_/,'');
			nm.slideActiveSectionMove(0,nmModules.get(activesection),'activemodule');
		}
		else if (activesection.match(/^learnmore/)) {
			nm.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;
				}
			});
			nm.slideActiveSectionMove(xVal,-2,'activesection',thisURL);
		}
	}

	this.slideActiveSectionMove = function(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-' + nm.currentsection); 
				if (webkit.cacheget('learnmore', pageURL)) {
					webkit.cacheoutput('learnmore', pageURL, $('learnmorecontent'));
					nm.learnMoreNav();					
					$('learnmorecontent').removeClassName('wait');					
				}
				else {
					new Ajax.Updater('learnmorecontent', pageURL + '/ajaxreload', {
						onComplete:function() {
							$('learnmorecontent').removeClassName('wait');
							webkit.cacheset('learnmore', pageURL, $('learnmorecontent'));
							nm.learnMoreNav();
							if ($('webkitwrapper')) {
								nm.webkitObservers();
							}
						}
					})					
				}				
			}
		}});	
	}

	this.webkitObservers = function() {
		$$('#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');
				nm.showModule(o.id);
				e.stop();
			})
		})
	}

	this.showModule = function(ID) {
		$$('#webkitcontent div').each(function(o) {
			if ($(o).visible()) {
				nm.slideActiveSection('module_' + ID);
				new Effect.Fade(o.id, { duration: 0.5, afterFinish: function() {
					new Effect.Appear('wkcontent_' + ID, { duration:0.5 });
					}})
				}
			});
	}
	
	this.searchSupport = function() {
		if (!$('search').getValue()) { return; }
		new Ajax.Updater('supportwrapper', '/searchsupport/' + $('search').getValue());
	}
	
	this.searchBlog = function() {
		if (!$('search').getValue()) { return; }
		new Ajax.Updater('blogcontents', '/searchblog/' + $('search').getValue());
	}
	
	this.supportObservers = function() {
		$('search').focus();
		
		webkit.setupButton('searchbutton', nm.searchSupport);
		$('search').observe('keypress', function(e) {
			var key = e.which || e.keyCode;
			if (key == Event.KEY_RETURN) {
				e.stop();
				nm.searchSupport();
			}
		});
		
		if ($('submit')) {
			nm.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');
					}})
				}
			});
		});
	}
	
	this.websitesObservers = function() {
		$$('.visitsite .buttonWrapper').each(function(o) {
			var siteID = o.id.replace(/^visit/,'');
			var thishref = $(siteID).select('a');			
			webkit.setupButton(o.id, nm.websiteButtons, thishref[0]);
		})		
	}
	
	this.websiteButtons = function(thishref) {
		window.location.href = thishref;
	}
	
	this.blogObservers = function() {
		webkit.modinit('fbshare');
		
		if ($('search')) {
			$('search').focus();

			webkit.setupButton('searchbutton', nm.searchBlog);
			$('search').observe('keypress', function(e) {
				var key = e.which || e.keyCode;
				if (key == Event.KEY_RETURN) {
					e.stop();
					nm.searchBlog();
				}
			});	
		}
		
		if ($('submit')) {
			nm.submitComments();					
		}
		
		webkit.setupButton('showboth', nm.blogDisplayMode, 'showboth');
		webkit.setupButton('showgeek', nm.blogDisplayMode, 'showgeek');
		webkit.setupButton('shownews', nm.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 });
			});
		});
	}
	
	this.blogDisplayMode = function(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;
		}
	}
	
	this.submitComments = function() {
		$('submit').observe('mouseover', function() {		
			webkit.buttonMouseEffect('submit','over');		
		});
		$('submit').observe('mouseout', function() {
			webkit.buttonMouseEffect('submit','out');		
		});
		$('submit').observe('click', function() {
			$('commentform').submit();
		});
	}
	
	this.servicesObservers = function() {		
		webkit.setupTab('servicestab');
		webkit.setupTab('upgradestab');
	}
	
	this.mailinglistInit = function() {
		$('mailinglist').observe('click', function(e) {
			e.stop();
			Modalbox.show('/mailinglist', { title: 'Subscribe/Unsubscribe to our mailing list', afterLoad:function() {
				webkit.modinit('mailinglist');
			}});
		})
	}
	
	this.serviceContractObservers = function() {
		webkit.setupButton('agree', this.serviceContractSign);
	}
	
	this.serviceContractSign = function() {
		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.');										
				}
			}
		});
	}
}

var nm = new nm();