/********************************************************
* CHE.topnav 
* Handles top navigation UI events
* Example:
* CHE.topnav.set(
* 		{
* 			nav1:"nav1_est",
* 			nav2:"nav2_est_prop"
* 		}
* 	);
********************************************************/


CHE.topnav = function() {
	return {
		
		/********************************************************
		* mainNav {array}: 
		*	[	img dom id, 
		*		img url string "roll" state, 
		*		img url string "off" state
		*	];
		* naming convention of img file name: "navhierarchy_[domId]_roll"
		********************************************************/
		mainNav: [
					["nav1_est","/assets/images/global/nav1_est_roll.gif","/assets/images/global/nav1_est.gif"],
					["nav1_wines","/assets/images/global/nav1_wines_roll.gif","/assets/images/global/nav1_wines.gif"],
					["nav1_news","/assets/images/global/nav1_news_roll.gif","/assets/images/global/nav1_news.gif"],
					["nav1_visit","/assets/images/global/nav1_visit_roll.gif","/assets/images/global/nav1_visit.gif"],
					["nav1_club","/assets/images/global/nav1_wineClub_roll.gif","/assets/images/global/nav1_club.gif"],
					["nav1_trade","/assets/images/global/nav1_trade_roll.gif","/assets/images/global/nav1_trade.gif"],
					["nav1_cont","/assets/images/global/nav1_cont_roll.gif","/assets/images/global/nav1_cont.gif"]
				],
				
		subNav: [
					//estate
                    ["nav2_est_prop","/assets/images/global/nav2_est_prop_on.gif","/assets/images/global/nav2_est_prop.gif"],
					["nav2_est_history","/assets/images/global/nav2_est_history_on.gif","/assets/images/global/nav2_est_history.gif"],
					["nav2_est_land","/assets/images/global/nav2_est_land_on.gif","/assets/images/global/nav2_est_land.gif"],
					["nav2_est_winem","/assets/images/global/nav2_est_winem_on.gif","/assets/images/global/nav2_est_winem.gif"],
					["nav2_est_culin","/assets/images/global/nav2_est_culin_on.gif","/assets/images/global/nav2_est_culin.gif"],
					["nav2_est_arch","/assets/images/global/nav2_est_arch_on.gif","/assets/images/global/nav2_est_arch.gif"],
					["nav2_est_equestrian","/assets/images/global/nav2_est_equestrian_on.gif","/assets/images/global/nav2_est_equestrian.gif"],
					["nav2_est_estTeam","/assets/images/global/nav2_est_estTeam_on.gif","/assets/images/global/nav2_est_estTeam.gif"],
					["nav2_est_philan","/assets/images/global/nav2_est_philan_on.gif","/assets/images/global/nav2_est_philan.gif"],
					
                    //wines
                    ["nav2_wines_chard","/assets/images/global/nav2_wines_chard_on.gif","/assets/images/global/nav2_wines_chard.gif"],
					["nav2_wines_sauv","/assets/images/global/nav2_wines_sauv_on.gif","/assets/images/global/nav2_wines_sauv.gif"],
					["nav2_wines_pinot","/assets/images/global/nav2_wines_pinot_on.gif","/assets/images/global/nav2_wines_pinot.gif"],
					["nav2_wines_cab","/assets/images/global/nav2_wines_cab_on.gif","/assets/images/global/nav2_wines_cab.gif"],
					["nav2_wines_merlot","/assets/images/global/nav2_wines_merlot_on.gif","/assets/images/global/nav2_wines_merlot.gif"],
					["nav2_wines_syrah","/assets/images/global/nav2_wines_syrah_on.gif","/assets/images/global/nav2_wines_syrah.gif"],
					["nav2_wines_spec","/assets/images/global/nav2_wines_spec_on.gif","/assets/images/global/nav2_wines_spec.gif"],
					["nav2_wines_wherToBuy","/assets/images/global/nav2_wines_wherToBuy_on.gif","/assets/images/global/nav2_wines_wherToBuy.gif"],
					
                    //news
                    ["nav2_news_reviews","/assets/images/global/nav2_news_reviews_on.gif","/assets/images/global/nav2_news_reviews.gif"],
					["nav2_news_calen","/assets/images/global/nav2_news_calen_on.gif","/assets/images/global/nav2_news_calen.gif"],
					["nav2_news_articles","/assets/images/global/nav2_news_articles_on.gif","/assets/images/global/nav2_news_articles.gif"],
					["nav2_news_pressRel","/assets/images/global/nav2_news_pressRel_on.gif","/assets/images/global/nav2_news_pressRel.gif"],
					["nav2_news_pressKit","/assets/images/global/nav2_news_pressKit_on.gif","/assets/images/global/nav2_news_pressKit.gif"],
					["nav2_news_nwsltr","/assets/images/global/nav2_news_nwsltr_on.gif","/assets/images/global/nav2_news_nwsltr.gif"],
                    
                    //visit
					["nav2_visit_tour","/assets/images/global/nav2_visit_tour_on.gif","/assets/images/global/nav2_visit_tour.gif"],
					["nav2_visit_ent","/assets/images/global/nav2_visit_ent_on.gif","/assets/images/global/nav2_visit_ent.gif"],
					["nav2_visit_driv","/assets/images/global/nav2_visit_driv_on.gif","/assets/images/global/nav2_visit_driv.gif"],
                    
                    //wine club
					["nav2_club_join","/assets/images/global/nav2_club_join_on.gif","/assets/images/global/nav2_club_join.gif"],
					["nav2_club_chairmans","/assets/images/global/nav2_club_chairmans_on.gif","/assets/images/global/nav2_club_chairmans.gif"],
					["nav2_club_presidents","/assets/images/global/nav2_club_presidents_on.gif","/assets/images/global/nav2_club_presidents.gif"],
					["nav2_club_peggysPre","/assets/images/global/nav2_club_peggysPre_on.gif","/assets/images/global/nav2_club_peggysPre.gif"],
                    ["nav2_club_culinary","/assets/images/global/nav2_club_culinary_on.gif","/assets/images/global/nav2_club_culinary.gif"],
                    ["nav2_club_memberServices","/assets/images/global/nav2_club_memberServices_on.gif","/assets/images/global/nav2_club_memberServices.gif"],
                    
                    //trade
					["nav2_trade_somm","/assets/images/global/nav2_trade_somm_on.gif","/assets/images/global/nav2_trade_somm.gif"],
					["nav2_trade_pos","/assets/images/global/nav2_trade_pos_on.gif","/assets/images/global/nav2_trade_pos.gif"],
					["nav2_trade_calen","/assets/images/global/nav2_trade_calen_on.gif","/assets/images/global/nav2_trade_calen.gif"],
					["nav2_trade_pressKit","/assets/images/global/nav2_trade_pressKit_on.gif","/assets/images/global/nav2_trade_pressKit.gif"],
					["nav2_trade_wholCont","/assets/images/global/nav2_trade_wholCont_on.gif","/assets/images/global/nav2_trade_wholCont"]
			],
		navState: "",
		subNavState: "",
		menuState: "",
		
		/********************************************************
		* handler() Main event handler for this module
		* @param {string} domId dom id of href
		* naming convention of href: "[domId]link"
		********************************************************/
		handler: function(domId)
		{
			var self = this;
			var pN = document.getElementById(domId).parentNode;
			if(pN && this.sSetState != domId) 
			{
				pN.onmouseover = function(e)
				{
					self.rollOver(pN.childNodes[0].id);
					if(CHE.section == "Home") { //turn on subnav rollover
						self.subMenuOver(pN.childNodes[0].id);
					}
					self.simpleRollOver(pN.childNodes[0].id); // place after rollOver
				}
				if(CHE.section != "Home") { //turn on the rolloff in main nav
					pN.onmouseout = function(e)
					{
						self.simpleRollOut(pN.childNodes[0].id);
					}
				}
			}
		},
		
		subHandler: function(domId)
		{
			var self = this;
			var pN = document.getElementById(domId);
			if(pN && this.sSetState != domId) 
			{
				pN.onmouseover = function(e)
				{
					self.simpleSubRollOver(pN.id);
				}
				pN.onmouseout = function(e)
				{
					self.simpleSubRollOut(pN.id);
				}
			}
		},
		
		/********************************************************
		* Setters
		********************************************************/
		setNavState: function()
		{
			document.getElementById(this.navState).src = "/assets/images/global/" + this.navState + "_on.gif";
		},
		
		setSubNavState: function()
		{
			document.getElementById(this.subNavState).src = "/assets/images/global/" + this.subNavState + "_on.gif";
		},
		
		setMenu: function()
		{
			document.getElementById(this.menuState).style.display = "block";
		},
		
		
		simpleRollOver: function(domId) 
		{
			document.getElementById(domId).src = "/assets/images/global/" + domId + "_roll.gif";
		},
		simpleRollOut: function(domId) 
		{
			document.getElementById(domId).src = "/assets/images/global/" + domId + ".gif";
		},
		
		
		simpleSubRollOver: function(domId) 
		{
			document.getElementById(domId).src = "/assets/images/global/" + domId + "_on.gif";
		},
		simpleSubRollOut: function(domId) 
		{
			document.getElementById(domId).src = "/assets/images/global/" + domId + ".gif";
		},
		
		
		
		/********************************************************
		* rollOver() Controls the mouseover UI.
		* @param {String} domId the DOM id of nav image tag
		* Note: there is no mouseout event in this module
		********************************************************/
		rollOver: function(domId)
		{
			var aCollection = document.getElementById('chenav').getElementsByTagName("img");
			
			for(var i = 0, item; item = aCollection[i]; i++) 
			{
				if ((document.getElementById(aCollection[i].id) != domId || domId == null) && (window[aCollection[i].id])) {
					//off state
					document.getElementById(aCollection[i].id).src = window[aCollection[i].id].src;
				} else {
					//naming convention of img file name: "navhierarchy_[domId]_roll"
					if(window[aCollection[i].id + "_roll"]) {
						document.getElementById(aCollection[i].id).src = window[aCollection[i].id + "_roll"].src;
					}
				}
			}
			if(this.navState != "") this.setNavState();
			if(this.menuState != "") this.setMenu();
		},
		
		/********************************************************
		* subMenuOver() Controls the submenu over state
		* @param {String} domId the DOM id of nav2 container tag
		********************************************************/
		subMenuOver: function(domId)
		{
			var aCollection = document.getElementById('chenavsec').getElementsByTagName("div");
			
			for(var i = 0, item; item = aCollection[i]; i++) 
			{
				var o = document.getElementById('chenavsec').getElementsByTagName("div")[i];
				if(o.style.display == "block")
				{
					o.style.display = "none";
				}
			}
			
			if(domId != null)
			{
				var tmp_domId = domId.replace('nav1','nav2'); //display nav2 not nav1
				document.getElementById(tmp_domId).style.display = "block";
			}
		},
		
		/********************************************************
		* handleClearNavState() Clears the navigation states to off
		********************************************************/
		handleClearNavState: function()
		{
			var self = this;
			document.onmousemove = function(e)
			{
				var e = e || window.event;
				var y = (e.pageY) ? e.pageY : e.clientY + document.body.scrollTop;
				var x = (e.pageX) ? e.pageX : e.clientX + document.body.scrollLeft;
				
				var a = parseInt(document.getElementById('chestatus').offsetHeight);
				var b = parseInt(document.getElementById('chetopnav').offsetHeight);
				//mouse off coords
				if(y < a || y > (a+b) || x > 770)
				{
						self.subMenuOver(null);
						self.rollOver(null);
				}
			}

		},

		/********************************************************
		* preload() Preloads images into cache
		* @param {string} domId name of JS image object
		* @param {string} url url of image
		********************************************************/
		preload: function(domId,url)
		{
			window[domId] = new Image();
			window[domId].src = url;
		},
		
		/********************************************************
		* set() Set up this module
		* @param {object} state object literal contains nav1 and nav2
		* to define on state
		********************************************************/
		set: function(state)
		{
			if(state.nav1 != "") {
				//turn on nav1
				this.navState = state.nav1;
			}
			if(state.nav2 != "") {
				//turn on nav2
				this.subNavState = state.nav2;
				this.setSubNavState();
			}
			
			for(var i = 0, item; item = this.mainNav[i]; i++) 
			{
				this.preload(this.mainNav[i][0] + "_roll", this.mainNav[i][1]);
				this.preload(this.mainNav[i][0], this.mainNav[i][2]);
				
				if(this.navState == this.mainNav[i][0]) {
					this.setNavState();
					this.menuState = this.navState.replace('nav1','nav2');
					this.subMenuOver(this.menuState);
				} else {
					this.handler(this.mainNav[i][0]);
				}
			}
			
			//subnav
			for(var j = 0, item; item = this.subNav[j]; j++) 
			{
				if(this.subNavState != this.subNav[j][0]) {
					this.preload(this.subNav[j][0] + "_on", this.subNav[j][1]);
					this.preload(this.subNav[j][0], this.subNav[j][2]);
					this.subHandler(this.subNav[j][0]);
				}
			}
			
			this.handleClearNavState();
		}
 	};
} ();




