﻿// ------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------
// -- controller for marketplace nav --
// ------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------

MPNav = {
	l2_open: null,
	l3_open: null,
	images: [],
	preload: function(img_src) {
		var new_img = new Image();
		new_img.src = img_src;
		this.images.push(new_img);
	},
	initialise: function() {
		if (!(document.getElementById('navigationfull'))) return;
		// get root element and top-level nav items;
		this.root = document.getElementById('navigationfull');

		// get nav items;
		var nav_lists = this.root.getElementsByTagName('UL');
		for (var i=0, nav_list; i<nav_lists.length, nav_list = nav_lists[i]; i++) 
			this.initialiseLevel(nav_list, nav_list.className);
			
		// set iframe behaviour;
		this.iframe = document.getElementById('navigationfulliframebg');
		if (this.iframe && this.iframe.offsetTop == -100) {
			this.setiFrame = this.setiFrame_ie6;
		}
		else {
			this.setiFrame = this.iFrame_null;
			this.hideiFrame = this.iFrame_null;
		}
	},

	// initialise level2 nav;
	initialiseLevel: function(nav_list, level) {
		var c_nodes = nav_list.childNodes;
		for (var i=0, c_node; i<c_nodes.length, c_node = c_nodes[i]; i++) 
			if (c_node.tagName=='LI' && c_node.className.indexOf('expander')>-1) 
				this.initialiseNavItem(c_node, level);
	}, 
	
	initialiseNavItem: function(nav_li, level) {
		var me = this;
		// initialise this nav item;
		nav_li.className += (nav_li.className.length?' ':'')+'activated';
		// bind event to link;
		nav_li.activeLink = this.getNavLink(nav_li);
		if (nav_li.activeLink) 
		{
			if (level=='level2') nav_li.activeLink.onclick = function() {me.toggleL2Nav(nav_li); return false;}
			else  nav_li.activeLink.onclick = function() {me.toggleL3Nav(nav_li); return false;}	
		}
		nav_li.navOpen = false;
		// check if is open;
		if (level=='level2' && nav_li.className.indexOf('selected')>-1) 
			this.toggleL2Nav(nav_li);			
	},
	
	positionL3: function(li) {
		var nav_div = li.getElementsByTagName('DIV')[0];
		var left_delta, max_delta, left_pos;
		
		if (li.hasBeenAdjusted || !nav_div || nav_div.className!='separate') return;
		
		if (nav_div.offsetLeft && nav_div.offsetLeft == 100) {
			// ie6 only version;
			var nav_div_width = nav_div.offsetWidth;
			// get LI width;
			var li_width = nav_div.getElementsByTagName('UL')[0].offsetWidth;

			left_delta = (-Math.floor(((li_width) - (li.offsetWidth)) / 2));
			max_delta = 10 - ($(li).offset().left - $(this.root).offset().left);
			left_pos = (Math.max(left_delta, max_delta));			
			left_pos += $(li).offset().left - $(this.root).offset().left;
			nav_div.style.left = left_pos + 'px';	
			nav_div.style.width = (li_width + 10) + 'px';			
		}
		else {
			left_delta = (-Math.floor(((nav_div.offsetWidth) - (li.offsetWidth)) / 2));
			max_delta = 10 - ($(li).offset().left - $(this.root).offset().left);
			left_pos = (Math.max(left_delta, max_delta));
			nav_div.style.left = left_pos + 'px';	
		}
		
				
		li.hasBeenAdjusted = true;
	},
	
	positionFlyout: function(li) {
		var flyout = li.getElementsByTagName('DIV')[0];
		if (li.hasBeenAdjusted || !flyout || flyout.className!='flyout') return;

		delta = this.absolutePosition(li).left - this.absolutePosition(flyout).left;
		flyout.style.left = (delta - 7) + 'px';
		li.hasBeenAdjusted = true;
	},
	
	// gets nav link;
	getNavLink: function(li) {
		var a_links = li.getElementsByTagName('IMG');
		for (var i=0; i<a_links.length; i++) 
			if (a_links[i].className.indexOf('navExpander')>-1) return a_links[i];
	},
	
	// opens l2 nav; 
	toggleL2Nav: function(l2_li) {

		// close any l3 levels;
		if (this.l3_open) {
			this.setClosed(this.l3_open);
			this.hideiFrame();
			this.l3_open = null;
		}
		
		if (l2_li.navOpen) {	// if toggling current nav;
			this.setClosed(l2_li);
			this.l2_open = null;
		}
		else {	// switch navs;
			if (this.l2_open) this.setClosed(this.l2_open);
			this.setOpen(l2_li);
			this.positionL3(l2_li);
			this.l2_open = l2_li;
		}
	},
	
	// opens L3 nav;
	toggleL3Nav: function(l3_li) {
		if (l3_li.navOpen) {
			this.setClosed(l3_li);
			this.hideiFrame();
			this.l3_open = false;
		}
		else {
			if (this.l3_open) {
				this.setClosed(this.l3_open); 
				this.hideiFrame();
			}
			this.setOpen(l3_li);
			this.positionFlyout(l3_li);
			this.setiFrame(l3_li);
			this.l3_open = l3_li;			
		}
	},
	
	// set open/close;
	setOpen: function(li) {
		li.className += (li.className.length?' ':'') + 'selected';
		li.navOpen = true;
	},
		
	setClosed: function(li) {
		li.className = li.className.replace(' selected', '').replace('selected', '');
		li.navOpen = false;
	},
	
	absolutePosition: function(o) {
		return $(o).offset();
	},
	
	iFrame_null: function(li) {},
	
	setiFrame_ie6: function(li) {
	
		var flyout = li.getElementsByTagName('DIV')[0];
		if (!flyout || flyout.className!='flyout') return;
		this.iframe.parentNode.removeChild(this.iframe);
		li.appendChild(this.iframe);
		this.iframe.style.display='block';
		this.iframe.style.top ='16px';
		
		if (li.className.indexOf('first')>-1) this.iframe.style.left = '8px'; 
		else this.iframe.style.left = '0px';
		
		this.iframe.style.width = 131 + 'px';
		this.iframe.style.height = (flyout.offsetHeight - 10) + 'px';
	},

	hideiFrame: function() {
		if (this.iframe) this.iframe.style.display='none';
	}
}
/* --- preload images --- */

MPNav.preload('/assets/images/marketplaceNav/navtab2-left-selected.gif');
MPNav.preload('/assets/images/marketplaceNav/navtab2-right-selected.gif');
MPNav.preload('/assets/images/marketplaceNav/flyout-middle.png');
MPNav.preload('/assets/images/marketplaceNav/small-grey-bullet.gif');
MPNav.preload('/assets/images/marketplaceNav/flyout-bottom.png');
MPNav.preload('/assets/images/marketplaceNav/l3-arrow-background.gif');
MPNav.preload('/assets/images/marketplaceNav/nav-separator.gif');


$(document).ready(function() {MPNav.initialise();});

// ------------------------------------------------------------------------------------------------------------------------
// -- end of file 
// ------------------------------------------------------------------------------------------------------------------------


