var nav = {
	
	obj : null,
	
	
	init : function(list_id) {
		
		// build global nav object
		this.obj = global.construct(list_id);
		
		// build initial background images
		this.background( gallery.obj.parents );
		
		// assign event handlers to menus
		this.divvyMenus();
		
		// create sections labels
		this.setLabels();
	},
	
	
	background : function(obj) {
		var lists = global.innerOBJ( obj, true );
		for (a=0; a < lists.length; a++) {
			
			var name = lists[a];
			var list = obj[lists[a]];
			
			var items = global.innerOBJ( list, true );
			for (b=0; b < items.length; b++) {
				
				var item = list[items[b]]['element'];
				var src = 'url(' + this.obj.parents[lists[a]][items[b]]['src'] + ')';
				
					item.setStyle('background-image', src);
			}
			
		}
	},
	
	
	load : function(path) {
		var split_path = path.split('thumb');
		var new_path = split_path[0] + 'full' + split_path[1];
		
			return new_path;
	},
	
	
	divvyMenus : function() {
		var menus = global.innerOBJ( this.obj.parents, true);
		var selected = global.innerOBJ ( gallery.obj.parents, true);
		
			selected.each( function(selectee) {
					menus.remove(selectee);
			});
		
			this.assignHandler(selected, true);
			this.assignHandler(menus);
	},
	
	
	assignHandler : function(menus, selected) {
		var gParents = [];
		
		menus.each( function(menu) {
				var parentOBJ = nav.obj.parents[menu];
				var gParent = parentOBJ.element.getParent();
				var children = global.innerOBJ( parentOBJ, true );
				
				/*******************************
				** <li> OnClick && OnMouseOut **
				*******************************/
				if (gParents.contains(gParent) == false) {
					gParent.addEvent('click', function() {
							nav.animSubMenu(parentOBJ);
					});
					
					gParent.addEvent('mouseleave', function() {
							nav.animSubMenu(parentOBJ, 'collapse');
					});
					
					// this prevents duping an <li> if 
					// more than one nested <ul> share it
					gParents.push(gParent);
				}
				
				else {
					nav.multipleParents(gParent, parentOBJ);
				}
					
				
				/****************************
				** <li><ul><li><a> OnClick **
				*****************************/
				children.each( function(child) {
						var item = parentOBJ[child]['element'];
						var anch = item.getFirst();
						
						if (!selected) {
							var unselectedURL = [gParent.className + '/'];
							
							if (menu != 'colorizer') {
								unselectedURL.push( '?parent=' + menu );
								unselectedURL.push( '&child=' + child );
							}
							
							else {
								unselectedURL.push( '?parent=' + child );
							}
							
								child = global.substitute( unselectedURL );
								child = global.site + child;
									
								anch.setAttribute('href', child);
						}
						
						else {
							anch.addEvent('click', function() {
									nav.clickChild(child);
							});
						}
				});
		});
	},
	
	
	animSubMenu : function(menu, state) {
		var slideFx = new Fx.Style(menu.element, 'height', {
					duration: 500,
					transition: Fx.Transitions.Expo.easeOut,
					wait: false
		});
		
		var labels = $('page_nav_labels');		
		var fadeFx = new Fx.Style(labels, 'opacity', {
				duration: 325,
				wait: false
		});
		
		var size = menu.element.getSize().size.y;
		
		if (!state) {
			if (size == 0) {
				(window.ie) ? labels.style.visibility = "hidden" : fadeFx.start(0);				
				slideFx.start(menu.height);
			}
			
			if (size == menu.height) {
				slideFx.start(0);
				(window.ie) ? labels.style.visibility = "visible" : fadeFx.start(1);
			}
		}
		
		else {
			if (state == 'collapse') {
				if (size > 1 && size <= menu.height) {
					slideFx.start(0);
					(window.ie) ? labels.style.visibility = "visible" : fadeFx.start(1);
				}
			}
		}
	},
	
	
	clickChild : function(label) {
		if ( global.innerOBJ( this.obj.parents, true).contains(label) ) {
			global.parent = label;
			global.newParent(true);
			colors.highlight();
		}
		
		else {
			global.child = label;
			global.moveChild('current');
		}
	},
	
	
	setLabels : function() {
		var gParents = global.build( $('page_nav_list') );
		var list = new Element('ul', {
				'id' : 'page_nav_labels',
				'class' : 'autoclear'
		});		
		
		gParents.each( function(item) {
			var name = item.getAttribute('name');
			var size = item.getSize().size.x;
			
			var li = new Element('li').setStyle('width', size).addClass('label ' + item.className);
			var para = new Element('p').setStyle('width', size).setText(name);
				
				para.injectInside(li);			
				li.injectInside(list);
		});
		
		list.injectTop( $('page_nav') );
	},
	
	
	multipleParents : function(gParent, obj) {
		
		var list = new Element('ul', {
				'styles' : {
					'height' : 'auto',
					'visibility' : 'hidden'
				}
		});
		
		var parents = global.build( gParent );
		parents.each( function(parent) {
			
			var item = new Element('li', {
					'class' : parent.className,
					'name' : parent.className
			});
			
			var anch = new Element('a', {
					'class' : 'make-tip-multiple',
					'title' : parent.className,
					'href' : '#'
			});
			
			var image = parent.getElement('img');
			
					image.injectInside(anch);
					anch.injectInside(item);
					item.injectInside(list);
					
					image.removeClass('invisible');
					parent.addClass('invisible');
		});
		
		list.injectTop(gParent);
		
		list.setAttribute('name', list.getSize().size.y);
		list.removeAttribute('style');
	}
};

