
function findRootWindow(_win){	
	//Get the parent window
	var _parentWindow = findParentWindow(_win);	
	if(parentWindow == undefined){parentWindow = _parentWindow;}

	var parentWindowAccessErrors = false;
	try{
		parentWindowAccessErrors = (_parentWindow.content.location == null || parentWindow.content.location == null || _parentWindow.header.location == null || parentWindow.header.location == null);
	}catch(e){
		parentWindowAccessErrors = true;
	}
	
	try{
		if(!parentWindowAccessErrors){
			//This is the root window if the it is the windowPage for the top navigation section
			if(_parentWindow.content.location.pathname.indexOf(topNavigationSection.windowPage.link) > -1){return _parentWindow.header;}

			//Use the rootWindow already defined if is still available
			if(rootWindow != undefined){
				if(rootWindow.closed == false){
					if(_win == window){return rootWindow;}		
				}
			}
		
			if(parentWindow.content.location.href.indexOf('admin') > -1){
				return parentWindow.header;		
			}
		}

		if(parentWindow.opener == null || parentWindow.opener == undefined || parentWindow.opener.closed == true){						
			if(topNavigationSection.setting == 'multiple' && navigatingTo.indexOf(topNavigationSection.windowPage.link) == -1 && navigatingTo.indexOf('admin') == -1){
				window.open('/contentManaged/windowModeChange/closeWebsite.aspx');
				
				//Terminate all window references
				for(var i = 0; i < windowPageMappings.length; i++){
					//Only de-reference windows that are not this one
					if(windowPageMappings[i].windowRef != _parentWindow){windowPageMappings[i].windowRef = undefined;}
				}			
			}
			
			if(_parentWindow.header == undefined){
				return _parentWindow;
			}else{
				return _parentWindow.header;}
		}else if(_parentWindow.opener.location.hostname != this.document.location.hostname){
			return _parentWindow.header;		
		}else{
			//Determine the location of the navigation page for the parent window
			var openerParentWindow = findParentWindow(_parentWindow.opener);
				
			//Request that the parent window find the root window
			var root = findRootWindow(openerParentWindow);
		
			return root;	
		}
	}catch(e){
		if(_parentWindow.header == undefined){
			return _parentWindow;
		}else{
			return _parentWindow.header;}
	}
}


function findParentWindow(_win){
	if(_win.parent != null){
		if( (_win.parent.document.getElementById('content') != null && _win.parent.document.getElementById('header') != null) || (window == window.top) ){
			return _win.parent;
		}else{
			var parentWindow = findParentWindow(window.parent);
			return parentWindow;}	
	}else if(_win.document.getElementById('content') != null && _win.document.getElementById('header') != null){
		return _win;
	}else{
		alert('Unable to find the parent window for this window:' + _win.name);		
		return null;
	}
}
		

function syncRootWindow(syncIndex){
	if(rootWindow == window){
		return;
	}else{		
		rootWindow.windowPageMappings[syncIndex].windowRef = windowPageMappings[syncIndex].windowRef;	
	}
}


function isRootMappedPage(pagePathName){
	for(var i = 0; i < windowPageMappings.length; i++){
		if(pagePathName.indexOf(windowPageMappings[i].link) > -1 && windowPageMappings[i].isRoot){return true;}
	}
	
	return false;
}


