﻿(function($j){

	Code.registerNamespace('Website');

	Website.Core = {
	
		content: null,
		navPosition: null,
		navSwitch: false,
		navigation: '#NavigationPrimary',
		
		checkBrowser: function(){
			if(Code.UserAgent.isSafari){
				$j('body').addClass('safari');
			}
		},
		
		injectStyleSheet: function(){
			$j('body').addClass('js');
			$j('head').append('<link type="text/css" rel="stylesheet" href="_Client/Styles/JS.css" media="screen" />');
		},
		
		debugStyles: function(){
			var _self = this;
			var debugStyles = ('<style type="text/css">');
			debugStyles += ('#DebugConsole { position: fixed; top: 0; left: 0; z-index: 3000; width: auto; background: #FFFFFF; border: 1px solid #000000; padding: 0 0 10px 10px; color: #000000; font-size: 12px; font-family: arial; }');
			debugStyles += ('#DebugConsole .debug-head { font-size: 14px; font-weight: bold; cursor: move; width: 200px; margin-right: 5px; border-bottom: 1px solid #000000; padding: 5px 40px 5px 0; }');
			debugStyles += ('#DebugConsole .debug-list { padding: 10px 40px 0 0; white-space: nowrap; }');
			debugStyles += ('#DebugConsole .maxScroll { height: 200px; overflow: auto; }');
			debugStyles += ('#DebugConsole .close-debug, .debug-mini { background: red; color: #FFFFFF; padding: 2px 2px 2px 5px; position: absolute; top: 5px; right: 5px; width: 10px; cursor: pointer; }');
			debugStyles += ('#DebugConsole .debug-mini { right: 30px; padding-left: 7px; }');
			debugStyles += ('</style>');
			debugStyles += ('<!--[if IE]>');
			debugStyles += ('<style type="text/css">');
			debugStyles += ('#DebugConsole .debug-list { overflow-x: hidden;}');
			debugStyles += ('<![endif]-->');
			debugStyles += ('</style>');
			
			$j('head').append(debugStyles);
			
			
		},
		
		debugToggle: function(){
			var debugList = $j('.debug-list');
			var debugMini = $j('.debug-mini');
			debugMini.toggle(function(){
				debugList.slideUp('fast');
				$j(this).html('+');
			}, function(){
				debugList.slideDown('fast');
				$j(this).html('-');
			});
		
		},
		
		trace: function(args){
			var _self = this;
			var debugConsole = $j('#DebugConsole');
			var debugList = $j('.debug-list');
			var debugMini = $j('.debug-mini');
			
			if(!debugConsole.size()){
				//add the styles of the console
				_self.debugStyles();
			
				// write out the initial console if it doesn't exist');
				var closeBtn = ('<div class="close-debug" >X</div>');
				var miniBtn = ('<div class="debug-mini" >-</div>');
				$j('body').append('<div id="DebugConsole">'+ closeBtn + miniBtn + '<div class="debug-head">Trace</div><div class="debug-list">' + args + '</div></div>');
				$j('.close-debug').click(function(){
					$j(this).parent().remove();
				});
				
				//add show hide
				_self.debugToggle();
				//start dragable script
				_self.dragIt();
				
			}else{
				debugList.prepend(args + '<br />');
			}
			
			var debugHeight = debugList.height();
			
			if(debugHeight > 200){
				debugList.addClass('maxScroll');
			}

      
		},

    dragIt: function(){
			var _self = this;
			$j('#DebugConsole').bind('drag',function(event){
				var myTarget = $j(event.target);
					$j(this).css({
						top: event.offsetY,
						left: event.offsetX
					 });
			});
    },
		
		pageLinks: function(){
			var _self = this;
			$j('a','#Home').bind('click', function(){
			
				_self.linkTo(this);
				
					return false;
			});
		},
		
		linkTo: function(obj){
			var _self = this;
			var objAnchor = $j(obj).attr('href');
			objAnchor = objAnchor.substring(objAnchor.length,objAnchor.lastIndexOf('#'));
			var objLink = objAnchor.substring(objAnchor.length, 1);
			var navPos = Math.abs(_self.getTop('#NavigationPrimary'));
			var navHeight = $j('#NavigationPrimary').height();
			var navPadding = $j('#NavigationPrimary').css('padding-top');
			var trueNavHeight = parseInt(navHeight) - parseInt(navPadding);
			var navDiff = (_self.getTopPos('.'+objLink) - trueNavHeight);
			
			if(_self.navPosition == undefined){
				_self.navPosition = 0;
			}
			
			if(objLink == 'places' && navPos == 0){
				var diff = (_self.getTopPos('.'+objLink) + _self.navPosition) - (trueNavHeight+navDiff);
			}else{
				var diff = (_self.getTopPos('.'+objLink) + _self.navPosition) - (trueNavHeight+navDiff) + 340;
			}
			
			var linkPos = _self.getTopPos('.a-'+objLink);
			var linkEnd = (linkPos+diff)-navDiff;
			_self.navPosition = linkEnd;
			$j('#Container').scrollTo(_self.navPosition,800);
			
		},
		
		initNavigation: function(){
			var _self = this;
			$j('#PN01').addClass('active');
			
			//remove back to top links
			$j('.b2top').remove();
			
			var primaryNav = $j('#NavigationPrimary');
			var navInner = primaryNav.html();
			primaryNav.remove();
			$j('body').prepend('<div id="NavigationPrimary">' + navInner + '</div>');
			$j('#Content, #ContentPrimary, #NavigationPrimary').removeClass('non-js');
			
			var primaryNav = $j('#NavigationPrimary');
			
			primaryNav.click(function(event){
				//$j('li',this).removeClass('active');
				var myTarget = $j(event.target);
				if(myTarget.is('a')){
					_self.navigationControl(myTarget);
					return false;
				}
			});
			
			//add classes to the li's
			
			$j('a',primaryNav).each(function(){
				var objAnchor = $j(this).attr('href');
				objAnchor = objAnchor.substring(objAnchor.length,objAnchor.lastIndexOf('#'));
				var objLink = objAnchor.substring(objAnchor.length, 1);
			
				$j(this).parent().addClass(objLink);
			});
			
			//set the x position of the menu on load and resize
			function setMenu(){
				$j('#Container').scrollTop(0);
				var content = $j('.content');
				var contentPos = content.offset();
				var contentLeft = contentPos.left;
				var contentWidth = content.width();
				var navPos = contentLeft + contentWidth - 33;
				primaryNav.css({'left':navPos});
			};
			
			primaryNav.css({'top':'0'});
			
			setMenu();
			
			$j(window).resize(function(){
				setMenu();
			});
		},
		
		createTriggers: function(){
			var _self = this;
			var listLength;
			var anchorArr = new Array();
		
			$j('li', _self.navigation).each(function(index){
					anchorArr[index] = new Array();
					var objAnchor = $j('a', this).attr('href');
					objAnchor = objAnchor.substring(objAnchor.length,objAnchor.lastIndexOf('#'));
					var objLink = objAnchor.substring(objAnchor.length, 1);
					
					anchorArr[index][0] = '.a-' + objLink;
					anchorArr[index][1] = _self.getTop(anchorArr[index][0]);
			});
			
			return anchorArr;
		
		},
		
		navScroll: function(){
			var _self = this;
			var navigation = $j('#NavigationPrimary')
			
			var triggers = _self.createTriggers()
			var triggersLength = triggers.length;
			var triggerArr = new Array();
			var triggerPosArr = new Array();
			
			for(var i = 0; i < triggersLength; i++){
				triggerArr[i] = triggers[i][0];
				triggerPosArr[i] = triggers[i][1];
			}
			
			
			function getLink(obj){
				var linkClass = obj;
				linkClass = linkClass.substring(linkClass.length, linkClass.indexOf('-')+1);
				linkClass = '.'+linkClass;
				return linkClass;
			}
      
      function removeActive(){
        $j('li',navigation).removeClass('active');
      }
			
			var contentHeight = $j('#Container').height;
			contentHeight = contentHeight/2;
			var test = _self.getTop('.a-places') - _self.getTopPos('.places');
					
			$j('#Container').scroll(function(){
					var scroller = $j('#Container').scrollTop();
					
					if(Code.UserAgent.isIE7){
						var padding = parseInt($j('#NavigationPrimary').css('padding-top'));
					}
					if(scroller > triggerPosArr[1] && Math.abs(_self.getNavPos()) == 0){
						$j('#NavigationPrimary').animate({'top':'-340'},'fast');
					}else if(scroller <= triggerPosArr[1]-300 && Math.abs(_self.getNavPos()) == 340){
						$j('#NavigationPrimary').animate({'top':'0'},'fast');
					}
					
					
					var navPos = Math.abs(parseInt(navigation.css('top')));
					
					//_self.trace('true ' + _self.getTop(triggerArr[5]) + '  nav ' + _self.getTopPos(getLink(triggerArr[5])) + ' test ' + test);
					
					if(_self.getTop(triggerArr[0]) >= 0 && _self.getTop(triggerArr[0]) < _self.getTop(triggerArr[1])){
						$j('li','#NavigationPrimary').removeClass('active');
						$j(getLink(triggerArr[0])).addClass('active');
					}else{
						if(navPos == 0){
							for(var i = 1; i < triggerArr.length; i++){
								if(_self.getTop(triggerArr[i]) <= _self.getTopPos(getLink(triggerArr[i]))){
									$j('li','#NavigationPrimary').removeClass('active');
									$j(getLink(triggerArr[i])).addClass('active');
								}
								if(_self.getTop(triggerArr[i]) == 5){
									if(_self.getTop(triggerArr[i]) > _self.getTopPos(getLink(triggerArr[i]))){
										$j('li','#NavigationPrimary').removeClass('active');
										$j(getLink(triggerArr[i])).addClass('active');
									}
								}
							}
						}else{
							for(var i = 1; i < triggerArr.length; i++){
								if(_self.getTop(triggerArr[i]) <= _self.getTopPos(getLink(triggerArr[i]))-340){
									$j('li','#NavigationPrimary').removeClass('active');
									$j(getLink(triggerArr[i])).addClass('active');
								}
								if(_self.getTop(triggerArr[i]) == 5){
									if(_self.getTop(triggerArr[i]) > _self.getTopPos(getLink(triggerArr[i]))-340){
										$j('li','#NavigationPrimary').removeClass('active');
										$j(getLink(triggerArr[i])).addClass('active');
									}
								}
							}
						}
					}
				
					_self.navPosition = scroller;
					
			},function(){
        _self.trace('done');
      });
		},
		
		getTop: function(elem){
				var myTop = $j('' + elem + '');
				var topPos = myTop.offset();
				var top = topPos.top;
				return top;
		},

		getTopPos: function(elem){
				var myTop = $j('' + elem + '');
				var topPos = myTop.position();
				var top = topPos.top;
				return top;
		},
		
		getNavPos: function(){
			var navigation = $j('#NavigationPrimary');
			var navHeight = navigation.height();
			var navPos = navigation.offset();
			var navTop = navPos.top;
			return navTop;
		},
		
		navigationControl: function(obj){
		
			var _self = this;
				
			var navigation = $j('#NavigationPrimary');
			var navHeight = navigation.height();
			function getNavPos(){
				var navPos = navigation.offset();
				var navTop = navPos.top;
				
				return navTop;
			}
			
			var navigationContainer = parseInt(navigation.css('padding-top'));
			
			var objAnchor = $j(obj).attr('href');
			objAnchor = objAnchor.substring(objAnchor.length,objAnchor.lastIndexOf('#'));
			var objLink = objAnchor.substring(objAnchor.length, 1);
			
			$j(obj).parent().addClass(objLink);
			
			var container = $j('#Container');
			var cOffset = container.offset();
			var cTop = cOffset.top;
			
			var navPadding = parseInt($j('ul',navigation).css('padding-top'));
			var menuPos = $j(obj).parent().position();
			var menuTop = menuPos.top;
			var menuDiff = (menuTop - navPadding) - navigationContainer;
			
			var anchorName = $j('.a-' + objLink);
			var anchorPos = anchorName.offset();
			var anchorTop = anchorPos.top;
			
			if(_self.navPosition == undefined){
				_self.navPosition = 0;
			}
				var scrollToPos = ((anchorTop - menuDiff) - navigationContainer) + _self.navPosition;
			
				if(scrollToPos < 0){
					scrollToPos = 0;
				}
				
				if(!_self.navSwitch && objLink != "home"){
					scrollToPos += 340;
					_self.navSwitch = true;
				}else{
					if(scrollToPos > 0){
						scrollToPos += 340;
					}
				}

			if(objLink == "home"){
				if(getNavPos() < 0){
					navigation.animate({'top':'0'},800);
					_self.navSwitch = false;
				};	
			}else{
				if(getNavPos() == 0){
					navigation.animate({'top':'-340'},800);
					_self.navSwitch = true;
				}
			}
			
			_self.navPosition = scrollToPos;
			container.scrollTo(_self.navPosition,800);
		},
		
		onReady: function(){
		
			var _self = this;
			_self.injectStyleSheet();
			_self.initNavigation();
			_self.pageLinks();
			_self.navScroll();
			_self.checkBrowser();
		}
		
	};

	$j().ready(function(){
		Website.Core.onReady();
	});

})(jQuery);	

