1874 lines
		
	
	
		
			81 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1874 lines
		
	
	
		
			81 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html>
 | 
						|
<head>
 | 
						|
<title>ARIA Spreadsheet and Menubar</title>
 | 
						|
<script type="text/javascript">
 | 
						|
<!--
 | 
						|
/* PLEASE NOTE THAT THIS IS PROTOTYPE CODE!  It was created as a proof of concept and is not a well designed or robust implementation!  It is not meant to be a best practice example - please use accordinging!  You have been warned.
 | 
						|
*/
 | 
						|
// functions for changing style rules
 | 
						|
 | 
						|
function changeStyleRule(oRule, styleName, styleValue) {
 | 
						|
  if (oRule.style && oRule.style.setProperty) {
 | 
						|
      oRule.style.setProperty(styleName, styleValue,"");
 | 
						|
      //alert(oRule.style.getPropertyValue(styleName));
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// You must specify a "title" attribute in <style> tag or <link> tag for Mozilla.
 | 
						|
function pageGetStyleSheet(sID,doc) {
 | 
						|
  if(!doc)doc=document;
 | 
						|
  if(!sID)
 | 
						|
    return doc.styleSheets[0];
 | 
						|
 | 
						|
  if (doc.all) {
 | 
						|
    return doc.styleSheets[sID];
 | 
						|
  } else {
 | 
						|
    for (var i = 0; i < doc.styleSheets.length; i++) {
 | 
						|
      var oSS = doc.styleSheets[i];
 | 
						|
      if (oSS.title == sID) return oSS;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function cssGetRules(oSS){
 | 
						|
  return (document.all ? oSS.rules : oSS.cssRules);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// SIMPLE function to find a particular rule selector
 | 
						|
function cssGetRule(rulesList, ruleIdent) {
 | 
						|
  var foundRule = null;
 | 
						|
  for (var i=0; i < rulesList.length; i++ ) {
 | 
						|
    var sText = rulesList[i].selectorText;
 | 
						|
    if (sText != "undefined" && sText != null) {
 | 
						|
      if (sText.indexOf(ruleIdent) > -1 ) {
 | 
						|
        foundRule = rulesList[i];
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return foundRule;
 | 
						|
}
 | 
						|
 | 
						|
var TOP_SUFFIX = "top";  // the top menu item has an id that is menuID + TOP_SUFFIX
 | 
						|
var DROP_SUFFIX = "Items"; // the drop menu div has an id that is the menuID + DROP_SUFFIX
 | 
						|
var SUB_SUFFIX = "sub" // items that have sub menus have "sub" in the id
 | 
						|
var KEY_UP = 38;
 | 
						|
var KEY_DOWN = 40;
 | 
						|
var KEY_LEFT = 37;
 | 
						|
var KEY_RIGHT = 39;
 | 
						|
var KEY_ESCAPE = 27;
 | 
						|
var KEY_M=77;
 | 
						|
var KEY=F10 = 121;
 | 
						|
var KEY_SPACE = 32;
 | 
						|
var KEY_TAB = 9;
 | 
						|
 | 
						|
 | 
						|
var TEXT_NODE = 3;
 | 
						|
 | 
						|
Menubar = function(menubarId) {
 | 
						|
  this.activeIdx = -1;  // index of the active menu
 | 
						|
  this.dropOpen = false;  // indicates if menu is open (items are visible)
 | 
						|
  this.itemIdx = -1;  // indicates the index of the active item in an open menu
 | 
						|
  this.id = menubarId;
 | 
						|
  this.menus = new Array(); // array of menu Ids
 | 
						|
  this.menuItems = new Array(); // array of menu items - indexed by menu id
 | 
						|
  this.subMenus = new Array(); // array of sub menu items - indexed by parend menu id
 | 
						|
  this.activeSubId = null; // string with id of open sub menu; null if no sub menu open
 | 
						|
  this.activeSubIndex = -1; // index of active item in sub menu; -1 if no sub menu open
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/* getters and setters for MenuState object
 | 
						|
*/
 | 
						|
 | 
						|
Menubar.prototype.setActiveMenuIndex = function(index) {
 | 
						|
   this.activeIdx = index;
 | 
						|
}
 | 
						|
Menubar.prototype.getActiveMenuIndex = function() {
 | 
						|
  return this.activeIdx;
 | 
						|
}
 | 
						|
Menubar.prototype.setActiveOpen = function(isOpen) {
 | 
						|
  this.dropOpen = isOpen;
 | 
						|
}
 | 
						|
Menubar.prototype.isActiveOpen= function() {
 | 
						|
  return this.dropOpen;
 | 
						|
}
 | 
						|
Menubar.prototype.setActiveItemIndex = function(index) {
 | 
						|
  this.itemIdx = index;
 | 
						|
}
 | 
						|
Menubar.prototype.getActiveItemIndex = function() {
 | 
						|
  return this.itemIdx;
 | 
						|
}
 | 
						|
Menubar.prototype.updateAllIndex= function(active, drop, item) {
 | 
						|
  this.activeIdx = active;
 | 
						|
  this.dropOpen = drop;
 | 
						|
  this.itemIdx = item;
 | 
						|
}
 | 
						|
Menubar.prototype.getId = function() {
 | 
						|
  return this.id;
 | 
						|
}
 | 
						|
Menubar.prototype.getMenus = function() {
 | 
						|
  return this.menus; // return array of menu item ids
 | 
						|
}
 | 
						|
Menubar.prototype.getMenuItems = function(menuId) {
 | 
						|
  return this.menuItems[menuId];
 | 
						|
}
 | 
						|
/*  Function to add a menu to the menu bar
 | 
						|
 ** Must be called in menu order!!
 | 
						|
 ** menuId - id of this menu item
 | 
						|
 ** items - array of ids for the menu items in this menu
 | 
						|
 ** returns number of menu items (lenght of menu array)
 | 
						|
 */
 | 
						|
Menubar.prototype.addMenu = function(menuId,items) {
 | 
						|
  this.menus[this.menus.length] = menuId;
 | 
						|
  this.menuItems[menuId] = items;
 | 
						|
 | 
						|
}
 | 
						|
Menubar.prototype.addSubMenu = function(menuId, items) {
 | 
						|
  this.subMenus[menuId] = items;
 | 
						|
 | 
						|
}
 | 
						|
Menubar.prototype.getSubMenuItems = function(itemId) {
 | 
						|
 | 
						|
  return this.subMenus[itemId];
 | 
						|
}
 | 
						|
Menubar.prototype.setActiveSubOpen = function(menuId) {
 | 
						|
  this.activeSubId = menuId;
 | 
						|
}
 | 
						|
Menubar.prototype.getActiveSubOpen = function() {
 | 
						|
  return this.activeSubId;
 | 
						|
}
 | 
						|
Menubar.prototype.setActiveSubIndex= function(index) {
 | 
						|
  this.activeSubIndex = index;
 | 
						|
}
 | 
						|
Menubar.prototype.getActiveSubIndex = function() {
 | 
						|
  return this.activeSubIndex;
 | 
						|
}
 | 
						|
Menubar.prototype.hasSubMenu = function(itemObj) {
 | 
						|
  var bHasSub = false;
 | 
						|
  var itemId = itemObj.getAttribute("id");
 | 
						|
  // see if id contains "sub"
 | 
						|
  if (itemId.indexOf(SUB_SUFFIX) >  -1) {
 | 
						|
    bHasSub = true;
 | 
						|
  }
 | 
						|
  return bHasSub;
 | 
						|
}
 | 
						|
 | 
						|
Menubar.prototype.doMenu = function(event) {
 | 
						|
  //alert(event.ctrlKey + " : " + event.shiftKey + " : " + event.keyCode);
 | 
						|
  if (event.ctrlKey && event.altKey && event.keyCode == KEY_M) {
 | 
						|
    gFocusBeforeMenus = event.target;
 | 
						|
  //var theMenu = document.getElementById(this.getId());
 | 
						|
    // set focus to first menu (as long as menus are defined)
 | 
						|
    if (this.menus.length > 0) {
 | 
						|
 | 
						|
      if (this.isActiveOpen() ) {
 | 
						|
        // close any open active items if press menu start key again
 | 
						|
        var activeIndex = this.getActiveMenuIndex();
 | 
						|
        var menu = document.getElementById((this.getMenus()[activeIndex] + DROP_SUFFIX));
 | 
						|
        menu.style.display="none";
 | 
						|
        this.updateAllIndex(-1,false,-1);
 | 
						|
 | 
						|
      }
 | 
						|
    // set focus to the first menu
 | 
						|
    this.setActiveMenuIndex(0);
 | 
						|
    gFocusItem = document.getElementById((this.menus[0] + TOP_SUFFIX));
 | 
						|
    setTimeout("doFocus();",0);
 | 
						|
    } // end of if menus > 0
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Menubar.prototype.doNavigation = function(event) {
 | 
						|
  var bEventContinue = true;  // browser can still use event
 | 
						|
  var key = event.keyCode;
 | 
						|
  if ((key >=KEY_LEFT && key <= KEY_DOWN) || key == KEY_ESCAPE) {
 | 
						|
    var idx = this.getActiveMenuIndex();
 | 
						|
    if (idx < 0) {
 | 
						|
      idx = 0;
 | 
						|
    }
 | 
						|
    // if subIndex > -1 a submenu is open - up and down movement will occur in it
 | 
						|
    var subIndex = this.getActiveSubIndex();
 | 
						|
    var subMenuId = this.getActiveSubOpen();
 | 
						|
    var menus = this.getMenus();
 | 
						|
    var menuLen = menus.length;
 | 
						|
    var activeMenuId = menus[idx];
 | 
						|
    //var activeMenu = document.getElementById(activeMenuId);
 | 
						|
    var curDrop = document.getElementById(activeMenuId + DROP_SUFFIX);
 | 
						|
 | 
						|
 | 
						|
    if (key == KEY_LEFT || key == KEY_RIGHT) {
 | 
						|
 | 
						|
      var nextIdx = idx;
 | 
						|
      if (key == KEY_LEFT) { // left
 | 
						|
        nextIdx = (idx + (menuLen-1)) % menuLen;
 | 
						|
 | 
						|
      }
 | 
						|
      else { // right
 | 
						|
        nextIdx = ((idx + 1) % menuLen);
 | 
						|
      }
 | 
						|
      // if drop menu is displayed, close it and open the next one or move into submenu
 | 
						|
      var bShowNext = this.isActiveOpen();
 | 
						|
      if (bShowNext) {
 | 
						|
        // current drop is open, see if it has submenu
 | 
						|
        if (curDrop) {
 | 
						|
          if (subMenuId != null) {
 | 
						|
            // sub menu is open - close it
 | 
						|
            this.hideSubMenu();
 | 
						|
            if (key == KEY_LEFT) {
 | 
						|
              // find parentItem and set focus to it
 | 
						|
              gFocusItem = document.getElementById(subMenuId);
 | 
						|
              setTimeout("doFocus();",0);
 | 
						|
              return false;
 | 
						|
            }
 | 
						|
            // if right just close and move to next top level menu (which happens below)
 | 
						|
          } // end of submenu open
 | 
						|
          if (key == KEY_RIGHT && subMenuId == null) {
 | 
						|
            // if right arrow and sub menu is not open- get current item in the drop down and see if it has a sub menu
 | 
						|
            var itemIdx = this.getActiveItemIndex();
 | 
						|
            var menuItems = this.getMenuItems(activeMenuId);
 | 
						|
            var curItemInDrop= document.getElementById(menuItems[itemIdx]);
 | 
						|
            var bHasSubMenu = this.hasSubMenu(curItemInDrop);
 | 
						|
            //alert(bHasSubMenu + " " + curItemInDrop.getAttribute("id"));
 | 
						|
            if (bHasSubMenu == true) {
 | 
						|
               return this.showSubMenu(event,curItemInDrop.getAttribute("id"));
 | 
						|
 | 
						|
            }
 | 
						|
          }
 | 
						|
          // if haven't returned yet - then close the current drop
 | 
						|
          curDrop.style.display = "none"; // only one menudrop child per menu
 | 
						|
          this.setActiveItemIndex(0);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
      }
 | 
						|
      this.setActiveMenuIndex(nextIdx);
 | 
						|
      var nextMenuId = menus[nextIdx];
 | 
						|
      gFocusItem=document.getElementById(nextMenuId + TOP_SUFFIX);
 | 
						|
      if (bShowNext == true) {
 | 
						|
        var drop = document.getElementById(nextMenuId + DROP_SUFFIX);
 | 
						|
        if (drop) {
 | 
						|
          drop.style.display="block";
 | 
						|
          var menuItems = this.getMenuItems(nextMenuId);
 | 
						|
          gFocusItem=document.getElementById(menuItems[0]);
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      setTimeout("doFocus();",0);
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    if (key == KEY_UP || key == KEY_DOWN ) {
 | 
						|
      var itemIdx = this.getActiveItemIndex();
 | 
						|
      var bOpen = this.isActiveOpen();
 | 
						|
 | 
						|
      if (curDrop) {
 | 
						|
        // first see if sub menu is open
 | 
						|
        if (subMenuId != null) {
 | 
						|
          // submenu is open - move within it
 | 
						|
          var subMenus = this.getSubMenuItems(subMenuId);
 | 
						|
          var subLen = subMenus.length;
 | 
						|
          var nextSubIndex =subIndex;
 | 
						|
          if (key == KEY_DOWN) {
 | 
						|
            nextSubIndex = (subIndex +1) % subLen;
 | 
						|
          }
 | 
						|
          else if (key == KEY_UP) {
 | 
						|
            nextSubIndex = (subIndex + (subLen - 1)) % subLen;
 | 
						|
          }
 | 
						|
          gFocusItem = document.getElementById(subMenus[nextSubIndex]);
 | 
						|
          this.setActiveSubIndex(nextSubIndex);
 | 
						|
          setTimeout("doFocus();",0);
 | 
						|
          return false;
 | 
						|
 | 
						|
        } // end of if sub menus - back to regular processing
 | 
						|
 | 
						|
        var menuItems = this.getMenuItems(activeMenuId);
 | 
						|
        var itemLen = menuItems.length;
 | 
						|
        var nextItemIdx;
 | 
						|
        if (!bOpen) { // open and set to the first item
 | 
						|
          this.showMenu(event, activeMenuId, true);
 | 
						|
          itemIdx = -1;
 | 
						|
        }
 | 
						|
        if (itemIdx == -1) {
 | 
						|
          nextItemIdx = 0;
 | 
						|
        }
 | 
						|
        else if (key == KEY_DOWN ){
 | 
						|
          nextItemIdx = (itemIdx +1) % itemLen;
 | 
						|
        }
 | 
						|
        else { //UP
 | 
						|
          nextItemIdx = (itemIdx + (itemLen-1)) % itemLen;
 | 
						|
        }
 | 
						|
 | 
						|
        this.setActiveItemIndex(nextItemIdx);
 | 
						|
        gFocusItem=document.getElementById(menuItems[nextItemIdx]);
 | 
						|
        setTimeout("doFocus();",0);
 | 
						|
      } // end of id curDrop
 | 
						|
    } // end of id up/down
 | 
						|
  // need to prevent propagation of arrow keys
 | 
						|
  /*  try {
 | 
						|
      ev.preventDefault();
 | 
						|
    }
 | 
						|
    catch (err) {
 | 
						|
      try {
 | 
						|
        ev.returnValue=false;
 | 
						|
      }
 | 
						|
      catch (errNext) {
 | 
						|
        ;
 | 
						|
      }
 | 
						|
  }*/
 | 
						|
  bEventContinue = false;
 | 
						|
 | 
						|
  if (key == KEY_ESCAPE ) {
 | 
						|
      this.closeMenu(event);
 | 
						|
      bEventContinue = false;
 | 
						|
      if (gFocusBeforeMenus) {
 | 
						|
        gFocusItem  = gFocusBeforeMenus;
 | 
						|
        setTimeout("doFocus();",0);
 | 
						|
      }
 | 
						|
      else {
 | 
						|
        document.focus();
 | 
						|
      }
 | 
						|
  } // end of if KEY_ESCAPE
 | 
						|
  } // end of if arrow or escape  key
 | 
						|
  return bEventContinue;
 | 
						|
}
 | 
						|
Menubar.prototype.closeMenu = function(event) {
 | 
						|
// hide the menus
 | 
						|
    var isOpen = this.isActiveOpen();
 | 
						|
    var activeIndex = this.getActiveMenuIndex();
 | 
						|
    if (isOpen && activeIndex != -1) {
 | 
						|
      // find the index of the active menu and close
 | 
						|
      this.hideMenu(event);
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      var menus = this.getMenus();
 | 
						|
      var activeMenuId = menus[activeIndex];
 | 
						|
      var curDrop = document.getElementById(activeMenuId + DROP_SUFFIX);
 | 
						|
          if (!isOpen && curDrop) {
 | 
						|
        // one of the top level menus is active but drop down is not open
 | 
						|
        gBlurItem = curDrop;
 | 
						|
        setTimeout("doBlur()",0);
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    this.updateAllIndex(-1,false,-1);
 | 
						|
  }
 | 
						|
 | 
						|
Menubar.prototype.showMenu = function(event, menuId, bFocusFirst) {
 | 
						|
 | 
						|
    // get the drop menu
 | 
						|
    var menu = document.getElementById((menuId + DROP_SUFFIX));
 | 
						|
    var displayState = "block";
 | 
						|
    var curIndex = this.findMenuIndex(menuId);
 | 
						|
    // see if any menu is open
 | 
						|
    var isOpen = this.isActiveOpen();
 | 
						|
    if (isOpen) {
 | 
						|
      // find the index of this menu item and see if it is different than the active one
 | 
						|
      var activeIndex = this.getActiveMenuIndex();
 | 
						|
 | 
						|
      if (curIndex != activeIndex && activeIndex != -1 ) {
 | 
						|
        // close the currently open drop menu
 | 
						|
        this.hideMenu(event);
 | 
						|
        // show this one
 | 
						|
        displayState = "block";
 | 
						|
 | 
						|
      }
 | 
						|
      else { // this is the current menu - hide it
 | 
						|
        displayState = "none";
 | 
						|
      }
 | 
						|
    } // end of if menu open
 | 
						|
    // else is not open - default value of displayState is block -so menu will be shown
 | 
						|
    // set the activeOpen value
 | 
						|
    var isOpen = (displayState == "block" ? true : false);
 | 
						|
    this.setActiveOpen(isOpen);
 | 
						|
    this.setActiveMenuIndex(curIndex);
 | 
						|
    // style="display:none" must be set on the drop elements to use the element.style.display syntax
 | 
						|
    // otherwise need to write cross browser routine to read the effective style (see DHTML book pg 878)
 | 
						|
    menu.style.display = displayState;
 | 
						|
    gFocusItem = menu;  // may be over written is need to set focus on specific menu item
 | 
						|
    if (isOpen && bFocusFirst) {
 | 
						|
      // set focus to an item in the menu
 | 
						|
      if (this.getActiveItemIndex() == -1) {
 | 
						|
        this.setActiveItemIndex(0);  // set to first item
 | 
						|
      }
 | 
						|
      var menuItems = this.getMenuItems(menuId);
 | 
						|
      gFocusItem=document.getElementById(menuItems[this.getActiveItemIndex()]);
 | 
						|
 | 
						|
    }
 | 
						|
      setTimeout("doFocus();",0);
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
Menubar.prototype.showSubMenu = function(event, menuId) {
 | 
						|
// TODO fix to work with mouse - since only supporting keyboard right now - there will not be another drop menu open
 | 
						|
 | 
						|
// close any open submenus
 | 
						|
    this.hideSubMenu();
 | 
						|
 | 
						|
    // get the drop menu
 | 
						|
    var menu = document.getElementById((menuId + DROP_SUFFIX));
 | 
						|
    var assocItem = document.getElementById(menuId);
 | 
						|
    //var container = assocItem.parentNode; // HACK - I know that containing div is parent of menuitem should search for menuitem in parent chain
 | 
						|
    var displayState = "block";
 | 
						|
 | 
						|
    this.setActiveSubOpen(menuId);
 | 
						|
    // will set focus to first item
 | 
						|
    this.setActiveSubIndex(0);
 | 
						|
    // position drop menu
 | 
						|
 | 
						|
      var offTop= assocItem.offsetTop + "px";
 | 
						|
      var offLeft = assocItem.offsetLeft + assocItem.offsetWidth + "px";
 | 
						|
      with (menu.style) {
 | 
						|
        top=offTop;
 | 
						|
        left=offLeft;
 | 
						|
        display = displayState;
 | 
						|
      }
 | 
						|
 | 
						|
    var subItems =this.getSubMenuItems(menuId);
 | 
						|
    var first = document.getElementById(subItems[0]);
 | 
						|
    gFocusItem = first;
 | 
						|
 | 
						|
    setTimeout("doFocus();",0);
 | 
						|
    event.stopPropagation();
 | 
						|
    return false;  // do not  propagate event
 | 
						|
 | 
						|
}
 | 
						|
Menubar.prototype.hideSubMenu = function() {
 | 
						|
  var openId = this.getActiveSubOpen();
 | 
						|
  if (openId != null) {
 | 
						|
    var openSub = document.getElementById(openId + DROP_SUFFIX);
 | 
						|
    openSub.style.display="none";
 | 
						|
    this.setActiveSubOpen(null);
 | 
						|
    this.setActiveSubIndex(-1);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
Menubar.prototype.hideMenu = function(event) {
 | 
						|
  var isKey = false;
 | 
						|
    if (event.keyCode) {
 | 
						|
      isKey = true;
 | 
						|
  }
 | 
						|
  if ((isKey && event.keyCode == 13) || (isKey && event.keyCode == KEY_ESCAPE ) || !isKey) {
 | 
						|
    var isOpen = this.isActiveOpen();
 | 
						|
    var activeIndex = this.getActiveMenuIndex();
 | 
						|
    if (isOpen) {
 | 
						|
      var menu = document.getElementById((this.getMenus()[activeIndex] + DROP_SUFFIX));
 | 
						|
      // style="display:none" must be set on the drop elements to use the element.style.display syntax
 | 
						|
      // otherwise need to write cross browser routine to read the effective style (see DHTML book pg 878)
 | 
						|
      menu.style.display="none";
 | 
						|
      this.updateAllIndex(-1,false,-1);
 | 
						|
      this.hideSubMenu();
 | 
						|
      //event.cancelBubble = true; // this is not in the DOM but is supported by IE and Mozilla - could use stopPropagation();
 | 
						|
      gBlurItem = menu;
 | 
						|
      setTimeout("doBlur();",0);
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
Menubar.prototype.findMenuIndex = function(menuId) {
 | 
						|
  var menus = this.getMenus();
 | 
						|
  var menuLen = menus.length;
 | 
						|
  var idx = -1;
 | 
						|
  for (var i=0; i < menuLen; i++ ) {
 | 
						|
    if (menus[i] == menuId) {
 | 
						|
      idx = i;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return idx;
 | 
						|
}
 | 
						|
Menubar.prototype.clearMenu = function() {
 | 
						|
}
 | 
						|
 | 
						|
Menubar.prototype.doAlert = function (event, theElem, alertStr) {
 | 
						|
// only called when is enter key or mouse click
 | 
						|
  var isKey = false;
 | 
						|
    if (event.keyCode) {
 | 
						|
      isKey = true;
 | 
						|
  }
 | 
						|
  if (theElem.getAttribute("aria-disabled") !="true") {
 | 
						|
      this.hideMenu(event);
 | 
						|
      gAlertString = alertStr;
 | 
						|
      setTimeout("delayedAlert(gAlertString);",0);
 | 
						|
 | 
						|
  }
 | 
						|
  // always stop propagation of enter key or click
 | 
						|
  if (event.stopPropagation) {
 | 
						|
          event.stopPropagation();
 | 
						|
        }
 | 
						|
        else {
 | 
						|
          try {
 | 
						|
            event.cancelBubble=true;
 | 
						|
          } catch (e) {
 | 
						|
            ;
 | 
						|
          }
 | 
						|
      }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
  return false; // do not propagate
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
Menubar.prototype.focusItem = function(event,menuIndex, itemIndex) {
 | 
						|
// called from onmouseover of each menu item
 | 
						|
  // TODO add error handling
 | 
						|
  this.setActiveItemIndex(itemIndex);
 | 
						|
  this.setActiveMenuIndex(menuIndex);
 | 
						|
  //this.setActiveOpen(true);
 | 
						|
  gFocusItem = event.target;
 | 
						|
  setTimeout("doFocus();",0);
 | 
						|
}
 | 
						|
 | 
						|
Menubar.prototype.doActionTotal = function(event,tableId,key) {
 | 
						|
  this.hideMenu(event);
 | 
						|
   doTotals(tableId, key);
 | 
						|
   // always stop propagation of enter key or click
 | 
						|
    if (event.stopPropagation) {
 | 
						|
            event.stopPropagation();
 | 
						|
          }
 | 
						|
          else {
 | 
						|
            try {
 | 
						|
              event.cancelBubble=true;
 | 
						|
            } catch (e) {
 | 
						|
              ;
 | 
						|
            }
 | 
						|
      }
 | 
						|
 | 
						|
  return false;
 | 
						|
 | 
						|
}
 | 
						|
Menubar.prototype.doActionColor = function(event,colorScheme) {
 | 
						|
  this.hideMenu(event);
 | 
						|
   doColor(colorScheme);
 | 
						|
   // always stop propagation of enter key or click
 | 
						|
    if (event.stopPropagation) {
 | 
						|
            event.stopPropagation();
 | 
						|
          }
 | 
						|
          else {
 | 
						|
            try {
 | 
						|
              event.cancelBubble=true;
 | 
						|
            } catch (e) {
 | 
						|
              ;
 | 
						|
            }
 | 
						|
      }
 | 
						|
 | 
						|
  return false;
 | 
						|
 | 
						|
}
 | 
						|
function doAction(event, theElem) {
 | 
						|
 | 
						|
  var isKey = false;
 | 
						|
  if (event.keyCode) {
 | 
						|
    isKey = true;
 | 
						|
  }
 | 
						|
  var bDoAction = false;
 | 
						|
  if ((isKey && event.keyCode == 13) || !isKey) {
 | 
						|
    if (theElem.getAttribute("aria-disabled") =="true") {
 | 
						|
      bDoAction = false;
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      bDoAction = true;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  return bDoAction;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
var topMenu = new Menubar("menuBar");
 | 
						|
topMenu.addMenu("edit", new Array("cut","copy", "paste"));
 | 
						|
topMenu.addMenu("2", new Array("2.1sub", "2.2","2.3","2.4sub"));
 | 
						|
topMenu.addMenu("3", new Array("3.1", "3.2","3.3sub","3.4"));
 | 
						|
topMenu.addMenu("four", new Array("4.1", "4.2","4.3","4.4","4.5"));
 | 
						|
topMenu.addMenu("five", new Array("5.1", "5.2","5.3"));
 | 
						|
topMenu.addSubMenu("2.1sub", new Array("2.1.1", "2.1.2","2.1.3", "2.1.4", "2.1.5"));
 | 
						|
topMenu.addSubMenu("2.4sub", new Array("2.4.1", "2.4.2"));
 | 
						|
topMenu.addSubMenu("3.3sub", new Array("3.3.1", "3.3.2", "3.3.3"));
 | 
						|
 | 
						|
 | 
						|
 | 
						|
// global vars for storing selection and focus information; indexed by the id of the parent table element
 | 
						|
var gCurrentRow = new Array();
 | 
						|
var gCurrentCol = new Array();
 | 
						|
var gCurrentSelected = new Array();
 | 
						|
var gCurrentCell = new Array();
 | 
						|
var gSelectedCells = new Array();
 | 
						|
var gSelecting = new Array();
 | 
						|
var gTabCount = new Array();
 | 
						|
 | 
						|
gCurrentRow ["table2"] = -1;   // 0 based row number
 | 
						|
gCurrentCol["table2"] = 0;  // 0 based column number
 | 
						|
gCurrentSelected ["table2"]=null;  // currently selected row object
 | 
						|
gCurrentCell["table2"] =null; // currently selected cell object
 | 
						|
gSelectedCells["table2"] = new Array();  // array of currently selected cell objects
 | 
						|
gSelecting["table2"] = false;  // boolean indicating if currently  in multi-select mode ( quicker than checking for entries in gCurrentSelectedCells
 | 
						|
gTabCount["table2"] = 0;  // need to know if tabbing into or out of control
 | 
						|
 | 
						|
 | 
						|
// global to store the item to be focused
 | 
						|
gFocusItem =null;
 | 
						|
// global to pass the item needing focus to doBlur() via a setTimeout()
 | 
						|
var gBlurItem= null;
 | 
						|
// global to store the alert string so can call alert() via setTimeout()
 | 
						|
gAlertString = "";
 | 
						|
 | 
						|
function doFocus() {
 | 
						|
  try {
 | 
						|
    if (gFocusItem != null) {
 | 
						|
      gFocusItem.focus();
 | 
						|
      gFocusItem=null;
 | 
						|
    }
 | 
						|
  } catch (error) {
 | 
						|
    alert("DEBUG: error in doFocus()");
 | 
						|
  }
 | 
						|
}
 | 
						|
function doBlur() {
 | 
						|
  try {
 | 
						|
    if (gBlurItem != null) {
 | 
						|
      gBlurItem.blur();
 | 
						|
      gBlurItem=null;
 | 
						|
    }
 | 
						|
  } catch (error) {
 | 
						|
    alert("DEBUG: error in doBlur()");
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function delayedAlert() {
 | 
						|
  alert(gAlertString);
 | 
						|
  gAlertString = "";
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
function setStyle(theObj, styleName, styleValue, priority) {
 | 
						|
  var bSuccess = false;
 | 
						|
 | 
						|
  try {
 | 
						|
    if (theObj.style && theObj.style.setProperty) {
 | 
						|
      theObj.style.setProperty(styleName, styleValue,priority);
 | 
						|
      bSuccess = true;
 | 
						|
    }
 | 
						|
  } catch (ex) {
 | 
						|
    alert('exception caught setting style: ' + ex.message); // cannot do anything try the next method
 | 
						|
  }
 | 
						|
  if (!bSuccess) {
 | 
						|
    try {
 | 
						|
      theObj.style[styleName] = styleValue;
 | 
						|
      bSuccess = true;
 | 
						|
    } catch (exNext) {
 | 
						|
      alert('exception caught setting direct style: ' + exNext.message); // cannot do anything
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return bSuccess;
 | 
						|
} // end of setStyle
 | 
						|
 | 
						|
function findParentElem(evt, parentName) {
 | 
						|
  var srcElem = null;
 | 
						|
try {
 | 
						|
  if (evt.srcElement) {
 | 
						|
    srcElem = evt.srcElement;
 | 
						|
  }
 | 
						|
  else {
 | 
						|
    srcElem = evt.currentTarget;
 | 
						|
  }
 | 
						|
 | 
						|
  if (srcElem != null ) {
 | 
						|
    // find the source table for the keyup event
 | 
						|
    var tagName = srcElem.tagName;
 | 
						|
    if (tagName != parentName) {
 | 
						|
      // search parent heirarchy
 | 
						|
      var parNode = srcElem.parentNode;
 | 
						|
      while (parNode != null) {
 | 
						|
        if (parNode.type == document.ELEMENT_TYPE) {
 | 
						|
          if (parNode.tagName.toLowerCase() == parentName) {
 | 
						|
            srcElem = parNode;
 | 
						|
            break;
 | 
						|
          }
 | 
						|
        }
 | 
						|
        parNode = parNode.parentNode;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
}
 | 
						|
catch (anyError) {
 | 
						|
  ; //srcElem = null;
 | 
						|
}
 | 
						|
  return srcElem;
 | 
						|
}
 | 
						|
 | 
						|
function findParent (srcElem, parentName) {
 | 
						|
try {
 | 
						|
  if (srcElem != null ) {
 | 
						|
    // find the source table for the keyup event
 | 
						|
    var tagName = srcElem.tagName;
 | 
						|
    if (tagName != parentName) {
 | 
						|
      // search parent heirarchy
 | 
						|
      var parNode = srcElem.parentNode;
 | 
						|
      while (parNode != null) {
 | 
						|
        if (parNode.type == document.ELEMENT_TYPE) {
 | 
						|
          if (parNode.tagName.toLowerCase() == parentName) {
 | 
						|
            srcElem = parNode;
 | 
						|
            break;
 | 
						|
          }
 | 
						|
        }
 | 
						|
        parNode = parNode.parentNode;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
}
 | 
						|
catch (anyError) {
 | 
						|
  ; //srcElem = null;
 | 
						|
}
 | 
						|
  return srcElem;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
function doTableKeys(e) {
 | 
						|
  var evt = (e != null) ? e : ((event) ? event : null);  // Mozilla will include e parameter
 | 
						|
  var bDefaultHandler = true;
 | 
						|
  try {
 | 
						|
  var testCell = document.getElementById("testCell"); // could cache this test object for better performance
 | 
						|
  if (!testCell.focus) {
 | 
						|
  // test cell is the id of a table cell element with a  tabindex="-1".  See if we can set focus to it, if
 | 
						|
  // not, just return, we can not support arrow keys
 | 
						|
    //alert('no arrow key support');
 | 
						|
    return bDefaultHandler;
 | 
						|
  }
 | 
						|
 | 
						|
  var srcElem = findParentElem(evt,"table");
 | 
						|
  //srcElem=document.getElementById(srcElem.getAttribute("id"));
 | 
						|
  var activeTableId = srcElem.getAttribute("id");
 | 
						|
  var rows = srcElem.rows;
 | 
						|
  var key = evt.keyCode;
 | 
						|
  var bCtrlKey = evt.ctrlKey;
 | 
						|
  var  currentRow = gCurrentRow[activeTableId];
 | 
						|
  var currentCol = gCurrentCol[activeTableId];
 | 
						|
  var nextCell = null;
 | 
						|
 | 
						|
  if ((key >= KEY_LEFT && key <= KEY_DOWN) && !evt.altKey) {
 | 
						|
    var nextRow = null;
 | 
						|
    var nextRowNum = 0;
 | 
						|
    var nextCol = null;
 | 
						|
    var nextColNum = 0;
 | 
						|
 | 
						|
 | 
						|
    if (gSelecting[activeTableId] == true && bCtrlKey == false) {
 | 
						|
      clearSelected(activeTableId);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    // process arrows
 | 
						|
    if (key == KEY_DOWN ) { // down
 | 
						|
 | 
						|
      nextRowNum = currentRow + 1;
 | 
						|
      if (rows.length > nextRowNum) {
 | 
						|
      var prevCell = null;
 | 
						|
        if (currentRow != -1) {
 | 
						|
          var prevRow = rows[currentRow];
 | 
						|
          prevCell = prevRow.cells[currentCol];
 | 
						|
        }
 | 
						|
        nextRow = rows[nextRowNum];
 | 
						|
        gCurrentRow[activeTableId]=nextRowNum;
 | 
						|
        nextCell = nextRow.cells[currentCol];
 | 
						|
        gCurrentCell[activeTableId] = nextCell;
 | 
						|
        processMovement(prevCell, nextCell, bCtrlKey, activeTableId);
 | 
						|
 | 
						|
        gFocusItem = nextCell;
 | 
						|
        setTimeout("doFocus()", 0);
 | 
						|
 | 
						|
      }
 | 
						|
    } // end of down
 | 
						|
    if (key == KEY_UP) { // up
 | 
						|
      nextRowNum = currentRow -1;
 | 
						|
      if (nextRowNum >=0 ) {
 | 
						|
        var prevCell = null;
 | 
						|
        if (currentRow != -1) {
 | 
						|
          var prevRow = rows[currentRow];
 | 
						|
          prevCell = prevRow.cells[currentCol];
 | 
						|
        }
 | 
						|
        nextRow = rows[nextRowNum];
 | 
						|
        gCurrentRow[activeTableId]=nextRowNum;
 | 
						|
        nextCell = nextRow.cells[currentCol];
 | 
						|
        gCurrentCell[activeTableId] = nextCell;
 | 
						|
        processMovement(prevCell, nextCell, bCtrlKey, activeTableId);
 | 
						|
        gFocusItem = nextCell;
 | 
						|
        setTimeout("doFocus()", 0);
 | 
						|
 | 
						|
      }
 | 
						|
 | 
						|
    } // end of up
 | 
						|
    if (key == KEY_LEFT ) { // left
 | 
						|
      nextColNum = currentCol -1;
 | 
						|
      var prevCell = null;
 | 
						|
      if (nextColNum >= 0 && currentRow >= 0) {
 | 
						|
        nextRow = rows[currentRow];
 | 
						|
        if (nextRow != null) {
 | 
						|
          prevCell = nextRow.cells[currentCol];
 | 
						|
        }
 | 
						|
        nextCell = nextRow.cells[nextColNum];
 | 
						|
        gCurrentCol[activeTableId] = nextColNum;
 | 
						|
        gCurerntCell  = nextCell;
 | 
						|
        processMovement(prevCell, nextCell, bCtrlKey, activeTableId);
 | 
						|
 | 
						|
        gFocusItem = nextCell;
 | 
						|
        setTimeout("doFocus()", 0);
 | 
						|
 | 
						|
      }
 | 
						|
 | 
						|
    } // end of if left
 | 
						|
    if (key == KEY_RIGHT ) { // right
 | 
						|
      nextColNum = currentCol + 1;
 | 
						|
      var prevCell = null;
 | 
						|
      if (currentRow >=0 ) {
 | 
						|
        nextRow = rows[currentRow];
 | 
						|
        if (nextRow != null && nextColNum < nextRow.cells.length) {
 | 
						|
          prevCell = nextRow.cells[currentCol];
 | 
						|
          nextCell = nextRow.cells[nextColNum];
 | 
						|
          gCurrentCol[activeTableId] = nextColNum;
 | 
						|
          gCurrentCell  = nextCell;
 | 
						|
          processMovement(prevCell, nextCell, bCtrlKey, activeTableId);
 | 
						|
 | 
						|
          gFocusItem = nextCell;
 | 
						|
          setTimeout("doFocus()", 0);
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
 | 
						|
    } // end of if right
 | 
						|
    bDefaultHandler = false;
 | 
						|
 | 
						|
  if (nextCell != null) {
 | 
						|
    gCurrentCell[activeTableId]= nextCell;
 | 
						|
  }
 | 
						|
  } // end of if arrows
 | 
						|
  else if (key == KEY_SPACE && bCtrlKey) {
 | 
						|
    var currentCell = gCurrentCell[activeTableId];
 | 
						|
 | 
						|
    var bSelected = toggleSelection(activeTableId,currentCell);
 | 
						|
    if (bSelected == "true") {
 | 
						|
      currentCell.className = "cellFocusSelect";
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      currentCell.className = "cellFocus";
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
  else if (key == KEY_ESCAPE) {
 | 
						|
    // pressing escape when editing a cell will end editng - this is not really what we want since
 | 
						|
    // it does not allow the escape to clear the input cell field first - I tried that in ignoreArrows() but
 | 
						|
    // could not get focus back to the cell after the escape.
 | 
						|
    if (gCurrentCell[activeTableId] != null) {
 | 
						|
      endEdit(gCurrentCell[activeTableId], false);
 | 
						|
      gFocusItem = gCurrentCell[activeTableId];
 | 
						|
    setTimeout("doFocus()",0);
 | 
						|
    bDefaultHandler = false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  else if (key == KEY_TAB && !evt.shiftKey ) {
 | 
						|
    // table is losing focus set the style of the current cell to cellBlur
 | 
						|
    gCurrentCell[activeTableId].className = "cellBlur";
 | 
						|
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  } // end of try
 | 
						|
  catch (errorInfo) {
 | 
						|
    //alert(errorInfo);
 | 
						|
  }
 | 
						|
  return bDefaultHandler;
 | 
						|
}
 | 
						|
function processMovement(prevCell, nextCell, bCtrlKey, activeTableId) {
 | 
						|
  if (bCtrlKey == true) {
 | 
						|
          // leave prev cell in same state
 | 
						|
          // set style of prevCell to appropriate state
 | 
						|
          // set style of current cell to cellFocus
 | 
						|
          if (prevCell != null) {
 | 
						|
              var prevStyle = "";
 | 
						|
              if (prevCell.getAttribute("aria-selected") == "true" ) {
 | 
						|
                prevStyle = "cellSelect";
 | 
						|
              }
 | 
						|
              prevCell.className = prevStyle;
 | 
						|
          }
 | 
						|
          nextCell.className = "cellFocus";
 | 
						|
          gSelecting[activeTableId] = true;
 | 
						|
        }
 | 
						|
        else {
 | 
						|
          //bCtrlKey == false
 | 
						|
          // clear select on previous cell
 | 
						|
          // set style of previous cell to empty
 | 
						|
          // select current cell
 | 
						|
          // set style of current cell to cellFocusSelect
 | 
						|
          if (prevCell != null) {
 | 
						|
            removeSelection(activeTableId, prevCell);
 | 
						|
            prevCell.className = "";
 | 
						|
          }
 | 
						|
            addSelection(activeTableId, nextCell);
 | 
						|
            nextCell.className="cellFocusSelect";
 | 
						|
          }
 | 
						|
}
 | 
						|
 | 
						|
function addSelection(activeTableId, currentCell) {
 | 
						|
    var selectedList = gSelectedCells[activeTableId];
 | 
						|
    var isSelected = currentCell.getAttribute("aria-selected");
 | 
						|
    if (isSelected != "true") {
 | 
						|
      // set selected and add to selection list
 | 
						|
      currentCell.setAttribute("aria-selected", "true");
 | 
						|
      selectedList[selectedList.length] = currentCell;
 | 
						|
      gSelectedCells[activeTableId] = selectedList;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
function removeSelection(activeTableId, currentCell) {
 | 
						|
  var selectedList = gSelectedCells[activeTableId];
 | 
						|
    var isSelected = currentCell.getAttribute("aria-selected");
 | 
						|
    if (isSelected == "true" ) {
 | 
						|
      currentCell.removeAttribute("aria-selected");
 | 
						|
      // remove from list of selected cells
 | 
						|
      var idx = -1;
 | 
						|
      for (var j=0; j < selectedList.length; j++) {
 | 
						|
        if (selectedList[j] == currentCell) {
 | 
						|
          idx = j;
 | 
						|
          break;
 | 
						|
        }
 | 
						|
      }
 | 
						|
      if (idx <= 0) {
 | 
						|
        // remove the cell from the selected List
 | 
						|
        gSelectedCells[activeTableId] = selectedList.splice(idx,1,"");
 | 
						|
      }
 | 
						|
    }
 | 
						|
}
 | 
						|
function toggleSelection(activeTableId, currentCell) {
 | 
						|
// toggle selection of the cell
 | 
						|
  var selectedState = "";
 | 
						|
  var selectedList = gSelectedCells[activeTableId];
 | 
						|
  var isSelected = currentCell.getAttribute("aria-selected");
 | 
						|
    if (isSelected == "true" ) {
 | 
						|
      removeSelection(activeTableId, currentCell);
 | 
						|
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      addSelection(activeTableId,currentCell);
 | 
						|
      selectedState = "true"
 | 
						|
    }
 | 
						|
    return selectedState; // return current selection state of cell
 | 
						|
} // end of toggleSelection
 | 
						|
 | 
						|
function clearSelected(activeTableId) {
 | 
						|
  // clear the selected cells
 | 
						|
    gSelecting[activeTableId] = false;
 | 
						|
    var selectedCells = gSelectedCells[activeTableId];
 | 
						|
    for (var k=0; k < selectedCells.length; k++) {
 | 
						|
      selectedCells[k].className = "";
 | 
						|
      selectedCells[k].setAttribute("aria-selected", "false");
 | 
						|
    }
 | 
						|
    gSelectedCells[activeTableId] = new Array();  // just create new, empty array
 | 
						|
} // end of clearSelected()
 | 
						|
 | 
						|
function doClick(e,rowNum, colNum) {
 | 
						|
  /* put the doClick() in each TD element and pass the row and column number because it was the easiest way to figure out what
 | 
						|
  row and column was clicked in both IE and Mozilla.  Mozilla gives the element with the handler as the currentTarget rather than the
 | 
						|
  actual element.  For example, with onclick on the TABLE, Mozilla gives the event.currentTarget as the TABLE when click on a cell.
 | 
						|
  IE gives the event.srcElement as the TD that was clicked on.
 | 
						|
  Also, could probably determine row and column programmatically if necessary rather than passing rowNum and colNum. Or, pass the element itself!
 | 
						|
  */
 | 
						|
 | 
						|
  var evt = (e != null) ? e : ((event) ? event : null);  // Mozilla will include e parameter
 | 
						|
  var srcElem = findParentElem(evt,"table");
 | 
						|
  var activeTableId = srcElem.getAttribute("id");
 | 
						|
  var prevCell = gCurrentCell[activeTableId];
 | 
						|
  var rows = document.getElementById(activeTableId).rows;
 | 
						|
  var thisRow = rows[rowNum];
 | 
						|
  var thisCell = thisRow.cells[colNum];
 | 
						|
  // update the global variables for the clicked on cell
 | 
						|
  gCurrentCell[activeTableId] = thisCell;
 | 
						|
  gCurrentRow[activeTableId] = rowNum;
 | 
						|
  gCurrentCol[activeTableId] = colNum;
 | 
						|
  var bCtrlKey = evt.ctrlKey;
 | 
						|
  var bSameCell = (thisCell == prevCell);
 | 
						|
 | 
						|
  if (gSelecting[activeTableId] == true && bCtrlKey == false) {
 | 
						|
    clearSelected(activeTableId);
 | 
						|
  }
 | 
						|
 | 
						|
  if (bCtrlKey == false && !bSameCell) {
 | 
						|
    // remove selection from prev cell
 | 
						|
    // add this cell to selection
 | 
						|
    // set state of prev cell to empty
 | 
						|
    // set state of this cell to focusSelect
 | 
						|
    if (prevCell != null) {
 | 
						|
      removeSelection(activeTableId, prevCell);
 | 
						|
      prevCell.className = "";
 | 
						|
    }
 | 
						|
    addSelection(activeTableId, thisCell);
 | 
						|
    thisCell.className="cellFocusSelect";
 | 
						|
  }
 | 
						|
  else if (bCtrlKey == true && !bSameCell) {
 | 
						|
    // leave prev cell in same selection state
 | 
						|
    // update style of prev cell based on state
 | 
						|
    // add this cell to selection
 | 
						|
    // set this cell style to focusselect
 | 
						|
    if (prevCell != null) {
 | 
						|
      var prevStyle = "";
 | 
						|
      if (prevCell.getAttribute("aria-selected") == "true" ) {
 | 
						|
        prevStyle = "cellSelect";
 | 
						|
      }
 | 
						|
        prevCell.className = prevStyle;
 | 
						|
    }
 | 
						|
    addSelection(activeTableId, thisCell);
 | 
						|
    thisCell.className="cellFocusSelect";
 | 
						|
    gSelecting[activeTableId] = true;
 | 
						|
  }
 | 
						|
  else if (bCtrlKey == true && bSameCell) {
 | 
						|
    var bSelected = toggleSelection(activeTableId,thisCell);
 | 
						|
      if (bSelected == "true") {
 | 
						|
        thisCell.className = "cellFocusSelect";
 | 
						|
      }
 | 
						|
      else {
 | 
						|
        thisCell.className = "cellFocus";
 | 
						|
      }
 | 
						|
  }
 | 
						|
  gFocusItem = thisCell;
 | 
						|
  setTimeout("doFocus();", 0);
 | 
						|
 | 
						|
} // end of doClick
 | 
						|
 | 
						|
 | 
						|
function doEvent(evtTarget, evtName, theEvent) {
 | 
						|
  if (evtTarget.fireEvent) {
 | 
						|
    // is IE, need "on" in front of event name
 | 
						|
    evtName = "on" + evtName;
 | 
						|
    evtTarget.fireEvent(evtName, theEvent);
 | 
						|
  }
 | 
						|
  else {
 | 
						|
    evtTarget.dispatchEvent(theEvent);
 | 
						|
  }
 | 
						|
  return;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
function doLink(linkId) {
 | 
						|
  var theLink = document.getElementById(linkId);
 | 
						|
  var bTryAgain = false;
 | 
						|
  try {
 | 
						|
    theLink.click();  // for IE
 | 
						|
  } catch (clickError) {
 | 
						|
    bTryAgain = true;
 | 
						|
  }
 | 
						|
  if (bTryAgain) {
 | 
						|
    try {
 | 
						|
      var mClick = document.createEvent("MouseEvents");
 | 
						|
      mClick.initEvent("click",true, true);
 | 
						|
      theLink.dispatchEvent(mClick);
 | 
						|
    } catch (e) {
 | 
						|
      alert(e.message); //+ "DEBUG: can't fire event to link element");
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return false;
 | 
						|
}
 | 
						|
 | 
						|
function doEdit(event, parentCell, colNumber) {
 | 
						|
// edit a spreadsheet cell.   Find text node of cell and store data.  Create an input field and label and add to cell; set text node value into cell; remove text node;
 | 
						|
  if (parentCell.getAttribute("aria-readonly") =="true") {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  if (parentCell.editMode != "true") {
 | 
						|
    var inputId = "col" + colNumber;
 | 
						|
    var inputField = document.createElement("input");
 | 
						|
    setStyle(inputField, "border", "0", "");
 | 
						|
    inputField.setAttribute("id", inputId);
 | 
						|
    var dataNode = null;
 | 
						|
    var editData = "";
 | 
						|
    if (parentCell.hasChildNodes() ) {
 | 
						|
      // TODO find parentCells text node - for now just assuming it is first child
 | 
						|
       dataNode = parentCell.firstChild;
 | 
						|
       parentCell.removeChild(dataNode);
 | 
						|
       editData = dataNode.data;
 | 
						|
    }
 | 
						|
    parentCell.saveData = editData;
 | 
						|
    parentCell.appendChild(inputField);
 | 
						|
    inputField.setAttribute("value",editData);
 | 
						|
    setStyle(inputField,"width", "100%","");
 | 
						|
    try {
 | 
						|
      inputField.addEventListener("blur",checkEdit, true);
 | 
						|
      inputField.addEventListener("keydown", ignoreArrows,true);  // process arrow key input so it does not  get up to parent table onkeydown
 | 
						|
    }
 | 
						|
    catch (ex) { // IE
 | 
						|
      inputField.attachEvent('blur',checkEdit, true);
 | 
						|
      inputField.attachEvent('keydown', ignoreArrows, true);
 | 
						|
    }
 | 
						|
 | 
						|
    // create label for the cell - use the columnheader as the label
 | 
						|
    var parentTable = findParent(parentCell, "table");
 | 
						|
    var colHeader = parentTable.rows[0].cells[colNumber];
 | 
						|
    inputField.setAttribute("aria-labelledby", colHeader.id);
 | 
						|
 | 
						|
    parentCell.editMode = "true";
 | 
						|
    // set focus to the input field
 | 
						|
    gFocusItem=inputField;
 | 
						|
    setTimeout("doFocus()", 0);
 | 
						|
  } // end of if edit
 | 
						|
  else   {
 | 
						|
    endEdit(parentCell,true);
 | 
						|
 | 
						|
    gFocusItem = parentCell;
 | 
						|
    setTimeout("doFocus()",0);
 | 
						|
 | 
						|
  } // end of else end edit
 | 
						|
 | 
						|
 | 
						|
} // end of doEdit()
 | 
						|
 | 
						|
function endEdit(parentCell, bSave) {
 | 
						|
// end editing remove input node, remove label node
 | 
						|
// currently VERY dependent upon the organization of the DOM
 | 
						|
// cell is in edit mode - store data and leave edit mode
 | 
						|
  // find the input field
 | 
						|
  if (parentCell.hasChildNodes() && parentCell.editMode == "true") {
 | 
						|
    var inputNode = findChildNode(parentCell,"input");
 | 
						|
    /*var inputNode = parentCell.firstChild;  // TODO should never be null but wrap in a try/catch
 | 
						|
    var childNodeName = inputNode.nodeName
 | 
						|
    childNodeName.toLowerCase();
 | 
						|
    while (childNodeName != "input" && inputNode != null) {
 | 
						|
        inputNode = inputNode.nextSibling;
 | 
						|
        childNodeName = inputNode.nodeName.toLowerCase();
 | 
						|
    }*/
 | 
						|
    if (inputNode != null) {
 | 
						|
      var storeData = parentCell.saveData;
 | 
						|
      if (bSave == true) {
 | 
						|
        storeData = inputNode.value;
 | 
						|
      }
 | 
						|
      // remove event listenters
 | 
						|
      try {
 | 
						|
        inputNode.removeEventListener("blur",checkEdit,true);
 | 
						|
        inputNode.removeEventListener("keydown", ignoreArrows, true);
 | 
						|
      }
 | 
						|
      catch (ex) {
 | 
						|
        inputField.detachEvent('blur',checkEdit, true);
 | 
						|
        inputField.detachEvent('keydown', ignoreArrows, true);
 | 
						|
      }
 | 
						|
 | 
						|
      parentCell.removeChild(inputNode);
 | 
						|
      var labelNode = findChildNode(parentCell, "label");
 | 
						|
      if (labelNode != null) {
 | 
						|
        parentCell.removeChild(labelNode);
 | 
						|
      }
 | 
						|
      var newDataNode = document.createTextNode(storeData);
 | 
						|
      parentCell.appendChild(newDataNode);
 | 
						|
      parentCell.editMode="false";
 | 
						|
    }
 | 
						|
  }
 | 
						|
} // end of endEdit
 | 
						|
 | 
						|
function findChildNode(startNode, nodeName) {
 | 
						|
// TODO - currently only searchs siblings of startNode - does not recurse
 | 
						|
  var foundNode = null;
 | 
						|
  try {
 | 
						|
    if (startNode.hasChildNodes() ) {
 | 
						|
    var testNode = startNode.firstChild;
 | 
						|
    while (testNode != null && (testNode.nodeName.toLowerCase() != nodeName)) {
 | 
						|
      testNode = testNode.nextSibling;
 | 
						|
    }
 | 
						|
    foundNode = testNode;
 | 
						|
  }
 | 
						|
  } catch (error) {
 | 
						|
    alert("DEBUG - error in findChildNode() - " + error.message);
 | 
						|
    foundNode = null;
 | 
						|
  }
 | 
						|
  return foundNode;
 | 
						|
}
 | 
						|
 | 
						|
function checkEdit(event) {
 | 
						|
try {
 | 
						|
  var srcElem = findParentElem(event,"table");
 | 
						|
  var currentCell = gCurrentCell[srcElem.id];
 | 
						|
  var parentCell = findParentElem(event,"td");
 | 
						|
  if (parentCell == currentCell) {
 | 
						|
    if (parentCell && parentCell.editMode == "true") {
 | 
						|
      endEdit(parentCell,true);
 | 
						|
    }
 | 
						|
 | 
						|
    gFocusItem = srcElem;
 | 
						|
    setTimeout("doFocus();", 0);
 | 
						|
  }
 | 
						|
} catch (e) {
 | 
						|
  alert("DEBUG - error in checkEdit: " + e.message);
 | 
						|
}
 | 
						|
}
 | 
						|
 | 
						|
function ignoreArrows(event) {
 | 
						|
  var eventTarget = event.target;
 | 
						|
  var key = event.keyCode;
 | 
						|
  bEventContinue = true;  // let input field handle the key
 | 
						|
  if (key >=KEY_LEFT && key <= KEY_DOWN) {
 | 
						|
    if (event.stopPropagation) {
 | 
						|
            event.stopPropagation();
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            event.cancelBubble = true;
 | 
						|
        }
 | 
						|
  }
 | 
						|
  /* This does not work - I can not get focus back into the cell after the escape!!!
 | 
						|
  else if (key == KEY_ESCAPE) {
 | 
						|
    // first let escape be used to clear the cell, if cell is empty end editing
 | 
						|
    if (eventTarget.value == "") {
 | 
						|
      if (event.stopPropagation) {
 | 
						|
        event.stopPropagation();
 | 
						|
      }
 | 
						|
      else {
 | 
						|
        event.cancelBubble = true;
 | 
						|
      }
 | 
						|
      var srcElem = findParentElem(event,"table");
 | 
						|
        var currentCell = gCurrentCell[srcElem.id];
 | 
						|
        var parentCell = findParentElem(event,"td");
 | 
						|
        if (parentCell == currentCell) {
 | 
						|
          if (parentCell && parentCell.editMode == "true") {
 | 
						|
            endEdit(parentCell,false);
 | 
						|
          }
 | 
						|
 | 
						|
        }
 | 
						|
        // focus the table - that will focus the currentCell
 | 
						|
        gFocusItem = srcElem;
 | 
						|
        setTimeout("doFocus();", 0);
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
  } */
 | 
						|
 | 
						|
 | 
						|
} // end of ignoreArrows
 | 
						|
function setCell(tableId) {
 | 
						|
  var currentCell = gCurrentCell[tableId];
 | 
						|
  if (currentCell == null) {
 | 
						|
    // no cell selected, set it to first cell
 | 
						|
    var grid = document.getElementById(tableId);
 | 
						|
    var rows = grid.rows;
 | 
						|
    var firstRow = rows[0];
 | 
						|
    currentCell = firstRow.cells[0];
 | 
						|
    gCurrentRow[tableId] = 0;
 | 
						|
    gCurrentCol[tableId] = 0;
 | 
						|
    gCurrentCell[tableId] = currentCell;
 | 
						|
 | 
						|
  }
 | 
						|
  currentCell.className="cellFocusSelect";
 | 
						|
  gFocusItem = currentCell;
 | 
						|
  setTimeout("doFocus()", 0);
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// would like to change the style of the cell when focus leaves the table completely but not sure how to implement since table gets onblur when each cell loses focus
 | 
						|
function blurCell(event, tableId) {
 | 
						|
    var currentCell = gCurrentCell[tableId];
 | 
						|
    if (currentCell != null) {
 | 
						|
      currentCell.className="cellBlur";
 | 
						|
    }
 | 
						|
 | 
						|
  // else do nothing
 | 
						|
}
 | 
						|
 | 
						|
// very specific function to change the styles on the page
 | 
						|
function doColor(colorScheme) {
 | 
						|
 | 
						|
  // get the styles
 | 
						|
  var oSS = pageGetStyleSheet("basic", null);
 | 
						|
  var ssRules = cssGetRules(oSS);
 | 
						|
 | 
						|
  var colorArray;
 | 
						|
  if (ssRules != null) {
 | 
						|
    switch(colorScheme) {
 | 
						|
      case "grey":
 | 
						|
        colorArray = new Array("#C0C0C0","#F5F5F5","#999999","#F5F5F5");
 | 
						|
        changeColors(ssRules, colorArray);
 | 
						|
        break;
 | 
						|
      case "blues":
 | 
						|
        colorArray = new Array("#00CED1", "#B0E0E6","#000080","#E0FFFF");
 | 
						|
        changeColors(ssRules, colorArray);
 | 
						|
        break;
 | 
						|
      case "green":
 | 
						|
        colorArray = new Array("#3CB371","#90EE90","#008000","#F0FFF0");
 | 
						|
        changeColors(ssRules, colorArray);
 | 
						|
        break;
 | 
						|
      case "rose":
 | 
						|
        colorArray = new Array("#CD5C5C","#F08080","#800000","#FFE4E1");
 | 
						|
        changeColors(ssRules, colorArray);
 | 
						|
      default:
 | 
						|
        // do nothing
 | 
						|
      break;
 | 
						|
    } // end switch
 | 
						|
  }
 | 
						|
 | 
						|
  return false; // do not propagate
 | 
						|
}
 | 
						|
function changeColors(ssRules, colorArray) {
 | 
						|
  var theRule;
 | 
						|
  // menubar background-color
 | 
						|
  theRule = cssGetRule(ssRules, "menubar");
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[0]);
 | 
						|
  // menu background-color
 | 
						|
  theRule = cssGetRule(ssRules, "menu");
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[0]);
 | 
						|
  theRule = cssGetRule(ssRules,"topMenu");
 | 
						|
  changeStyleRule(theRule,  "border-color", colorArray[0]);
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[0]);
 | 
						|
  theRule = cssGetRule(ssRules, "cellFocusSelect");
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[0]);
 | 
						|
  theRule = cssGetRule(ssRules, "table");
 | 
						|
  changeStyleRule(theRule, "border-color", colorArray[0]);
 | 
						|
  theRule = cssGetRule(ssRules, "menudrop");
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[1]);
 | 
						|
  changeStyleRule(theRule, "border-color",colorArray[1]);
 | 
						|
  theRule = cssGetRule(ssRules, "cellSelect");
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[3]);
 | 
						|
  theRule = cssGetRule(ssRules, "topMenu:focus");
 | 
						|
  changeStyleRule(theRule, "border-color", colorArray[2]);
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[2]);
 | 
						|
  theRule = cssGetRule(ssRules, "topMenu:hover");
 | 
						|
  changeStyleRule(theRule,  "border-color", colorArray[2]);
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[2]);
 | 
						|
  theRule = cssGetRule(ssRules, "menuitem:focus");
 | 
						|
  changeStyleRule(theRule,  "border-color", colorArray[2]);
 | 
						|
  changeStyleRule(theRule,  "background-color", colorArray[2]);
 | 
						|
  theRule = cssGetRule(ssRules, "menuitem:hover");
 | 
						|
  changeStyleRule(theRule, "border-color", colorArray[2]);
 | 
						|
  changeStyleRule(theRule, "background-color", colorArray[2]);
 | 
						|
  //theRule = cssGetRule(ssRules, "action");
 | 
						|
  //changeStyleRule(theRule,  "color", colorArray[2]);
 | 
						|
  theRule = cssGetRule(ssRules, "cellBlur");
 | 
						|
  changeStyleRule(theRule,  "backgournd-color", colorArray[3]);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
function doTotals(tableId, key) {
 | 
						|
// simple function to do some totaling of information in the table
 | 
						|
// hard coded to the format of this particular table (i.e. for demo purposes only - NOT general purpose)
 | 
						|
// id of the table containing the data
 | 
						|
// keyName - item name we are totaling
 | 
						|
// column numbers are hard coded
 | 
						|
 | 
						|
var DATE_COL = 1;
 | 
						|
var EXPENSE_COL = 2;
 | 
						|
var display= "no results";
 | 
						|
var results;
 | 
						|
bEventContinue = false;
 | 
						|
try {
 | 
						|
  var activeTable = document.getElementById(tableId);
 | 
						|
  var tableRows = activeTable.rows;
 | 
						|
 | 
						|
  //var prevRow = rows[currentRow];
 | 
						|
  //        prevCell = prevRow.cells[currentCol];
 | 
						|
  var lcKey = key.toLowerCase();
 | 
						|
  if (lcKey == "date") {
 | 
						|
    display = "";
 | 
						|
    var exception = "";
 | 
						|
    var dates = new Array();
 | 
						|
    // find all unique dates then total each
 | 
						|
    for(var i=1; i<tableRows.length; i++) {
 | 
						|
      exception="";  //reset
 | 
						|
      var bFound = false;
 | 
						|
      var dateCell = tableRows[i].cells[DATE_COL];
 | 
						|
        if (dateCell.firstChild && dateCell.firstChild.data) {
 | 
						|
            var cellData =dateCell.firstChild.data;
 | 
						|
            if (i == 1) {
 | 
						|
              // first cell - force adding date to array
 | 
						|
              bFound = false;
 | 
						|
            }
 | 
						|
            else {
 | 
						|
              // see if date already exists in array
 | 
						|
              for(var j=0; j<dates.length; j++) {
 | 
						|
                if (dates[j] == cellData) {
 | 
						|
                  bFound = true;
 | 
						|
                  break;
 | 
						|
                }
 | 
						|
              }
 | 
						|
            } // end of else
 | 
						|
            if (bFound == false) {
 | 
						|
              dates[dates.length] = cellData;
 | 
						|
              results = getData(tableRows,cellData,DATE_COL);
 | 
						|
              if (results.length > 0) {
 | 
						|
                var total = calcTotal(results);
 | 
						|
                if (total > 1000) {
 | 
						|
                  exception = " !!! EXCEPTION: daily total over $1000 !!!"
 | 
						|
                }
 | 
						|
                display += "Total for " + cellData + " is $" + total + exception + "\n";
 | 
						|
 | 
						|
              }
 | 
						|
            }
 | 
						|
          } // end of if celldata
 | 
						|
        } // end of for
 | 
						|
  } // end of if date
 | 
						|
  else {
 | 
						|
    results = getData(tableRows,lcKey,EXPENSE_COL);
 | 
						|
    if (results.length > 0) {
 | 
						|
        var total = calcTotal(results);
 | 
						|
        display = "Total for " + key + " is $" + total;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  gAlertString = display;
 | 
						|
  setTimeout("delayedAlert(gAlertString);",0);
 | 
						|
 | 
						|
} catch (error) {
 | 
						|
  alert("DEBUG- error in doTotals() " + error.message);
 | 
						|
  bEventContinue = true;
 | 
						|
}
 | 
						|
  return bEventContinue;
 | 
						|
}
 | 
						|
function getData(tableRows,lcKey, colNum) {
 | 
						|
// find all rows that contain key and store amount contents in array
 | 
						|
var AMOUNT_COL = 3;
 | 
						|
  var results = new Array();
 | 
						|
  for (var i=1; i<tableRows.length; i++) {
 | 
						|
    var keyCell = tableRows[i].cells[colNum];
 | 
						|
    if (keyCell.firstChild && keyCell.firstChild.data) {
 | 
						|
      var cellData =keyCell.firstChild.data;
 | 
						|
      cellData = cellData.toLowerCase();
 | 
						|
      if (cellData.indexOf(lcKey) > -1) {
 | 
						|
        var amtCell  = tableRows[i].cells[AMOUNT_COL];
 | 
						|
        var data = amtCell.firstChild.data; // lots of assumptions here!!!
 | 
						|
         results[results.length] = data;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return results;
 | 
						|
}
 | 
						|
function calcTotal(results) {
 | 
						|
  // results is array of strings to total - may have $
 | 
						|
  var total =0;
 | 
						|
  for (var i=0;  i < results.length; i++) {
 | 
						|
    var value = null;
 | 
						|
    var amt = results[i];
 | 
						|
    var idx = amt.indexOf('$');
 | 
						|
    if (idx > -1) {
 | 
						|
      amt = amt.substring(idx+1); // assumes only one $ and it is at the beginning
 | 
						|
    }
 | 
						|
    value = parseFloat(amt, 10);
 | 
						|
    if (value != NaN) {
 | 
						|
      total += value;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return total.toFixed(2);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-->
 | 
						|
</script>
 | 
						|
<style type="text/css" id="basic" title="basic">
 | 
						|
table {
 | 
						|
 empty-cells:show;
 | 
						|
 border-collapse: collapse;  // Show empty table cells in IE
 | 
						|
}
 | 
						|
 | 
						|
.menubar {
 | 
						|
  background-color:#C0C0C0;
 | 
						|
}
 | 
						|
.menu {
 | 
						|
  float:left;
 | 
						|
  width:5em;
 | 
						|
  padding:1px 3px;
 | 
						|
  background-color:#C0C0C0;
 | 
						|
  color:black;
 | 
						|
 | 
						|
}
 | 
						|
.menudrop {
 | 
						|
  display:none;
 | 
						|
  background-color:#F5F5F5;
 | 
						|
  width:150%;
 | 
						|
  border: solid #999999 1px;
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
.menusub {
 | 
						|
  display:none;
 | 
						|
  background-color:#F5F5F5;
 | 
						|
  border:solid #999999 1px;
 | 
						|
  position:absolute;
 | 
						|
  width:25%;
 | 
						|
}
 | 
						|
 | 
						|
.content {
 | 
						|
  margin-top:2em;
 | 
						|
  position:absolute;
 | 
						|
  clear:both;
 | 
						|
 | 
						|
}
 | 
						|
.topMenu {
 | 
						|
  border-style:solid;
 | 
						|
  border-color:#C0C0C0;
 | 
						|
  border-width:1px;
 | 
						|
  background-color:#C0C0C0;
 | 
						|
}
 | 
						|
 | 
						|
.topMenu:focus {
 | 
						|
  background-color:#999999;
 | 
						|
  border-style:dashed;
 | 
						|
  border-color:#999999;
 | 
						|
  border-width:1px;
 | 
						|
  color:white;
 | 
						|
}
 | 
						|
.topMenu:hover {
 | 
						|
  background-color:#999999;
 | 
						|
  border-style:dashed;
 | 
						|
  border-color:#999999;
 | 
						|
  border-width:1px;
 | 
						|
  color:white;
 | 
						|
}
 | 
						|
 | 
						|
.menuitem {
 | 
						|
  border-style:solid;
 | 
						|
  border-color:#F5F5F5;
 | 
						|
  border-width:1px;  /*color must be the same as background color (which is inherited from .menudrop) */
 | 
						|
  text-align:justify;
 | 
						|
}
 | 
						|
.menuitem:focus {
 | 
						|
  color:white;
 | 
						|
  background-color:#999999;
 | 
						|
  border-style:dashed;
 | 
						|
  border-color:#999999;
 | 
						|
  border-width:1px;
 | 
						|
 | 
						|
}
 | 
						|
.menuitem:hover {
 | 
						|
  background-color:#999999;
 | 
						|
  border-style:dashed;
 | 
						|
  border-color:#999999;
 | 
						|
  border-width:1px;
 | 
						|
  color:white;
 | 
						|
 | 
						|
}
 | 
						|
.menuitem[aria-disabled="true"] {
 | 
						|
  color:#666666;
 | 
						|
}
 | 
						|
.rowSelected {
 | 
						|
  background-color:#66CCCC;
 | 
						|
 | 
						|
}
 | 
						|
td[aria-readonly="true"] {
 | 
						|
  color:#666666;
 | 
						|
}
 | 
						|
.cellFocusSelect {
 | 
						|
  background-color:#CCCCCC;
 | 
						|
  outline: 1px dashed green;
 | 
						|
 | 
						|
}
 | 
						|
.cellFocus {
 | 
						|
  outline: 1px dashed green;
 | 
						|
}
 | 
						|
 | 
						|
.cellSelect {
 | 
						|
  background-color:#DCDCDC;
 | 
						|
}
 | 
						|
.cellBlur {
 | 
						|
  border-width:1px ;
 | 
						|
  border-style:dotted;
 | 
						|
  border-color:#999999;
 | 
						|
  background-color:#F5F5F5;
 | 
						|
}
 | 
						|
table, th, td {
 | 
						|
 | 
						|
  border-width:2px;
 | 
						|
  border-style:groove;
 | 
						|
  border-color:#CCCCCC;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
.action {
 | 
						|
  color:#0000FF;
 | 
						|
  text-decoration:underline;
 | 
						|
}
 | 
						|
a:visited {
 | 
						|
  color:#000066;
 | 
						|
}
 | 
						|
 | 
						|
.leftCellHi {
 | 
						|
  border-left:2px dotted #00FF00;
 | 
						|
  border-top:2px dotted #00FF00;
 | 
						|
  border-bottom:2px dotted #00FF00;
 | 
						|
}
 | 
						|
.middleCellHi {
 | 
						|
  border-top:2px dotted #00FF00;
 | 
						|
  border-bottom:2px dotted #00FF00;
 | 
						|
}
 | 
						|
 | 
						|
.rightCellHi {
 | 
						|
  border-right:2px dotted #00FF00;
 | 
						|
  border-top:2px dotted #00FF00;
 | 
						|
  border-bottom:2px dotted #00FF00;
 | 
						|
}
 | 
						|
.nosize {
 | 
						|
  position:absolute;
 | 
						|
  width:0px;
 | 
						|
  height:0px;
 | 
						|
  overflow:hidden;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
</style>
 | 
						|
 | 
						|
<style type="text/css"></style></head>
 | 
						|
<body onkeydown="topMenu.doMenu(event);" role="application" onload="gFocusItem = document.getElementById('table2'); setTimeout('doFocus();',0); ">
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<h1>Accessible Widgets </h1>
 | 
						|
  
 | 
						|
 | 
						|
<div style="position:absolute;z-index:2;">
 | 
						|
<div id="theMenuBar" class="menubar" role="menubar" onkeydown="return topMenu.doNavigation(event);" tabindex="-1">
 | 
						|
  <div class="menu" id="edit" onclick="topMenu.showMenu(event, this.id, false);" onkeydown="if (event.keyCode == 13 ) {topMenu.showMenu(event, this.id, true);}" onmouseover="topMenu.showMenu(event,this.id,false);" onmouseout="topMenu.hideMenu(event);">
 | 
						|
    <div tabindex="-1" role="menuitem" aria-haspopup="true" id="edittop" class="topMenu">Edit</div>
 | 
						|
    <div class="menudrop" role="menu" id="editItems">
 | 
						|
      <div id="cut" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do Cut');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'do cut');}" onmouseover="topMenu.focusItem(event,0,0);">Cut</div>
 | 
						|
      <div id="copy" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do Copy');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'do copy');}" onmouseover="topMenu.focusItem(event,0,1);">Copy</div>
 | 
						|
      <div id="paste" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do Paste');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'do paste');}" onmouseover="topMenu.focusItem(event,0,1);">Paste</div>
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
  <div class="menu" id="2" onclick="topMenu.showMenu(event, this.id,false);" onkeydown="if (event.keyCode == 13 ) {topMenu.showMenu(event, this.id, true);}" onmouseover="topMenu.showMenu(event,this.id,false);" onmouseout="topMenu.hideMenu(event);">
 | 
						|
    <div tabindex="-1" role="menuitem" aria-haspopup="true" id="2top" class="topMenu">View</div>
 | 
						|
    <div class="menudrop" role="menu" id="2Items" style="display:none;">
 | 
						|
      <div tabindex="-1" role="menuitem" aria-haspopup="true" id="2.1sub" class="menuitem" onkeydown="if (event.keyCode == 13 ) {return topMenu.showSubMenu(event,this.id);}">Themes          ></div>
 | 
						|
        <div class="menusub" role="menu" id="2.1subItems" style="display:none;">
 | 
						|
          <div id="2.1.1" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionColor(event,'grey');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionColor(event,'grey');}">Basic Grey </div>
 | 
						|
          <div id="2.1.2" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionColor(event,'blues');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionColor(event,'blues');}">The Blues</div>
 | 
						|
          <div id="2.1.3" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionColor(event,'green');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionColor(event,'green');}">Garden</div>
 | 
						|
          <div id="2.1.4" tabindex="-1" role="menuitem" class="menuitem" aria-disabled="true" onclick="return topMenu.doAlert(event,this,'do Item4');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionColor(event,'pink');}">In the Pink</div>
 | 
						|
          <div id="2.1.5" tabindex="-1" role="menuitem" class="menuitem" oonclick="return topMenu.doActionColor(event,'rose');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionColor(event,'rose');}">Rose </div>
 | 
						|
        </div><!-- end themes sub menu items -->
 | 
						|
        <div tabindex="-1" role="menuitem" class="menuitem" id="2.2">Hide</div>
 | 
						|
        <div tabindex="-1" role="menuitem" class="menuitem" id="2.3">Show</div>
 | 
						|
        <div tabindex="-1" role="menuitem" aria-haspopup="true" id="2.4sub" class="menuitem" onclick="return topMenu.showSubMenu(event,this.id);" onkeydown="if (event.keyCode == 13 ) {return topMenu.showSubMenu(event,this.id);}">More                ></div>
 | 
						|
        <!--<div tabindex="-1" role="menuitem" class="menuitem" id="2.4sub" onclick="return topMenu.showSubMenu(event,this.id);" onkeydown="if (event.keyCode == 13 ) {return topMenu.showSubMenu(event,this.id);}">More                ></div> -->
 | 
						|
          <div class="menusub" role="menu" id="2.4subItems" style="display:none">
 | 
						|
            <div id="2.4.1" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do Something 1');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'doSomething 1');}">one </div>
 | 
						|
            <div id="2.4.2" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do Something 2');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'doSomething 2');}">two</div>
 | 
						|
          </div> <!-- end of more sub menu -->
 | 
						|
      </div><!-- end View drop menu -->
 | 
						|
    </div>
 | 
						|
  <div class="menu" id="3" onclick="topMenu.showMenu(event, this.id,false);" onkeydown="if (event.keyCode == 13 ) {topMenu.showMenu(event, this.id, true);}" onmouseover="topMenu.showMenu(event,this.id,false);" onmouseout="topMenu.hideMenu(event);">
 | 
						|
  <div tabindex="-1" role="menuitem" aria-haspopup="true" id="3top" class="topMenu">Tools</div>
 | 
						|
        <div class="menudrop" role="menu" id="3Items" style="display:none;">
 | 
						|
          <div id="3.1" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do spell check');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'do spell check');}">Spelling...</div>
 | 
						|
          <div id="3.2" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do error checking');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'do error checking');}">Error Checking...</div>
 | 
						|
          <div id="3.3sub" tabindex="-1" role="menuitem" aria-haspopup="true" class="menuitem" onclick="return topMenu.showSubMenu(event,this.id);;" onkeydown="if (event.keyCode == 13) {return topMenu.showSubMenu(event,this.id);}">Show Rows    ></div>
 | 
						|
          <div class="menusub" role="menu" id="3.3subItems" style="display:none">
 | 
						|
                      <div id="3.3.1" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'highlight even rows');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'highlight even rows');}">even</div>
 | 
						|
                      <div id="3.3.2" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'highlight odd rows');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'hghlight odd rows');}">odd</div>
 | 
						|
                      <div id="3.3.3" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'highlight all rows');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'highlight all rows');}">all</div>
 | 
						|
          </div> <!-- end of more sub menu -->
 | 
						|
          <div id="3.4" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'do Options');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'do Options');}">Options... </div>
 | 
						|
        </div>
 | 
						|
  </div>
 | 
						|
  <div class="menu" id="four" onclick="topMenu.showMenu(event, this.id,false);" onkeydown="if (event.keyCode == 13 ) {topMenu.showMenu(event, this.id, true);}" onmouseover="topMenu.showMenu(event,this.id,false);" onmouseout="topMenu.hideMenu(event);">
 | 
						|
  <div tabindex="-1" role="menuitem" aria-haspopup="true" id="fourtop" class="topMenu">Totals</div>
 | 
						|
        <div class="menudrop" role="menu" id="fourItems" style="display:none;">
 | 
						|
          <div id="4.1" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionTotal(event,'table2','lodging');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionTotal(event,'table2','lodging');}">Lodging </div>
 | 
						|
          <div id="4.2" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionTotal(event,'table2','breakfast');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionTotal(event,'table2','breakfast');}">Breakfast </div>
 | 
						|
          <div id="4.3" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionTotal(event,'table2','lunch');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionTotal(event,'table2','lunch');}">Lunch </div>
 | 
						|
          <div id="4.4" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionTotal(event,'table2','dinner');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionTotal(event,'table2','dinner');}">Dinner </div>
 | 
						|
          <div id="4.5" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doActionTotal(event,'table2','date');" onkeydown="if (event.keyCode == 13) {return topMenu.doActionTotal(event,'table2','date');}">By Date </div>
 | 
						|
        </div>
 | 
						|
  </div>
 | 
						|
  <div class="menu" id="five" onclick="topMenu.showMenu(event, this.id,false);" onkeydown="if (event.keyCode == 13 ) {topMenu.showMenu(event, this.id, true);}" onmouseover="topMenu.showMenu(event,this.id,false);" onmouseout="topMenu.hideMenu(event);">
 | 
						|
  <div tabindex="-1" role="menuitem" aria-haspopup="true" id="fivetop" class="topMenu">Help</div>
 | 
						|
        <div class="menudrop" role="menu" id="fiveItems" style="display:none;">
 | 
						|
          <div id="5.1" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'Show Help Index');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'Show Help index');}">Help Index</div>
 | 
						|
          <div id="5.2" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'Show navigation help');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'Show navigation help');}">Navigation Help</div>
 | 
						|
          <div id="5.3" tabindex="-1" role="menuitem" class="menuitem" onclick="return topMenu.doAlert(event,this,'DHTML roadmap Example, March 2005');" onkeydown="if (event.keyCode == 13) {topMenu.doAlert(event,this,'DHTML Roadmap example, March 2005');}">About</div>
 | 
						|
 | 
						|
        </div>
 | 
						|
  </div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
 | 
						|
<div class="content">
 | 
						|
<div style="height:20em; overflow:auto;">
 | 
						|
<table tabindex="0" border="2" cellspacing="0" id="table2" role="grid" onkeydown=" return doTableKeys(event);" onfocus="setCell(this.id);">
 | 
						|
<thead>
 | 
						|
<tr>
 | 
						|
  <th tabindex="-1" role="columnheader" id="colhead1" style="width:6em" onclick="doClick(event,0,0);" onkeydown="if (event.keyCode==13) {return doLink('aEntry');}" class="cellFocusSelect"><span class="action" title="Sort by Entry #" onclick="alert('sort column on click');" tabindex="-1" id="aEntry">Entry #</span></th>
 | 
						|
  <th tabindex="-1" role="columnheader" id="colhead2" onclick="doClick(event,0,1);" onkeydown="if (event.keyCode==13) {return doLink('aDate');}" style="width:10em"><span class="action" title="Sort by Date" onclick="alert('sort column on click');" tabindex="-1" id="aDate">Date</span></th>
 | 
						|
  <th tabindex="-1" role="columnheader" id="colhead3" onclick="doClick(event,0,2);" onkeydown="if (event.keyCode==13) {return doLink('aExpense');}" style="width:20em"><span class="action" title="Sort by Expense Name" onclick="alert('sort column on click');" tabindex="-1" id="aExpense">Expense</span></th>
 | 
						|
  <th tabindex="-1" role="columnheader" id="colhead4" onclick="doClick(event,0,3);" onkeydown="if (event.keyCode==13) {return doLink('aAmount');}" style="width:8em"><span class="action" title="Sort by Amount" onclick="alert('sort column on click');" tabindex="-1" id="aAmount">Amount</span></th>
 | 
						|
  <th tabindex="-1" role="columnheader" id="colhead5" onclick="doClick(event,0,4);" onkeydown="if (event.keyCode==13) {return doLink('aMerchant');}" style="width:15em"><span class="action" title="Sort by Merchant" onclick="alert('sort column on click');" tabindex="-1" id="aMerchant">Merchant</span></th>
 | 
						|
  <th tabindex="-1" role="columnheader" id="colhead6" style="width:8em"><span>Type</span></th>
 | 
						|
 | 
						|
</tr>
 | 
						|
</thead>
 | 
						|
<tbody>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,1,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">1</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" id="testCell" onclick="doClick(event,1,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}">03/14/05</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,1,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}">Conference Fee</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,1,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}">$449.00</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,1,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}">CSUN Center on Disability</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,1,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}">credit</td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,2,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">2</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,2,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}">03/15/05</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,2,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}">lodging</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,2,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}">$119.00</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,2,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}">LAX Hilton</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,2,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}">credit</td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,3,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">3</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,3,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}">03/15/05</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,3,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}">dinner</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,3,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}">$24.00</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,3,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}">Chili's</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,3,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}">cash</td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,4,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">4</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,4,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}">03/16/05</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,4,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}">lodging</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,4,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}">$119.00</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,4,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}">LAX Hilton</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,4,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}">credit</td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,5,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">5</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,5,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}">03/16/05</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,5,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}">breakfast</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,5,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}">$6.50</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,5,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}">Starbucks</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,5,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}">cash</td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,6,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">6</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,6,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}">03/16/05</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,6,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}">lunch</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,6,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}">$9.35</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,6,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}">Super Sub Stop</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,6,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}">cash</td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,7,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">7</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,7,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}">03/16/05</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,7,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}">dinner</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,7,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}">$40.00</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,7,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}">Davio's</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,7,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}">credit</td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,8,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">8</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,8,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,8,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,8,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,8,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,8,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,9,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">9</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,9,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,9,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,9,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,9,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,9,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,10,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">10</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,10,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,10,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,10,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,10,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,10,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,11,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">11</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,11,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,11,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,11,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,11,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,11,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,12,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">12</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,12,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,12,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,12,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,12,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,12,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,13,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">13</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,13,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,13,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,13,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,13,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,13,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,14,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">14</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,14,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,14,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,14,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,14,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,14,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,15,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">15</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,15,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,15,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,15,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,15,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,15,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,16,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">16</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,16,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,16,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,16,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,16,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,16,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,17,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">17</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,17,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,17,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,17,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,17,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,17,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
<tr>
 | 
						|
  <td tabindex="-1" role="rowheader" aria-readonly="true" onclick="doClick(event,18,0);" ondblclick="doEdit(event,this,0);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,0);return false;}">18</td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,18,1);" ondblclick="doEdit(event,this,1);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,1);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,18,2);" ondblclick="doEdit(event,this,2);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,2);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,18,3);" ondblclick="doEdit(event,this,3);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,3);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,18,4);" ondblclick="doEdit(event,this,4);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,4);return false;}"></td>
 | 
						|
  <td tabindex="-1" role="gridcell" aria-selected="false" onclick="doClick(event,18,5);" ondblclick="doEdit(event,this,5);" onkeydown="if (event.keyCode == 13) { doEdit(event,this,5);return false;}"></td>
 | 
						|
</tr>
 | 
						|
</tbody>
 | 
						|
</table>
 | 
						|
</div>
 | 
						|
</form>
 | 
						|
</div>
 | 
						|
</body>
 | 
						|
</html>
 |