This appendix covers the following topics:
This appendix provides the technical design of a sample implementation of an Oracle iSupport custom menu (custom navigation) utilizing the custom navigation framework. Its sole purpose is to demonstrate the custom navigation features in Oracle iSupport. Customers of Oracle iSupport should not adapt any sample source code from this document to production environments without further testing of functionality and performance.
This section lists the implementation steps needed to implement the custom menu in Oracle iSupport at a responsibility level and provides the sample source code and the resultant screenshots for this implementation. Oracle assumes that the reader of this document is familiar with the Oracle JTT Framework used by Oracle iSupport and the HTML, JSP, and Java technologies.
The custom navigation framework provides access to all menu objects that are currently available under the Oracle look and feel implementation. The purpose of this framework is to delegate the HTML rendering portion in a page to a customer-defined rendering java class. The menu definition attached to a responsibility continues to be retrieved in the same manner as is currently done.
The custom menu framework gives a developer control of the menu-rendering area on a page by inserting custom HTML and menu-rendering code in the highlighted regions of the page. The support organizations should refer to the JTT custom navigation developer guide for the details regarding this framework.
The following pictures show the before and after look and feel of a page for which a custom menu renderer is implemented:
The following figure shows a home page before implementation of a custom menu class. The figure descriptions refer to color, which may be available in some media.
The periphery of the page will be changed and appears in yellow as follows:
The page title, Oracle iSupport, appears in the upper left of the yellow header region.
In the yellow header region, the following links appear horizontally in the upper right corner:
iSupport
Contact Us
Feedback
Profile
Sign Out
Help
Immediately below these links, the following tabs appear horizontally:
Home
Account
Support
The Quick Find LOV and the Go button appear centered below the darkened tab bar.
The narrow left and right yellow borders are blank.
In the yellow footer region, the following links appear centered horizontally:
Home
Account
Support
iSupport
Contact Us
Feedback
Profile
Sign Out
Help
Home Page before Implementation of a Custom Menu Class
The following figure shows the home page after implementation of a custom menu class.
The periphery of the page has changed and appears in yellow as follows:
The page title, Vision Enterprises, appears in the upper left of the yellow header region.
The tabs are gone from their former location.
In the yellow header region about where the tab bar appeared, the following links appear horizontally in a darkened bar in the following order:
iSupport
Contact Us
Feedback
Profile
Sign Out
Help
The left and right yellow borders are wider than before and squeeze the central region to make it narrower horizontally. The right border remains blank.
The left border is titled iSupport and has the following links arranged vertically:
Name
Account
Support
In the yellow footer region, the following links appear horizontally in a darkened bar in the following order:
iSupport
Contact Us
Feedback
Profile
Sign Out
Help
Home Page after Implementation of a Custom Menu Class
Identified all the HTML codes that were required to serve as the page header and page footer in the prototype. In this example, we stripped out HTML codes that were used to render the yellow regions from the source web site. In an actual implementation, the support organization may write this code.
Retrieved all style sheet classes for the sample site and saved them in the $OA_HTML directory. Additionally, we overrode some JTT style sheet classes in this custom style sheet for the prototype. For example, we overrode style sheet classes for the following elements in this style sheet:
Table background
Table cell color
Page title (and so on)
A support organization must create a new java class to implement the menu feature. For the purpose of this document, a new java class, oracle.apps.ibu.menu.VisionRenderer, was created to implement the JTT CustomRenderer class. The following two methods were used to render the above yellow regions for the prototype:
public void renderBegin(CustomRenderingContext crc) - Yellow header region
public void renderEnd(CustomRenderingContext crc) - Yellow footer region
The HTML codes collected from step 1 were embedded in the following rendering methods for page header and footer. In both these methods, the developer has access to the following menu data, including the menu-highlighting indicator:
Global icons
Tab navigation bar
Second level tab navigation
Side navigation menu
To use this custom menu class, register the following profile option, and set the custom menu class for the Oracle iSupport responsibility used for the prototype:
JTF_NAV_CUSTOM_RENDERER - oracle.apps.ibu.menu.VisionRenderer
This profile option should be created under the CRM Foundation, not Oracle iSupport. After it is created, you can set the value of the profile option at the Oracle iSupport responsibility level.
After you bounce the middle tier, the new menu renderer will be used when a user logs in using the responsibility for which the custom menu class has been set in the profile option.
The following sample code, VisionRenderer.java, demonstrates the custom menu class. A support organization should not adapt any sample source codes from this document to production environments without further testing of functionality and performance.
The custom class for the prototype does not render the following elements that a support organization could add when it defines a custom class:
Quick Find
Application switcher
Bottom menu
Privacy link
/*==========================================================================+
| Copyright (c) 2003 Oracle, Redwood Shores, CA, USA |
| All rights reserved. |
+==========================================================================+
| FILENAME |
| VisionRenderer.java |
| |
| DESCRIPTION |
| Custom Menu Renderer - Sample |
| |
| NOTES |
| |
| DEPENDENCIES |
| |
| HISTORY |
| 4/25/2002 ktma created. |
+==========================================================================*/
package oracle.apps.ibu.menu;
import java.io.PrintWriter;
import oracle.apps.fnd.common.VersionInfo;
import oracle.apps.jtf.ui.menu.CustomRenderer;
import oracle.apps.jtf.ui.menu.CustomRenderingContext;
import oracle.apps.jtf.ui.menu.MenuItem;
import oracle.apps.jtf.ui.menu.MenuItemList;
import oracle.apps.jtf.ui.menu.QuickSearch;
import oracle.apps.jtf.ui.menu.MenuURI;
import oracle.apps.jtf.ui.menu.blaf.PageNavigation;
/**
* custom renderer for Vision Company
*/
public class VisionRenderer extends CustomRenderer {
/** The version control ID. */
public final static String RCS_ID =
"$Header: $";
public static final boolean RCS_ID_RECORDED =
VersionInfo.recordClassVersion(RCS_ID, "oracle.apps.ibu.menu");
/**
* Constructs a demo custom renderer.
*/
protected VisionRenderer() {}
/**
* Gets an instance of this custom renderer.
*
* @return an instance of this custom renderer
*/
public static CustomRenderer getInstance() {
// we maintain only one instance in this demo
if (singleInstance == null) singleInstance = new VisionRenderer();
return singleInstance;
}
// if a menu item has a MenuURI object,
// we can add extra parameters to the URI
// some menu item URI cannot be modified,
// getURI() returns null in that case
private static String getURI(MenuItem mi) {
MenuURI muri = mi.getURI();
if (muri != null) {
muri.addParameter("custom", "y");
return muri.getURI();
} else {
return mi.getDestination();
}
}
/**
* Renders the top part of the navigation.
* In Oracle browser look and feel, this is the part from the top of the
* page to the end of the side navigation.
* The caller of this method
* should ensure that the given rendering context is not null; otherwise
* a <code>NullPointerException</code> may be thrown.
*
* @param crc the rendering context used for rendering
*/
public void renderBegin(CustomRenderingContext crc) {
PrintWriter out = crc.getOutput();
PageNavigation pn = crc.getNavigationData();
StringBuffer sb = new StringBuffer();
// override oracle stylesheet for this custom menu
out.println("<link rel='stylesheet' href='index_files/Vision.css'>");
// get all sub-components
String branding = pn.getBranding();
MenuItemList appSwitcher = pn.getApplicationSwitcher();
// top icons iSupport, Register, logout
MenuItemList globalButtons = pn.getGlobalButtons();
StringBuffer gBhtml = new StringBuffer();
// Home/Forum...
MenuItemList tabBar = pn.getTabBar();
StringBuffer tBhtml = new StringBuffer();
// Sub tabs under Home/Forum...
MenuItemList hNav = pn.getHorizontalNavigation();
StringBuffer hNhtml = new StringBuffer();
MenuItemList sideNav = pn.getSideNavigation();
StringBuffer sNhtml = new StringBuffer();
QuickSearch qkSearch = pn.getQuickSearch();
StringBuffer sideSub = new StringBuffer();
// render application switcher if there's more than one item
/*
if (appSwitcher != null && appSwitcher.getSize() > 1) {
out.print("<form name=appsw>");
out.print("<select name=appswslct>");
// output an empty option in case nothing is selected
out.print("<option value='#'> </option>");
for (int i = 0; i < appSwitcher.getSize(); i++) {
MenuItem mi = appSwitcher.getMenuItemAt(i);
if (!mi.isVisible()) out.print("<!-- ");
out.print("<option value=\"");
out.print(mi.getDestination());
out.print("\"");
if (i == appSwitcher.getSelectedIndex())
out.print(" selected ");
out.print(" >");
out.print(mi.getText());
out.print("</option>");
if (!mi.isVisible()) out.print(" -->");
}
out.println("</select>");
out.print("<input type=button value=Switch onClick=\"document.location");
out.print("=document.appsw.appswslct.options[document.appsw.appswslct.");
out.print("selectedIndex].value;\">");
out.print("</form>");
}
*/
// render global buttons only when it's not null or empty
if (globalButtons != null && globalButtons.getSize() > 0) {
MenuItem[] mis = globalButtons.getAllMenuItems();
String gBStyle = new String();
for (int i = 0; i < mis.length; i++) {
// a global button may wish to be hidden
if (mis[i].isVisible()) {
// selected?
if (i == globalButtons.getSelectedIndex())
gBStyle = LEVEL_1S;
else
gBStyle = LEVEL_1;
// normally global buttons always have text and destination
gBhtml.append("<li><a class=\""+gBStyle+"\" href=\"");
gBhtml.append(getURI(mis[i]));
gBhtml.append("\">");
if (mis[i].getText().equals("iSupport"))
gBhtml.append("Home");
else
gBhtml.append(mis[i].getText());
gBhtml.append("</a>");
} // visible
} // for
} // if
// render tab bar only when it's not null or empty
if (tabBar != null && tabBar.getSize() > 0) {
MenuItem[] mis = tabBar.getAllMenuItems();
String tBStyle = new String();
for (int i = 0; i < mis.length; i++) {
// selected
if (i == tabBar.getSelectedIndex())
tBStyle = LEVEL_2S;
else
tBStyle = LEVEL_2;
// normally tab bar items always have text and destination
tBhtml.append("<li><a class=\""+tBStyle+"\" href=\"");
tBhtml.append(getURI(mis[i]));
tBhtml.append("\">");
tBhtml.append(mis[i].getText());
tBhtml.append("</a>");
tBhtml.append(MENU_SPACE);
if (mis[i].getText().equals("Home"))
break;
} // for
} // if
// render horizontal navigation only when it's not null or empty
if (hNav != null && hNav.getSize() > 0) {
MenuItem[] mis = hNav.getAllMenuItems();
String hNStyle = new String();
for (int i = 0; i < mis.length; i++) {
// selected
if (i == hNav.getSelectedIndex())
hNStyle = LEVEL_3S;
else
hNStyle = LEVEL_3;
// normally horizontal navigation items always have
// text and destination
hNhtml.append("<li><a class=\""+hNStyle+"\" href=\"");
hNhtml.append(getURI(mis[i]));
hNhtml.append("\">");
hNhtml.append(mis[i].getText());
hNhtml.append("</a>");
hNhtml.append(MENU_SPACE);
} // for
} // if
// render side navigation only when it's not null or empty
if (sideNav != null && sideNav.getSize() > 0 && sideNav.isVisible()) {
MenuItem[] mis = sideNav.getAllMenuItems();
String sNStyle = new String();
for (int i = 0; i < mis.length; i++) {
// selected
if (i == sideNav.getSelectedIndex())
sNStyle = LEVEL_3S;
else
sNStyle = LEVEL_3;
// the destination may be null if there are sub menu items
String destination = getURI(mis[i]);
if (destination != null) {
sNhtml.append("<li><a class=\""+sNStyle+"\" href=\"");
sNhtml.append(destination);
sNhtml.append("\">");
sNhtml.append(mis[i].getText());
sNhtml.append("</a>");
} else {
// you can use the destination of the first sub menu item
// if you want
sNhtml.append("<li><font class=\""+sNStyle+"\">");
sNhtml.append(mis[i].getText());
sNhtml.append("</font>");
}
sNhtml.append(MENU_SPACE);
// get child menu for the selected side nav
MenuItemList submil = mis[i].getSubMenuItems();
// render sub menu items only when they exist
if (submil != null && submil.getSize() > 0) {
sNhtml.append("<br>");
for (int j = 0; j < submil.getSize(); j++) {
MenuItem mii = submil.getMenuItemAt(j);
// selected
if (j == submil.getSelectedIndex())
sNStyle = LEVEL_3S;
else
sNStyle = LEVEL_3;
sNhtml.append(" ");
sNhtml.append("- <a class=\""+sNStyle+"\" href=\"");
sNhtml.append(getURI(mii));
sNhtml.append("\">");
sNhtml.append(mii.getText());
sNhtml.append("</a><br>");
sNhtml.append(MENU_SPACE); out.println("<!-- "+mii.getText()+" -->");
} // for sub_menu
} // if sub_menu
} // for side nav main
} // if side nave main
// render quick search when it exists
/*
if (qkSearch != null) {
out.println("<br>");
// quick search is selected when search result is being displayed
if (qkSearch.isSelected()) {
out.println("<font color=blue>Quick Search<br></font>");
} else {
out.println("Quick Search<br>");
}
// print out advanced search link if any
if (qkSearch.getAdvancedSearchURI() != null) {
out.print("<sub><a href=\"");
out.print(qkSearch.getAdvancedSearchURI());
out.print("\">");
out.print(qkSearch.getAdvancedSearchPrompt());
out.print("</a></sub>");
}
out.println(qkSearch.getFormBegin());
out.println("Enter keywords and press a category: ");
out.print("<input type=text name=\"");
out.print(qkSearch.getQueryElementName());
out.print("\"");
if (qkSearch.isSelected()) {
out.print(" value=\"");
out.print(qkSearch.getQueryString());
out.print("\"");
}
out.print(" size=30>");
out.println("<br>");
// getCategoryNames never returns null, but it can be empty
String[] catNames = qkSearch.getCategoryNames();
String[] catValues = qkSearch.getCategoryValues();
for (int i = 0; i < catNames.length; i++) {
// if the category is currently selected
if (qkSearch.getSelectedCategoryValue().equals(catValues[i])) {
out.print("<font color=blue>*</font>");
}
out.print("<a href=\"");
out.print("javascript:document.forms['");
out.print(qkSearch.getFormName());
out.print("'].");
out.print(qkSearch.getCategoryElementName());
out.print(".value='");
out.print(catValues[i]);
out.print("';");
out.print(qkSearch.getSubmitJavaScript());
out.print("\">");
out.print(catNames[i]);
out.println("</a>");
out.println(" ");
}
out.print("<input type=hidden name=\"");
out.print(qkSearch.getCategoryElementName());
out.println("\">");
out.println(qkSearch.getFormEnd());
}
*/
// Build HTML code here
sb.append("<link rel='stylesheet' href='index_files/Vision.css'>");
sb.append("<SCRIPT language=JavaScript src=\"index_files/Vision_1.js\"></SCRIPT>");
sb.append("<TABLE cellSpacing=0 cellPadding=0 border=0>");
sb.append(" <TBODY>");
sb.append(" <TR vAlign=top>");
sb.append(" <TD colSpan=3>");
sb.append(" <TABLE cellSpacing=0 cellPadding=0 border=0 width=\"100%\">");
sb.append(" <TBODY>");
sb.append(" <TR vAlign=top>");
sb.append(" <TD bgColor=#ffffff colSpan=2><A ");
sb.append(" href=\"http://www.Vision.com/e/index.cfm\"><IMG height=53 alt=Vision ");
sb.append(" src=\"index_files/logo_sub.gif\" width=172 border=0 name=Image9></A></TD>");
sb.append(" <TD align=right bgColor=#ffffff valign=top class=\"linkSmall\">");
sb.append("<!-- Global icons --> ");
sb.append(" <img src=\"images/topnav_sep.gif\" border=0 align=middle><A href=\"http://www.Vision.com/e/resource_center/index.cfm\" class=\"linkSmall\">Resource Center</A>");
sb.append(" <img src=\"images/topnav_sep.gif\" border=0 align=middle><A href=\"http://www.Vision.com/e/search/index.cfm\" class=\"linkSmall\">Search</A>");
sb.append(" <img src=\"images/topnav_sep.gif\" border=0 align=middle><A href=\"http://www.Vision.com/e/search/index.cfm\" class=\"linkSmall\">Site Map</A>");
sb.append(" <img src=\"images/topnav_sep.gif\" border=0 align=middle><A href=\"http://www.Vision.com/e/contactus/index.cfm\" class=\"linkSmall\">Contact Us</A>");
sb.append(" </TD> ");
sb.append(" </TR> ");
sb.append(" <TR vAlign=top bgcolor=\"#003366\">");
sb.append(" <TD colSpan=3 nowrap><A ");
sb.append(" onmouseover=\"MM_swapImage('Image1','','../images/nav_home_hl.gif',1)\" ");
sb.append(" onmouseout=MM_swapImgRestore() ");
sb.append(" href=\"http://www.Vision.com/e/index.cfm\"><IMG height=26 alt=Home ");
sb.append(" src=\"index_files/nav_home.gif\" width=45 border=0 name=Image1></A><A ");
sb.append(" onmouseover=\"MM_swapImage('ImageSOLUTIONS','','../images/nav_solutions_hl.gif',1)\" ");
sb.append(" onmouseout=MM_swapImgRestore() ");
sb.append(" href=\"http://www.Vision.com/e/solutions/index.cfm\"><IMG ");
sb.append(" alt=solutions src=\"index_files/nav_solutions.gif\" border=0 ");
sb.append(" name=ImageSOLUTIONS></A><A ");
sb.append(" onmouseover=\"MM_swapImage('ImagePARTNERS','','../images/nav_partners_hl.gif',1)\" ");
sb.append(" onmouseout=MM_swapImgRestore() ");
sb.append(" href=\"http://www.Vision.com/e/partners/index.cfm\"><IMG alt=partners ");
sb.append(" src=\"index_files/nav_partners.gif\" border=0 ");
sb.append(" name=ImagePARTNERS></A><A ");
sb.append(" onmouseover=\"MM_swapImage('ImageINDUSTRIES','','../images/nav_industries_hl.gif',1)\" ");
sb.append(" onmouseout=MM_swapImgRestore() ");
sb.append(" href=\"http://www.Vision.com/e/industries/index.cfm\"><IMG ");
sb.append(" alt=industries src=\"index_files/nav_industries.gif\" border=0 ");
sb.append(" name=ImageINDUSTRIES></A><A ");
sb.append(" onmouseover=\"MM_swapImage('ImageCUSTOMERS','','../images/nav_customers_hl.gif',1)\" ");
sb.append(" onmouseout=MM_swapImgRestore() ");
sb.append(" href=\"http://www.Vision.com/e/customers/index.cfm\"><IMG ");
sb.append(" alt=customers src=\"index_files/nav_customers.gif\" border=0 ");
sb.append(" name=ImageCUSTOMERS></A><A ");
sb.append(" href=\"ibuhpage.jsp\"><IMG ");
sb.append(" alt=servicessupport src=\"index_files/nav_servicessupport_on.gif\" ");
sb.append(" border=0 name=ImageSERVICESSUPPORT></A><A ");
sb.append(" onmouseover=\"MM_swapImage('ImageCOMPANY','','../images/nav_company_hl.gif',1)\" ");
sb.append(" onmouseout=MM_swapImgRestore() ");
sb.append(" href=\"http://www.Vision.com/e/company/index.cfm\"><IMG alt=company ");
sb.append(" src=\"index_files/nav_company.gif\" border=0 name=ImageCOMPANY></A><A ");
sb.append(" onmouseover=\"MM_swapImage('ImageNEWS','','../images/nav_news_hl.gif',1)\" ");
sb.append(" onmouseout=MM_swapImgRestore() ");
sb.append(" href=\"http://www.Vision.com/e/news/index.cfm\"><IMG alt=news ");
sb.append(" src=\"index_files/nav_news.gif\" border=0 name=ImageNEWS></A></TD></TR>");
sb.append(" <TR vAlign=top>");
sb.append(" <TD><IMG height=10 src=\"index_files/space.gif\" width=190></TD>");
sb.append(" <TD><IMG height=10 src=\"index_files/space.gif\" width=10></TD>");
sb.append(" <TD><IMG height=10 src=\"index_files/space.gif\" ");
sb.append(" width=580></TD></TR></TBODY></TABLE></TD></TR>");
sb.append(" <TR vAlign=top>");
sb.append(" <TD> ");
sb.append(" <TABLE cellSpacing=0 cellPadding=0 width=190 border=0>");
sb.append(" <TBODY> ");
sb.append(" <TR> ");
sb.append(" <TD> </TD>");
sb.append(" <TD vAlign=top><SPAN class=subNavHeader><BR>Services & Support</SPAN><BR><BR>");
sb.append("<!-- side nav begin --> ");
sb.append("<!-- Global icons -->");
sb.append(gBhtml.toString()); // top navigation --- global button
sb.append("<Br>");
if (!hNhtml.toString().equals("")) {
sb.append(hNhtml.toString());
}
sb.append("<Br>");
if (!sNhtml.toString().equals("")) {
sb.append(sNhtml.toString());
}
sb.append("<Br>");
if (!sideSub.toString().equals("")) {
sb.append(sideSub.toString());
}
sb.append("<!-- side nav end -->");
sb.append(" </TD>");
sb.append(" </TR>");
sb.append(" <TR>");
sb.append(" <TD><IMG height=5 src=\"index_files/space.gif\" width=10></TD>");
sb.append(" <TD><IMG height=5 src=\"index_files/space.gif\" ");
sb.append(" width=180></TD></TR></TBODY></TABLE>");
sb.append(" <P class=paragraphPad> </P></TD>");
sb.append(" <TD> </TD>");
sb.append(" <TD>");
sb.append("<!-- Content begin -->");
out.println(sb.toString());
} // renderBegin
/**
* Renders the bottom part of the navigation.
* In Oracle browser look and feel, this is the part that contains
* a footer, copyright text and privacy statement link.
* The caller of this
* method should ensure that the given rendering context is not null; otherwise
* a <code>NullPointerException</code> may be thrown.
*
* @param crc the rendering context used for rendering
*/
public void renderEnd(CustomRenderingContext crc) {
PrintWriter out = crc.getOutput();
PageNavigation pn = crc.getNavigationData();
// override stylesheet...
out.println("<link rel='stylesheet' href='index_files/Vision.css'>");
// get copyright and privacy information
//String copyrightText = pn.getCopyrightText();
//String privacyText = pn.getPrivacyText();
//String privacyURI = pn.getPrivacyURI();
// footer HTML from Vision.com
out.print("<!-- Content End --> ");
out.print(" </TD> ");
out.print(" </TR> ");
out.print(" <TR vAlign=top> ");
out.print(" <TD> </TD> ");
out.print(" <TD> </TD> ");
out.print(" <TD> </TD></TR> ");
out.print(" <TR vAlign=top> ");
out.print(" <TD colSpan=3> ");
out.print(" <TABLE cellSpacing=0 cellPadding=0 width=100% border=0> ");
out.print(" <TBODY> ");
out.print(" <TR> ");
out.print(" <TD vAlign=top align=right bgcolor=\"#003366\"><IMG height=23 ");
out.print(" alt=\"Unlocking the Motion of Industry\" src=\"index_files/footer.gif\" ");
out.print(" width=780><BR><SPAN class=linkCopyright></td</tr>");
out.print(" <tr><TD vAlign=top align=right><A ");
out.print(" href=\"http://www.Vision.com/e/company/privacy.cfm\"><SPAN ");
out.print(" class=linkCopyright>Privacy Policy</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/resource_center/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Resource Center</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/search/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Search</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/search/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Site Map</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/contactus/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Contact Us</SPAN></A><BR><A ");
out.print(" href=\"http://www.Vision.com/e/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Home</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/solutions/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Solutions</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/partners/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Partners</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/industries/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Industries</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/customers/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Customers</SPAN></A> | <A ");
out.print(" href=\"ibuhpage.jsp\"><SPAN ");
out.print(" class=linkCopyright>Services & Support</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/company/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>Company</SPAN></A> | <A ");
out.print(" href=\"http://www.Vision.com/e/news/index.cfm\"><SPAN ");
out.print(" class=linkCopyright>News & Events</SPAN></A><BR><BR>Vision, ");
out.print(" Inc.<BR>Copyright 2003, All Rights Reserved.</SPAN> ");
out.print(" </TD></TR></TBODY></TABLE></TD></TR> ");
out.print(" <TR vAlign=top> ");
out.print(" <TD><IMG height=5 src=\"index_files/space.gif\" width=190></TD> ");
out.print(" <TD><IMG height=5 src=\"index_files/space.gif\" width=10></TD> ");
out.print(" <TD><IMG height=5 src=\"index_files/space.gif\" width=580></TD></TR></TBODY></TABLE> ");
// footer HTML from Vision.com
}
private static VisionRenderer singleInstance;
/**
* Stylesheet constant for menu highlight
*/
private static final String LEVEL_1 = "linkBold";
private static final String LEVEL_1S = "linkBold";
private static final String LEVEL_2 = "linkBold";
private static final String LEVEL_2S = "linkBold";
private static final String LEVEL_3 = "linkBold";
private static final String LEVEL_3S = "linkBold";
private static final String LEVEL_3A = "linkBold";
private static final String LEVEL_3AS = "linkBold";
private static final String MENU_SPACE = "";
private static final String TOP_NAV_SPACE = "<img src=\"images/topnav_sep.gif\" border=0 align=middle>";
}