﻿// RTIMenu
//
// Properties:
//  name                - the name of the variable that holds the instance of this object.
//  activeTab           - the first tab to display.
//  contentPanelId      - id of the html object where the content is rendered.
//  mode                - the original mode of operation when the page was launched.
//  arBeacons           - array of beacon devices.
//  arCameras           - array of camera devices.
//  arRadios            - array of radio devices.
//  arSensors           - array of sensor devices.
//  arSigns             - array of sign devices.
//  arMenuOptionIds     - array of ids of the <li> menu tags that bound the menu hyperlinks. Should be 4.
//  arMenuLinkIds       - array of ids of the <hyperlink> menu tags. Should be the same number of links as options.
//  arTabPanelIds       - array of ids of the <div> tags that contain menu-specific content. Should be the same number of panels as options.
//  sourceIP            - the IP address to be used for a remote request from RTI_NavLink.
//  sourcePort          - the Port to be used for a remote request from RTI_NavLink.
//
function RTIMenu(name, activeTab, contentPanelId, mode, arBeacons, arCameras, arRadios, arSensors, arSigns, arMenuOptionIds, arMenuLinkIds, arTabPanelIds, sourceIP, sourcePort) {
    // Private Properties
    this.contentPanel = null;
    this.linka = '<div class="navitem"><a href="javascript:void(0)" title=';
    this.linkf = 'onClick="displayDivPopup(1,';
    this.linkg = ",'popup',";
    this.linkg2 = ",event,'vePopup','popupTitle',";
    this.linkg3 = ");";
    this.linkh = '">';
    this.menuMapIndex = 0;
    this.menuOverviewIndex = 1;
    this.menuConfigIndex = 2;
    this.menuControlIndex = 3;
    this.mode = mode;
    this.name = name;
    // Public Properties
    this.ActiveTab = activeTab;
    this.ContentPanelId = contentPanelId;
    this.MenuOptionIds = arMenuOptionIds;
    this.MenuLinkIds = arMenuLinkIds;
    this.ModeOfControl = '';
    this.SourceIP = sourceIP;
    this.SourcePort = sourcePort;
    this.TabPanelIds = arTabPanelIds;
    // Device Collections
    this.Beacons = arBeacons;
    this.Cameras = arCameras;
    this.Radios = arRadios;
    this.Sensors = arSensors;
    this.Signs = arSigns;
    // Methods
    this.AddPopRef = RTIMenu_AddPopRef;
    this.ConfigureTabMenu = RTIMenu_ConfigureTabMenu;
    this.NavLink = RTIMenu_NavLink;
    this.SetActiveTab = RTIMenu_SetActiveTab;
    this.SetupMenu = RTIMenu_SetupMenu;
}

function RTIMenu_AddPopRef(name,link,devtype,popwidth,popheight,title,titleBar) {
	switch (devtype) {
		case 'S':
			var a = this.linka+"'"+title+"' "+this.linkf+"'"+link+"'"+this.linkg+popheight+","+popwidth+this.linkg2+"'"+titleBar+"'"+this.linkg3+this.linkh+name+'</a><br></div>'
			break;
		case 'R':
			var a = this.linka+"'"+title+"' "+this.linkf+"'"+link+"'"+this.linkg+popheight+","+popwidth+this.linkg2+"'"+titleBar+"'"+this.linkg3+this.linkh+name+'</a><br></div>'
			break;
		case 'B':
			var a = this.linka+"'"+title+"' "+this.linkf+"'"+link+"'"+this.linkg+popheight+","+popwidth+this.linkg2+"'"+titleBar+"'"+this.linkg3+this.linkh+name+'</a><br></div>'
			break;
		case 'C':
			var a = this.linka+"'"+title+"' "+this.linkf+"'"+link+"'"+this.linkg+popheight+","+popwidth+this.linkg2+"'"+titleBar+"'"+this.linkg3+this.linkh+name+'</a><br></div>'
			break;
		}//switch	
	return a;
}

function RTIMenu_ConfigureTabMenu(controlMode) {
    var configTab = null;
    var controlTab = null;
    var overviewTab = null;
    if ( controlMode == 'privateView' || controlMode == 'privateControl' ) {
        overviewTab = document.getElementById(this.MenuOptionIds[this.menuOverviewIndex]);
        if ( overviewTab != null ) 
            (document.layers) ? overviewTab.visibility = 'visible' : overviewTab.style.visibility = 'visible';
        configTab = document.getElementById(this.MenuOptionIds[this.menuConfigIndex]);
        if ( configTab != null ) 
            (document.layers) ? configTab.visibility = 'visible' : configTab.style.visibility = 'visible';
        if ( controlMode == 'privateControl' ) {
            controlTab = document.getElementById(this.MenuOptionIds[this.menuControlIndex]);
            if ( controlTab != null )
                (document.layers) ? controlTab.visibility = 'visible' : controlTab.style.visibility = 'visible';
        }
    }
}

function RTIMenu_NavLink(src,thisSite,iframe) {
	if (thisSite==true) {
		var flink=location.protocol+"//"+location.host+location.pathname.replace(thisDocName,src);
		document.getElementById(iframe).src=flink;
	}
	else {
		document.getElementById(iframe).src=location.protocol+"//"+this.SourceIP+":"+this.SourcePort+src;
	}
}

function RTIMenu_SetActiveTab(tab) {

    var modeOfControl;
    var visibleElement;
    var tabElement;

    if (this.contentPanel == null ) {
        this.contentPanel = document.getElementById(this.ContentPanelId);
        if ( this.contentPanel != null ) 
            this.contentPanel = (document.layers) ? this.contentPanel : this.contentPanel.style;
    }
    // Hide the active tab's content
    visibleElement = document.getElementById(this.TabPanelIds[this.ActiveTab]);
    if ( visibleElement != null ) {
        (document.layers) ? visibleElement.visibility = 'hidden' : visibleElement.style.visibility = 'hidden';
    }
    // Clear the active tab's css className
    tabElement = document.getElementById(this.MenuLinkIds[this.ActiveTab]);
    if ( tabElement != null )
        tabElement.className = '';

    // Adjust the height of the content and set new mode of control
	switch( tab )
	{
        case 1:
            if(navigator.appName == "Microsoft Internet Explorer")
                this.contentPanel.height = 1040;
            else
                this.contentPanel.height = 1062;
            this.ModeOfControl = '';
            break;
	    case 2:
            if(navigator.appName == "Microsoft Internet Explorer")
                this.contentPanel.height = 1330;
            else
                this.contentPanel.height = 1352;
            this.ModeOfControl = 'privateView';
            break;
        case 3:
            if(navigator.appName == "Microsoft Internet Explorer")
                this.contentPanel.height = 1330;
            else
                this.contentPanel.height = 1352;
            this.ModeOfControl = 'privateControl';
            break;
        default:
            if(navigator.appName == "Microsoft Internet Explorer")
                this.contentPanel.height = 1042;
            else
                this.contentPanel.height = 1043;
            this.ModeOfControl = '';
            break;    
	}
    // Show the requested tab's content
    visibleElement = document.getElementById(this.TabPanelIds[tab]);
    if ( visibleElement != null ) {
        (document.layers) ? visibleElement.visibility = 'visible' : visibleElement.style.visibility = 'visible';
    }
    // Set the current tab's css className.
    tabElement = document.getElementById(this.MenuLinkIds[tab]);
    if ( tabElement != null )
        tabElement.className = 'current';
    // Set the active tab
    this.ActiveTab = tab;
    // Display the appropriate menu
    this.SetupMenu(this.ModeOfControl);
	return false;
}

function RTIMenu_SetupMenu(controlMode) {
	var txt="";
	var g="'google'";
	var ms="'MS'";
	var r="'road'";
	var ae="'aerial'";

    if ( this.mode == 'privateControl' )
    	txt+='<div class="navitem"><a href="javascript:enumerate();" title="Show current values of all devices">Device Values</a><br></div>'
	txt+='<div class="navitem"><a href="javascript:Refresh_onclick();" title="Refresh values of all devices">Refresh Values</a><br></div>'
	txt+='<div class="navitem"><a href="javascript:switchMaps(' + g + ');" title="Use Google Map">Google Map</a><br></div>'
	txt+='<div class="navitem"><a href="javascript:switchMaps(' + ms + ');" title="Use Microsoft Virtual Earth">Virtual Earth Map</a><br></div>'
	txt+='<div class="navitem"><a href="javascript:MapView('+r+');" title="Road map view">Road View</a></div>'
	txt+='<div class="navitem"><a href="javascript:MapView('+ae+');" title="Aerial map view">Aerial View</a></div>'
	display.innerHTML = txt;

	txt="";
	txt+='<div class="navitem"><a href="javascript:home();" title="Return to starting viewpoint">Home</a></div>'
	txt+='<div class="navitem"><a href="javascript:ToggleInMap();" title="Hide/Display the inset locator map.">Toggle Locator</a></div>'
	txt+='<div class="navitem"><a href="http://www.trafalert.net/ema?PID=WWB">Get Traffic Alerts</a></div>'
	navigation.innerHTML = txt;
	
	txt="";
	if (this.Sensors.length>0) {
		//do map legend for rt conditions
  		txt+='<div class="navgroup"><h5>Map Legend:</h5></div><div id="maplegend"></div>'
  		txt+='<div class="navItem">Normal&nbsp;&nbsp; <img border="0" src="images/greenline.gif" width="40" height="7">&nbsp;&nbsp;&nbsp;&nbsp;</div>'			
		txt+='<div class="navItem">Slowing&nbsp;&nbsp; <img border="0" src="images/yellowline.gif" width="40" height="7">&nbsp;&nbsp;&nbsp;&nbsp;</div>'
		txt+='<div class="navItem">Stopped&nbsp;&nbsp; <img border="0" src="images/redline.gif" width="40" height="7">&nbsp;&nbsp;&nbsp;&nbsp;</div>'
	}
	maplegend.innerHTML=txt;
	
	var txt="";
	if (this.Signs.length > 0 || this.Radios.length > 0 || this.Beacons.length > 0) {
		txt+='<div><h5>Messages:</h5>' 
		if (this.Signs.length > 0) {
			txt+='<div class="navgroup"><h5>Signs:</h5></div><div id="signs"></div>'
		}
		if (this.Radios.length > 0) {
			txt+='<div class="navgroup"><h5>Radios:</h5></div><div id="radios"></div>'
		}
		if (this.Beacons.length > 0) {
			txt+='<div class="navgroup"><h5>Beacons:</h5></div><div id="beacons"></div>'
		}
		if (this.Cameras.length > 0) {
			txt+='<div class="navgroup"><h5>Cameras:</h5></div><div id="cameras"></div>'
		}
		messagelinks.innerHTML=txt
	}
	
	if (this.Signs.length > 0) {
		txt = "";
		for(var i=1; i < this.Signs.length; i++) {
			txt += this.AddPopRef(this.Signs[i].description,this.Signs[i].link,'S',this.Signs[i].popwidth,this.Signs[i].popheight,this.Signs[i].description,this.Signs[i].location);
		}
		signs.innerHTML = txt;
	}
	if (this.Radios.length > 0) {
		txt = "";
		for(var i=1; i < this.Radios.length; i++) {
			txt += this.AddPopRef(this.Radios[i].description,this.Radios[i].link,'R',this.Radios[i].popwidth,this.Radios[i].popheight,this.Radios[i].description,this.Radios[i].location);
		}
		radios.innerHTML = txt;
	}
	if (this.Beacons.length > 0) {
		txt = "";
		for(var i=1; i < this.Beacons.length; i++) {
			txt += this.AddPopRef(this.Beacons[i].description,this.Beacons[i].link,'R',this.Beacons[i].popwidth,this.Beacons[i].popheight,this.Beacons[i].description,this.Beacons[i].location);
		}
		beacons.innerHTML = txt;
	}
	if (this.Cameras.length > 0) {
		txt = "";
		for(var i=1; i < this.Cameras.length; i++) {
			txt += this.AddPopRef(this.Cameras[i].description,this.Cameras[i].link,'R',this.Cameras[i].popwidth,this.Cameras[i].popheight,this.Cameras[i].description,this.Cameras[i].location);
		}
		cameras.innerHTML = txt;
	}
	
	//overview
	txt="";
	//initialize iframe ids and div tag objects
    var notice;
	var overview;
	var schedules;
	var configheader;
	var signconfig;
	var radioconfig;
	var beaconconfig;
	var cameraconfig;
	var sensorconfig;
	var framelnk="'/'"
	var iframe="'taframeOverview'";
	if (controlMode=='privateView') {
	    iframe="'taframeConfig'";
	    overview = document.getElementById('overviewConfig');
	    schedules = document.getElementById('schedulesConfig');
	    configheader = document.getElementById('configheaderConfig');
	    signconfig = document.getElementById('signConfig');
	    radioconfig = document.getElementById('radioConfig');
	    beaconconfig = document.getElementById('beaconConfig');
	    cameraconfig = document.getElementById('cameraConfig');
	    sensorconfig = document.getElementById('sensorConfig');
	    notice = document.getElementById('noticeConfig');
	}
	else
	{
	    if (controlMode=='privateControl') {
	        iframe="'taframeControl'";
    	    overview = document.getElementById('overviewControl');
    	    schedules = document.getElementById('schedulesControl');
    	    configheader = document.getElementById('configheaderControl');
    	    signconfig = document.getElementById('signControl');
	        radioconfig = document.getElementById('radioControl');
	        beaconconfig = document.getElementById('beaconControl');
    	    cameraconfig = document.getElementById('cameraControl');
	        sensorconfig = document.getElementById('sensorControl');
	        notice = document.getElementById('noticeControl');
	    }
	    else {
    	    if ( this.ActiveTab > 0 ) {
                notice = document.getElementById('noticeOverview');
    	        overview = document.getElementById('overviewOverview');
    	    } else {
    	        notice = document.getElementById('noticeMap');
    	    }
	    }
	}
    
	if (controlMode=="privateView" || controlMode=="privateControl") {
		framelnk="'/Details',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Current Device Information">Device Status</a><br></div>'
		framelnk="'/ConfigSet_T0V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Highway route definitions">Routes</a><br></div>'
		framelnk="'/Sequences',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View contents of sign message library">Sequences</a><br></div>'
		framelnk="'/GPSDetails',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View device GPS and location details">GPS Details</a><br></div>'
		if (this.Sensors.length>0) {framelnk="'CurrentRadar.htm',true,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View traffic condition data details">Traffic Data</a><br></div>'}
		//in private view we need to also include schedule view
		if (controlMode=="privateView") {
			txt+='<div class="navgroup"><h5>Schedules:</h5></div>';
			if (this.Signs.length > 0) {
				framelnk="'/AESchedule_SV',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View Schedules for Signs">Sign</a><br></div>'
			}
			if (this.Radios.length > 0) {
				framelnk="'/AESchedule_RV',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View Schedules for Radios">Radios</a><br></div>'
			}
			if (this.Beacons.length > 0) {
				framelnk="'/AESchedule_BV',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View Schedules for Beacons">Beacons</a><br></div>'
			}
		}
	} else if ( this.ActiveTab == 1 ) {
		framelnk="'CurrentStatus.htm',true,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Current Device Information">Device Status</a><br></div>'
		if (this.Cameras.length > 0) {framelnk="'Cameras.htm',true,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Camera images">Cameras</a><br></div>'}
		framelnk="'CurrentSequences.htm',true,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View contents of sign message library">Sequences</a><br></div>'
		if (this.Sensors.length > 0) {framelnk="'CurrentRadar.htm',true,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View traffic condition data details">Traffic Data</a><br></div>'}
	}
	if ( this.ActiveTab > 0 ) overview.innerHTML=txt;

	//control
	if (controlMode=="privateControl") {
		if (this.Signs.length > 0 || this.Radios.length > 0 || this.Beacons.length > 0) {
			txt='<div><h5>Control:</h5>'
			framelnk="'/Override',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Activate a message for a set time period">Activate a message</a><br></div>'
			framelnk="'/ScenOverride',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Activate a set of scenario-based message(s) for a set time period">Activate scenario</a><br></div>'
			if (this.Signs.length > 0) {
				txt+='<div class="navgroup"><h5>Signs:</h5></div>'
				framelnk="'/AESignMessage',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Add a new or edit an existing sign message">Add/Edit message</a><br></div>'
				framelnk="'/AESchedule_S',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Add a new or edit an existing sign schedule">Add/Edit schedule</a><br></div>'
				framelnk="'/SchedAssignments_S',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Make or change sign schedule assignment(s)">Assign schedule(s)</a><br></div>'			
			}
			if (this.Radios.length > 0) {
				txt+='<div class="navgroup"><h5>Radios:</h5></div>'
				framelnk="'/AESchedule_R',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Add a new or edit an existing radio schedule">Add/Edit schedule</a><br></div>'
				framelnk="'/SchedAssignments_R',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Make or change radio schedule assignment(s)">Assign schedule(s)</a><br></div>'			
			}
			if (this.Beacons.length > 0) {
				txt+='<div class="navgroup"><h5>Beacons:</h5></div>'
				framelnk="'/AESchedule_B',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Add a new or edit an existing beacon schedule">Add/Edit schedule</a><br></div>'
				framelnk="'/SchedAssignments_B',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Make or change beacon schedule assignment(s)">Assign schedule(s)</a><br></div>'			
			}			
			txt+='<div class="navgroup"><h5>IVR:</h5></div>'
			txt+='<div class="navitem"><a href="http://68.81.40.123:8001/TrafAlertIvr/Admin/SupplementalInfo.aspx">Create Traffic Advisory</a></div>'
			txt+='<div class="navgroup"><h5>Email Alerts:</h5></div>'
			txt+='<div class="navitem"><a href="http://www.trafalert.net/EMA/AdminLogin.asp?PID=WWB">Create Traffic Alert</a></div>'
			control.innerHTML=txt;

			txt='<div class="navgroup"><h5>Schedules:</h5></div>'
			if (this.Signs.length > 0) {
				framelnk="'/AESchedule_SV',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View Schedules for Signs">Sign</a><br></div>'
			}
			if (this.Radios.length > 0) {
				framelnk="'/AESchedule_RV',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View Schedules for Radios">Radios</a><br></div>'
			}
			if (this.Beacons.length > 0) {
				framelnk="'/AESchedule_BV',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="View Schedules for Beacons">Beacons</a><br></div>'
			}
			schedules.innerHTML=txt;
		}
	}		
		
	if (controlMode=="privateView"||controlMode=="privateControl") {	    
		if ( document.layers ) 
		    configheader.display = 'block';
		else
		    configheader.style.display = 'block';
		txt = "";
		if (this.Signs.length > 0) {
			txt+='<div class="navgroup"><h5>Signs:</h5></div><div id="cfgsigns"></div>'
			framelnk="'/ConfigSet_S1V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Name,Type,Mile Marker,Lat,Lng,Highway">General</a><br></div>'
			framelnk="'/ConfigSet_S2V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Access Method,Comm Addr,Comm Port,Comm ID,Password">Access</a><br></div>'	
			if (this.Sensors.length > 0) {
				framelnk="'/ConfigSet_S3V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Primary and Alternate Control Sources, Dynamic Messaging Control">Control</a><br></div>'
			}
			framelnk="'/ConfigSet_S4V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Automatic messages by sign and level">Messages</a><br></div>'	
			framelnk="'/ConfigSet_S5V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Schedule assignment,schedule status, priority and deferral threshold">Schedules</a><br></div>'	
			framelnk="'/ConfigSet_S6V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Location descriptions and GPS settings">Location</a><br></div>'	
			signconfig.innerHTML=txt;
		}
		txt=""
		if (this.Radios.length > 0) {
			txt+='<div class="navgroup"><h5>Radios:</h5></div><div id="cfgradios"></div>'
			framelnk="'/ConfigSet_R1V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Name,Type,Mile Marker,Lat,Lng,Highway">General</a><br></div>'
			framelnk="'/ConfigSet_R2V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Access Method,Comm Addr,Comm Port,Comm ID,Password">Access</a><br></div>'	
			if (this.Sensors.length > 0) {
				framelnk="'/ConfigSet_R3V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Primary and alternate control sources">Control</a><br></div>'
				framelnk="'/ConfigSet_R6V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Message selection criteria involving primary and alternate routes">Multiple Routes</a><br></div>'
			}
			framelnk="'/ConfigSet_R4V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Automatic messages by radio and level">Messages</a><br></div>'	
			framelnk="'/ConfigSet_R5V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Schedule assignment,schedule status, priority and deferral threshold">Schedules</a><br></div>'	
			radioconfig.innerHTML=txt;
		}
		txt=""
		if (this.Beacons.length > 0) {
			txt+='<div class="navgroup"><h5>Beacons:</h5></div><div id="cfgbeacons"></div>'
			framelnk="'/ConfigSet_B1V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Name,Type,Mile Marker,Lat,Lng,Highway">General</a><br></div>'
			framelnk="'/ConfigSet_B2V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Access Method,Comm Addr,Comm Port,Comm ID,Password">Access</a><br></div>'	
			if (this.Sensors.length > 0) {
				framelnk="'/ConfigSet_B3V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Primary and alternate control sources">Control</a><br></div>'
				framelnk="'/ConfigSet_B6V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Message selection criteria involving primary and alternate routes">Multiple Routes</a><br></div>'
			}
			framelnk="'/ConfigSet_B4V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Automatic messages by beacon and level">Messages</a><br></div>'	
			framelnk="'/ConfigSet_B5V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Schedule assignment,schedule status, priority and deferral threshold">Schedules</a><br></div>'	
			beaconconfig.innerHTML=txt;
		}
		txt="";
		if (this.Cameras.length > 0) {
			txt+='<div class="navgroup"><h5>Cameras:</h5></div><div id="cfgcameras"></div>'
			framelnk="'/ConfigSet_C1V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Name,Type,Mile Marker,Lat,Lng,Highway,Access Method,Comm Addr,Comm Port,Comm ID,Role">Identification</a><br></div>'
			framelnk="'/ConfigSet_C2V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Resulution,refresh rate,archiving,user,password,network path">Imaging</a><br></div>'	
			if (this.Sensors.length > 0) {
				framelnk="'/ConfigSet_C3V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Traffic conditions triggering image popup on console">Automatic Display Rules</a><br></div>'
			}
			cameraconfig.innerHTML=txt;
		}
		txt="";
		if (this.Sensors.length > 0) {
			txt+='<div class="navgroup"><h5>Sensors:</h5></div><div id="cfgsensors"></div>'
			framelnk="'/ConfigSet_D1V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Name,Type,Mile Marker,Lat,Lng,Highway">General</a><br></div>'
			framelnk="'/ConfigSet_D2V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Access Method,Comm Addr,Comm Port,Comm ID,Password">Access</a><br></div>'	
			framelnk="'/ConfigSet_D3V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Number lanes, sensor weight, segment length, reference speed">Queue Settings</a><br></div>'
			framelnk="'/ConfigSet_D4V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Speed, volume and occupancy thresholds for Slowing">Queue level 2</a><br></div>'	
			framelnk="'/ConfigSet_D5V',false,"+iframe;txt+='<div class="navitem"><a href="javascript:'+this.name+'.NavLink('+framelnk+');" title="Speed, volume and occupancy thresholds for Stopped">Queue level 3</a><br></div>'	
			sensorconfig.innerHTML=txt;
		}
	}
	notice.innerHTML = '<p align="center" class="copyright" style="vertical-align:middle;">IMPORTANT NOTICE<br>The information provided on this page is dependent on weather and construction factors, as well as the functioning of various electronic systems and thus may not always be accurate or available.</p>';
	messagebox.innerHTML="";
}
