var ZooMain = new Class({
	Implements: Events,
	nav: false,
	productAccordion: false,
	timer: false,
	navScroller: false,
	navInitFx: false,
	bannerDuration: 8,
	bannerTimer: false,
	currentBanner: 0,
	isIE: false,
	dropdownTimer: false,
	activeDropDown: false,
	navDelay: 250,
	
	init: function() 
	{
		this.nav = $('nav_child_container');
		
		var isHelpCenter = (window.location.pathname.indexOf('helpcenter') == -1) ? false : true;
		this.isIE = (navigator.appVersion.indexOf('MSIE 6') > -1 || navigator.appVersion.indexOf('MSIE 7') > -1);
		
		if (this.nav && !isHelpCenter) {
			this.initNav();
		}
		
		if ($$('.product_toggler').length > 0) {
			this.productAccordion = new Fx.Accordion('.product_toggler', '.product_box', {
				duration: 200,
				onActive: function(toggler, element) {
					$('product_left').setStyle('height', 'auto');
					$('calcContainer').setStyle('height', 'auto');
					main.resizeCalc.delay(250);
					
					toggler.addClass('product_toggler_active');
				},
				
				onBackground: function(toggler, element) {
					toggler.removeClass('product_toggler_active');
				}
			});
		}
		
		if ($('welcome_banner') && $('banners')) {
			this.initBanner();
		}
	},
	
	initNav: function()
	{
		main.nav.addClass('rounded shadowed bordered marginB10');
		main.nav.setStyle('height', 135);
		
		if (window.UserAgentIsMobile && UserAgentIsMobile == true) {
			$('nav_child').addClass('scroll-x');
		}
		
		$$('.nav_arrow').setStyles({opacity: 0, display: 'block'});
		
		main.navScroller = new Scroller('nav_child', {area: 100, velocity: 0.18});
		main.navScroller.start(); 
		
		$('nav_child').addEvent('mousemove', (function(e) {
			if (main.navInitFx != false) {
				main.navInitFx.cancel();
			}
		}));
		
		$('nav_child').addEvent('mouseover', (function(e) {
			window.addEvent('keyup', main.keyListener);
		}));
		
		$('nav_child').addEvent('mouseout', (function(e) {
			window.removeEvent('keyup', main.keyListener);
		}));
		
		$('nav_child_container').addEvent('mouseout', (function(e) {
			main.navScroller.stop();
		}));

		$$('.nav_arrow').addEvent('mousemove', (function(e) {
			if (main.navInitFx != false) {
				main.navInitFx.cancel();
			}
			main.navScroller.getCoords(e);

			if (main.isIE != false) {
				$('nav_child').setStyle('position', 'relative');
				$('nav_child').setStyle('height', '150px');
			}
		}));
		
		var i = 0;
		var selectNav = 1;		
		if (window.selectNavIndex && !isNaN(selectNavIndex)) {
			selectNav = selectNavIndex;
		}
		
		var uri = window.location.href;

		$('nav_services').getChildren().each(function(el) {
			if (el.href == uri) {
				selectNav = 0;
			}
		});
		
		if (window.location.pathname == '/account/login') {
			selectNav = 0;
		}
		
		$$('.nav_item').each(function(el) {
			el.addEvent('click', main.changeNav);
			el.addEvent('mouseover', main.showDropDown.bind(this));
			el.addEvent('mouseout', main.hideDropDown.bind(this));
			
			if (i == selectNav) {
				el.fireEvent('click', el, 500);
			}
			
			i++;
		});
		
		$$('.dropdown').setStyles({display: 'block', top: -1000, opacity: 0});
		$$('.dropdown').addEvent('mouseover', main.stopDropDownTimer.bind(this));
		$$('.dropdown').addEvent('mouseout', main.hideDropDown.bind(this));
		
		new Fx.SmoothScroll();
	},
	
	showDropDown: function(e) 
	{
		clearTimeout(main.dropdownTimer);
		
		var a = (e.target.nodeName == 'A') ? e.target : e.target.getParent();
		var child = $('dropdown_' + a.rel);
		
		var p_coord = $('nav_parent').getCoordinates();
		
		if (child) {			
			if (main.activeDropDown != false && main.activeDropDown != child) {					
				main.activeDropDown.tween('opacity', 0);
			}
						
			main.activeDropDown = child;
			child.setStyles({top: p_coord.top + p_coord.height - 10, left: p_coord.left});
			child.tween('opacity', 1);
		}
	},
	
	hideDropDown: function()
	{
		var child = main.activeDropDown;
		
		main.dropdownTimer = (function() {
			if (child != false) {
				child.tween('opacity', 0);
				
				if (child == main.activeDropDown) {
					main.activeDropDown = false;
				}
			}
		}).delay(main.navDelay);
	},
	
	stopDropDownTimer: function()
	{
		clearTimeout(main.dropdownTimer);
	},
	
	keyListener: function(e) 
	{
		var children = $('nav_child').getChildren();
		
		if (children.length > 0) {
			var child = children[0];
			
			var items = child.getChildren();
			
			if (items.length > 0) {
				var width = 0;
				var start = 0;
				var end = 0;
				
				items.each(function(item, i) {
					if (item.rel == e.key) {
						if (start == 0) {
							start = width;
						}
						end = width + item.getSize().x + 40;
					}
					width += item.getSize().x + 40;
				});
				
				if (width > 900 && start > 0) {
					var center = (start + end) / 2;
					var left = (center > 400) ? center - 400 : 0;
					
					if (left > width - 860) {
						left = width - 860;	
					}
					
					main.navScroller.element.scrollTo(left, 0);
				}
			}
		}
	},
	
	hideNavArrows: function()
	{
		$$('.nav_arrow').fade('out');
	},
	
	showNavArrows: function()
	{
		$$('.nav_arrow').fade('in');
	},
	
	changeNav: function(e)
	{		
		if (main.activeDropDown != false) {					
			main.activeDropDown.tween('opacity', 0);
		}
			
		$$('.nav_item').each(function(el) {
			el.getParent().removeClass('selected');
		})
		
		var el = e;
		
		if (e.target) {
			el = e.target;
		}
		
		el.getParent().addClass('selected');
		var child = $('nav_' + el.rel).clone();
		child.addClass('nav_clone_' + el.rel);
		
		if (child) {
			if (e.target) {
				e.stop();
			}
				
			main.hideNavArrows();
			
			$('nav_child').fade('out');
			
			(function(){
				$('nav_child').empty();
				
				child.addClass('nav_items');
				child.inject('nav_child');
				
				var width = 0;
				child.getChildren().each(function(item, i) {
					var size = item.getSize().x;
					
					if (main.isIE != false) {
						size = 130;
						item.setStyle('width', '130px');
					} 
					
					width += size + 40;
				});
				
				child.setStyle('width', width + 15);
			
			 	$('nav_child').fade('in'); 
			 	
			 	if (width > 900) {
					main.showNavArrows();

					(function() { main.navInitFx = new Fx.Scroll($('nav_child'), {duration: 1500}); main.navInitFx.start(75, 0); }).delay(500);
				}
			}).delay(500);			
		}
	},
	
	initBanner: function() 
	{
		//$$('#welcome_banner .banner').tween('opacity', 1);
		
		var len = $$('#banners .banner').length;
		var pagDiv = $$('#welcome_banner .paginate')[0];
		
		if (len > 1) {
			for (var i = 0; i < len; i++) {
				var a = new Element('a');
				a.rel = i;
				if (i == 0) {
					a.addClass('active');
				}
				
				a.addEvent('click', main.paginateClickHandler);
				
				a.inject(pagDiv);
			}
			
			main.bannerTimer = main.changeBanner.periodical(main.bannerDuration * 1000);
		}
	},
	
	paginateClickHandler: function(e)
	{
		clearInterval(main.bannerTimer);
		main.currentBanner = e.target.rel - 1;
		
		if (main.changeBanner()) {
			main.bannerTimer = main.changeBanner.periodical(main.bannerDuration * 1000);
		}
	},
	
	changeBanner: function()
	{
		main.currentBanner++;
		
		if (main.currentBanner >= $$('#banners .banner').length) {
			main.currentBanner = 0;
		}
		
		var index = main.currentBanner;		
		
		$$('#welcome_banner .banner').tween('opacity', 0);
		
		(function() {
			var links = $$('#welcome_banner .paginate')[0].getChildren();
			
			links.removeClass('active');
			links[index].addClass('active');
			
			var banner = $$('#banners .banner')[index].clone();
			banner.setStyle('opacity', 0);
			
			$$('#welcome_banner .banner')[0].destroy();
			
			banner.inject('welcome_banner', 'top');
			banner.tween('opacity', 1);			
		}).delay(500);
		
		return true;
	},
	
	resizeCalc: function()
	{
		var calc = $('calcContainer');
		var prod = $('product_left');
		
		if (calc && prod) {
			var cH = calc.getSize().y;
			var pH = prod.getSize().y;
			
			if (cH > pH) {
				prod.tween('height', cH - 2);
			} else {
				calc.tween('height', pH - 2);
			}
		}
	},
	
	searchZipCodes: function(e)
	{
		var qs = e.target.toQueryString();
		var zip = qs.replace('zip_code=', '');
		
		if (zip == '') {
			$('zip_code_error').setStyle('display', 'inline');
			return false;
		}
		
		var found = false;
		
		$$('.scrolling_zip_codes').each(function(group) {
			var items = group.getChildren();
			
			items.each(function(item) {
				if (item.get('text') == zip) {
					$('zip_code_error').setStyle('display', 'none');
					$$('.zip_code_selected').each(function(selected) { selected.removeClass('zip_code_selected'); });
					
					item.addClass('zip_code_selected');
					new Fx.Scroll(group).toElement(item);
					found = true;
					
					return false;
				}
			});
		});
		
		if (found == false) {
			$('zip_code_error').setStyle('display', 'inline');
		}
		
		return false;
	},
	
	rewardsPopup: function()
	{
		SqueezeBox.open($('rewards_terms'), {handler: 'clone', size: {x: 725, y: 580}});
	},
	
	log: function(data) {
		if (window.console) {
			console.log(data);
		}
	}
});

var main = false;

window.addEvent('domready', function() {
	main = new ZooMain();
	main.init();	
});


