
/*  Site/Navigation Sections
    ------------------------ */
function navSection(args){
	this.dropTrigger = document.getElementById(args.dropTrigger);
	this.triggerArea = this.dropTrigger.parentNode; 
	this.snavTriggerRegion = getElements('trigger_region', 'DIV', this.triggerArea)[0];
	this.snavTrigger = this.snavTriggerRegion.getElementsByTagName('A')[0];
	this.dropList = document.getElementById(args.dropList);
	this.snavListId = args.snavList;
	this.init();
}
navSection.prototype.openList = function(){
	this.dropTrigger.className = 'active';
	this.dropList.style.visibility = 'visible';
}
navSection.prototype.closeList = function(){
	this.dropList.style.visibility = 'hidden';
	this.dropTrigger.className = '';
}
navSection.prototype.init = function(){
	var end_cap = document.createElement("span");
	end_cap.className = "end_cap";
	end_cap.style.position = "absolute";
	end_cap.style.display = "block";
	this.dropList.appendChild(end_cap.cloneNode(false));
	var list_items = this.dropList.getElementsByTagName("LI");
	list_items[list_items.length - 1].className = "last";
}

/*  Navigation Controller
    --------------------- */
function dubaidirNav(){
	this.dropdownContainer = document.getElementById('primary_navigation_dropdowns');
	var travelingSec = new navSection({dropTrigger: 'traveling', dropList: 'traveling_dropdown', snavList: 'traveling_sec_navi'});
	var propertiesSec = new navSection({dropTrigger: 'properties', dropList: 'properties_dropdown', snavList: 'properties_sec_navi'});
	var entertainmentSec = new navSection({dropTrigger: 'entertainment', dropList: 'entertainment_dropdown', snavList: 'database_sec_navi'});
	this.sections = [travelingSec, propertiesSec, entertainmentSec];
	this.registerHandlers();
}
dubaidirNav.prototype.registerHandlers = function(){
	var controller = this;
	var openMethod = function(event){controller.openDropdown(event)};
	var closeMethod = function(event){controller.closeDropdown(event)};
	for(var i=0; i<this.sections.length; i++){
		if(window.addEventListener){
			this.sections[i].dropTrigger.addEventListener('mouseover', openMethod, false);
			this.sections[i].dropTrigger.addEventListener('mouseout', closeMethod, false);
			this.sections[i].dropList.addEventListener('mouseout', closeMethod, false);
		}
		if(window.attachEvent){
			this.sections[i].dropTrigger.attachEvent('onmouseover', openMethod);
			this.sections[i].dropTrigger.attachEvent('onmouseout', closeMethod);
			this.sections[i].dropList.attachEvent('onmouseout', closeMethod);
		}
	}
	if(window.addEventListener){
		window.addEventListener('unload', function(){
			for(var i=0; i<controller.sections.length; i++){
				controller.sections[i].dropTrigger.removeEventListener('mouseover', openMethod, false);
				controller.sections[i].dropTrigger.removeEventListener('mouseout', closeMethod, false);
				controller.sections[i].dropList.removeEventListener('mouseout', closeMethod, false);
			}
		}, false);
	}
}
dubaidirNav.prototype.openDropdown = function(event){
	if(this.snavOpen) return;
	this.dropdownContainer.style.display = 'block';
	var activeTrigger = event.srcElement || event.currentTarget;
	for(var i=0; i<this.sections.length; i++)
		this.sections[i].dropTrigger == activeTrigger ? this.activeSection = this.sections[i] : this.sections[i].closeList();
	this.activeSection.openList();
}
dubaidirNav.prototype.closeDropdown = function(event){
	if(this.snavOpen) return;
	var destinationElement = event.relatedTarget || event.toElement;
	if( isDescendant(this.dropdownContainer, destinationElement) ){
		this.activeSection.dropTrigger.className = 'open_inactive';
		return;
	}
	this.dropdownContainer.style.display = 'none';
	for(var i=0; i<this.sections.length; i++)
		this.sections[i].closeList();
	delete this.activeSection;
}
    
/*  Secondary Navigation: 'super nav'
		--------------------------------- */
dubaidirNav.prototype.setupSupernav = function(){
	var controller = this; 
	this.snavIframeEl = document.getElementById('supernav_html');
	this.snavIframeDoc = this.snavIframeEl.contentWindow.document || this.snavIframeEl.contentDocument;
	this.snavContainer = this.snavIframeDoc.getElementById('sec_clickdown_navi');
	this.snavCloseButton = this.snavIframeDoc.getElementById('close_supernav');
	this.snavCloseButton.onclick = function(){ controller.closeAllSupernavLists(); controller.closeSupernav()};
	for(var i=0; i<this.sections.length; i++){
		if(window.addEventListener) this.sections[i].snavTrigger.addEventListener('click', function(event){controller.switchSupernav(event)},false);
		if(window.attachEvent) this.sections[i].snavTrigger.attachEvent('onclick', function(event){controller.switchSupernav(event)});
		this.sections[i].snavTrigger.style.display = 'block';
	}
	this.snavIframeDoc.body.className = document.body.className;
	var snav_lists = this.snavContainer.getElementsByTagName('UL');
	for(var i=0; i<snav_lists.length; i++)
		if(snav_lists[i].className != "continuation")
			snav_lists[i].getElementsByTagName("li")[0].className = "category";
	this.secnavStart = document.createElement("SPAN");
	this.secnavEnd = this.snavIframeDoc.createElement("SPAN");
	this.secnavStart.id = "secnav_start";
	this.secnavEnd.id = "secnav_end";
	document.getElementById('page_wrapper').insertBefore(this.secnavStart,this.snavIframeEl);    
	this.snavIframeDoc.body.appendChild(this.secnavEnd);
}
dubaidirNav.prototype.switchSupernav = function(event){
	this.closeAllSupernavLists();
	if(!this.snavOpen) this.openSupernav();
	var activeTrigger = event.srcElement || event.currentTarget;
	var previousSection = this.activeSection;
	var openingSection;
	for(var i=0; i<this.sections.length; i++)
		if(this.sections[i].snavTrigger == activeTrigger)
			openingSection= this.sections[i];
	if(previousSection == openingSection){
		this.closeSupernav();
		return;
	}
	this.snavIframeDoc.getElementById(openingSection.snavListId).style.display = 'block';
	openingSection.snavTriggerRegion.className += ' active';
	this.activeSection = openingSection;
}
dubaidirNav.prototype.openSupernav = function(){
	var maxHeight = 141;
	this.snavIframeEl.style.height = maxHeight + 'px';
	this.snavContainer.style.display = 'block';
	this.secnavStart.style.display = 'block';
	this.snavOpen = true;
}
dubaidirNav.prototype.closeSupernav = function(event){
	this.snavIframeEl.style.height = '0';
	this.snavContainer.style.display = 'none';
	this.secnavStart.style.display = 'none';
	this.snavOpen = false;
	delete this.activeSection;
}
dubaidirNav.prototype.closeAllSupernavLists = function(){
	for(var i=0; i<this.sections.length; i++){
		this.snavIframeDoc.getElementById(this.sections[i].snavListId).style.display = 'none';
		this.sections[i].snavTriggerRegion.className = this.sections[i].snavTriggerRegion.className.replace('active', '');
	}
}
    
/*  Instantiation
    ------------- */
var nav = new dubaidirNav();
setTimeout( function(){
	if(snavLoaded){
		nav.setupSupernav();
	}else{
		if(window.addEventListener) window.addEventListener('load', function(){nav.setupSupernav()}, false);
		if(window.attachEvent) window.attachEvent('onload', function(){nav.setupSupernav()});
	}
}, 1000);
