var navigation = Class.create();

navigation.prototype = {
	navLists   	 	: [],
	allLists   	 	: [],
	allSupNavs 	 	: [],
	navMouseObserve : [],
	settimeout 		: '',
	
	initialize : function(options) {
		this.options = Object.extend({
			navId : 'nav'				 
		}, options || {});
		
		this._getLists();
		this._setRollUp();
		this._setRollDown();
	},
	
	//get the list of li used to make navigation
	_getLists : function() {
		this.navLists = $$('div[id="' + this.options.navId + '"] ul li[title]');
		this.allLists = $$('div[id="' + this.options.navId + '"] ul li');
	},
	
	//setting up rolloever if list does not have title
	_setRollUp : function() {
		this.allLists.each(function(li) {
			if(li.title == '' || $(li.title) === null) {
				var ul  = li.parentNode;
				var div = ul.parentNode;
			
				//mouse over
				li.observe('mouseover', function(){
					this.navMouseObserve['div'] = 'mouseover';
					
					if(div.id == this.options.navId) {
						this.navLists.each(function (li) {
							var div = $(li.title);

							if(div !== null && div.visible() === true) {
								this._blindUp(div);
							}
						}.bind(this));
					}
					else {
						$$('div[id="' + div.id + '"] ul li[title]').each(function (li) {
							var div = $(li.title);
							
							if(div !== null && div.visible() === true) {
								this._blindUp(div);
							}
						}.bind(this));
					}
					
					clearTimeout (this.settimeout);
					this.settimeout = setTimeout(this._validateTierRollOver.bind(this), 3000);					
				}.bind(this));
			}
		}.bind(this));
	},
	
	//setting up roll down if list title exists
	_setRollDown : function(stopObserving) {
		this.navLists.each(function(li) {
									
			if(stopObserving != li){
				var children = li.childNodes;
				var div = $(li.title);
				
				if(div !== null) {
					if(li.parentNode.parentNode.id != this.options.navId) {
						li.setStyle({'background' : 'url(/img/nav_arrows.png) 205px 14px no-repeat'});
					}
					
					//mouse over
					li.observe('mouseover', function(){
						//this._setStyle(li);
						var div = $(li.title);
						
						//detect mouse over
						this.navMouseObserve[div.id] = 'mouseover';
						
						//rollup all drop downs that are not in tier and exist that exist
						this._rollUpTier(div.id);
						
						if(div.visible() === false) {
							this._blindDown(div);
						}
						
						clearTimeout (this.settimeout);
						this.settimeout = setTimeout(this._validateTierRollOver.bind(this), 3000);
					}.bind(this));
					
					//mouseout
					li.observe('mouseout', function(){
						this.navMouseObserve[div.id] = 'mouseout';
						
						this._rollUpTier(div.id);
						
						clearTimeout (this.settimeout);
						this.settimeout = setTimeout(this._validateTierRollOver.bind(this), 3000);
					}.bind(this));
					
					for(var i = 0; i < children.length; i++) {
						if(children[i] !== undefined) {
							Event.observe(children[i], 'mouseover', function() {
								var div = $(li.title);
								this.navMouseObserve[div.id] = 'mouseover';
							
								if(div.visible() === false) {
									this._blindDown(div);
								}								
								
								clearTimeout (this.settimeout);
								this.settimeout = setTimeout(this._validateTierRollOver.bind(this), 3000);
							}.bind(this));
							
							Event.observe(children[i], 'mouseout', function() {
								this.navMouseObserve[div.id] = 'mouseout';
								
								clearTimeout (this.settimeout);
								this.settimeout = setTimeout(this._validateTierRollOver.bind(this), 3000);
							}.bind(this));
						}
					}
					
					this._setStyle(li);
				}
			}
		}.bind(this));
		
	},
	
	
	_rollUpTier : function(current_div) {
		this.navLists.each(function(list) {
			var div_ob = $(list.title);
			var li_list = $$('div[id="' + div_ob.id + '"] ul li[title]');
			
			if(div_ob.id != current_div) {	
				var is_in_tier = false;
			
				li_list.each(function(lis) {
					if(lis.title == current_div) {
						is_in_tier = true;
					}
					
				}.bind(this));
				
				
				//only hide drop down if dropdown is not in tier
				if(is_in_tier === false && div_ob.visible() === true) {
					this._blindUp(div_ob);
				}
				
			}
		}.bind(this));
	},
	
	
	_validateTierRollOver : function() {
		var hide_div = true;
		var counter  = 0;
		var total	 = 0;
		
		//if all navs are rolled off then hide all remaining navs
		this.navLists.each(function(li) {
			var div = $(li.title);
			//alert(div.id+' : '+div.visible()+' : '+this.navMouseObserve[div.id]);
			if(div !== null && this.navMouseObserve[div.id] !== undefined && div.visible() === true && this.navMouseObserve[div.id] == 'mouseover') {
				hide_div = false;				
			}
			
			if(div.visible() === true) {
				total++;
				if(this.navMouseObserve[div.id] == 'mouseout') {
					counter++;
				}
			}
			
			
		}.bind(this));
	
		//if still on a nav dont hide all navs
		if(this.navMouseObserve['div'] != 'mouseout') {
			hide_div = false;
		}
		
		if(counter == total && this.navMouseObserve['div'] != 'mouseover') {
			this._hideAllNavs();
		}
		
		if(hide_div === true) {			
			this._hideAllNavs();	
		}
	},
	
	_hideAllNavs : function() {
		this.navLists.each(function(li) {
			var div = $(li.title);
			
			if(div !== null && div.visible() === true) {
					
				this._blindUp(div);
				
				//resettting rollup down
				//this._setRollDown();
				setTimeout(this._setRollDown.bind(this), 1200);
			}
		}.bind(this));
	},
	
	
	_blindUp : function(div) {
		if(div.visible() === true) {
			Effect.BlindUp(div, { duration: 1});
			this.navMouseObserve[div.id] = 'mouseout';
		}
	},
	
	
	_blindDown : function(div) {
		if(div.visible() === false) {
			Effect.BlindDown(div, { duration: 1});
			this.navMouseObserve[div.id] = 'mouseover';
		}
	},
	
	
	_setStyle : function(li) {
		var nav_div	= $(li.title);
		
		if(nav_div !== null) {
			nav_div.setStyle({'display' : 'none'});
			
			var div_ul 	   = nav_div.getElementsByTagName('ul')[0];
			var div_li	   = $$('li[title="' + li.title +'"]')[0];
			var dimensions = div_li.cumulativeOffset();
			var isFirstNav = (li.parentNode.parentNode.id == this.options.navId ? true : false);
			
			//create nav background divs
			var div_nav_top    = new Element('div', { 'class': 'nav_top'});
			var div_nav_bg 	   = new Element('div', { 'class': 'nav_bg'});
			var div_nav_bottom = new Element('div', { 'class': 'nav_bottom'});
			
			//creating new content for dropdown
			nav_div.innerHTML = '';
			nav_div.insert(div_nav_top);
			nav_div.insert(div_nav_bg);
			div_nav_bg.insert(div_ul);
			div_nav_bg.insert(new Element('div').setStyle({'clear' : 'both'}));
			nav_div.insert(div_nav_bottom);
			
			//creating obervation for div
			nav_div.observe('mouseover', function(){
				this.navMouseObserve['div'] = 'mouseover';
				
				clearTimeout (this.settimeout);
				this.settimeout = setTimeout(this._validateTierRollOver.bind(this), 3000);
			}.bind(this));
			
			//mouse out
			nav_div.observe('mouseout', function(){
				this.navMouseObserve['div'] = 'mouseout';
				
				clearTimeout (this.settimeout);
				this.settimeout = setTimeout(this._validateTierRollOver.bind(this), 3000);
			}.bind(this));
			
			
			//creating style for dropdown
			nav_div.setStyle({
				clear	   : 'left',
				position   : 'absolute',
				left       : (isFirstNav === true ? dimensions.left : '230') + 'px',
				top        : (isFirstNav === true ? dimensions.top + 50 : this._calculateTop(nav_div)) + 'px'
			});
			
			if(isFirstNav !== true) {		
				div_li.insert(nav_div);
			}
			
			div_ul.setStyle({
				position : 'relative',
				left	 : '-15px',
				width	 : '236px',
				padding	 : '10px 0 5px 0',
				margin	 : '0'
			});
			
			var ul_li = nav_div.getElementsByTagName('li');
			var num   = nav_div.getElementsByTagName('li').length;
			
			for(var i = 0;i < num; i++) {
				ul_li[i].setStyle({
					clear	  : 'left',
					margin	  : '0',
					padding   : '17px 0 17px 20px',
					width	  : '216px',
					minHeight : 0,
					height	  : '15px'
				});
			}
		}
	},
	
	
	_calculateTop : function(div) {
		var hgt	  = 49; //height of li
		var title = div.id;
		var li 	  = $$('li[title="' + title + '"]')[0];
		var ul	  = li.parentNode;
		var list  = ul.getElementsByTagName('li');
		var count = 0;
		var index = 0;
		
		for(var i = 0; i < list.length; i++) {
			var list_li = list[i].getElementsByTagName('li');
			count -= (list_li.length);
			
			if(li == list[i]) {
				index = count;
			}
			
			count++;
		}
		
		return (index * hgt);
	}
	
}