// JavaScript Document

var MENUITEM_NONE = 0;
var MENUITEM_ITEM = 1;
var MENUITEM_RADIO = 2;
var MENUITEM_CHECKBOX = 3;
var MENUITEM_SEPARATOR = 4;


/**
 * NODE_LAST_FOCUS keeps track of which form element in the tab panel had last focus
 */

var NODE_LAST_FOCUS = null;

/**
 *
 * The TabPanel object is used to maintain information about a Tab Panel widget
 * including the collection of tab objects 
 * 
 * @contructor
 */
 

function MenuBar( id ) {

  this.id = id;
  this.current_menubar_node  = null;
  this.current_menu_node = null;
  this.current_menuitem_node = null;
  this.current_menuitems;
  this.pulldown_flag = false;
  
}

/**
 * init is a subclass of MenuBar and is used to initialize the event handlers and 
 * tabs in a menu bar.
 * 
 * @member MenuBar
 * @return nothing
 */
 
MenuBar.prototype.init = function() {

  this.node = document.getElementById(this.id);

  var obj = this;

  browser.addEvent(this.node, "focus",     function(event) {handleMenuBarFocusEvent(event,     obj); }, false);
  browser.addEvent(this.node, "click",     function(event) {handleMenuBarClickEvent(event,     obj); }, false);
  browser.addEvent(this.node, "mouseover", function(event) {handleMenuBarMouseOverEvent(event, obj); }, false);
  browser.addEvent(this.node, "keydown",   function(event) {handleMenuBarKeyDownEvent(event,   obj); }, false);

}

/**
 * setMenuBarFocus
 * Give the menu focus
 * 
 * @param ( menubar ) MenuBar object
 * @return none
 */
 
function setMenuBarFocus( menubar ) {
	menubar.node.focus();
}


/**
 * getFirstMenuItem 
 * This function gets the next menu item in the current menu
 * 
 * @param ( menubar ) MenuBar object
 * @return node of new menu item
 */
 
function getFirstMenuItem( menubar ) {

  var done = false;
  var first_menu_item = menubar.node.firstChild;

  do {
    if( ( first_menu_item.nodeType == Node.ELEMENT_NODE ) &&
        ( first_menu_item.getAttribute("role") == "menuitem" ) ) {
        done = true;		  
    } else {
        first_menu_item = nextSiblingElement( first_menu_item );
	}
	
  } while( first_menu_item && !done);

   return first_menu_item;

}

/**
 * getLastMenuItem 
 * This function gets the next menu item in the current menu
 * 
 * @param ( menubar ) MenuBar object
 * @return node of new menu item
 */
 
function getLastMenuItem( menubar ) {

  var done = false;
  var last_menu_item = menubar.node.lastChild;

  do {
    if( ( last_menu_item.nodeType == Node.ELEMENT_NODE ) &&
        ( last_menu_item.getAttribute("role") == "menuitem" ) ) {
        done = true;		  
    } else {
        last_menu_item = previousSiblingElement( last_menu_item );
	}
	
  } while( last_menu_item && !done);

  return last_menu_item;

}



/**
 * getNextMenuItem 
 * This function gets the next menu item in the current menubar
 * 
 * @param ( menubar ) MenuBar object
 * @return node of new menu item
 */
 
function getNextMenuItem( menubar ) {

  var done = false;
  var next_menu_item;	

  if( menubar.current_menubar_node == null )
    next_menu_item = menubar.node.firstChild;
  else
    next_menu_item = menubar.current_menubar_node.nextSibling;

  do {
    if( ( next_menu_item.nodeType == Node.ELEMENT_NODE ) &&
        ( next_menu_item.getAttribute("role") == "menuitem" ) ) {
        done = true;		  
    } else {
        next_menu_item = nextSiblingElement( next_menu_item );
	}
	
  } while( next_menu_item && !done);

  if( next_menu_item == null )
    next_menu_item = getFirstMenuItem( menubar );

  return next_menu_item;

}


/**
 * getPreviousMenuItem 
 * This function gets the previous menu item in the current menu
 * 
 * @param ( menubar ) MenuBar object
 *
 * @return node of new menu item
 */
 
function getPreviousMenuItem( menubar ) {

  var done = false;
  var previous_menu_item;	

  if( menubar.current_menubar_node == null )
    previous_menu_item = menubar.node.lastChild;
  else
    previous_menu_item = menubar.current_menubar_node.previousSibling;

  do {
    if( ( previous_menu_item.nodeType == Node.ELEMENT_NODE ) &&
        ( previous_menu_item.getAttribute("role") == "menuitem" ) ) {
        done = true;		  
    } else {
        previous_menu_item = previousSiblingElement( previous_menu_item );
	}
	
  } while( previous_menu_item && !done);

  if( previous_menu_item == null )
    previous_menu_item = getLastMenuItem( menubar );

  return previous_menu_item;

}

/**
 * openPreviousMenuItem 
 * 
 * @param ( menubar ) MenuBar object
 * @param ( menuitem ) MenuItem object
 *
 * @return node of new menu item
 */
 
function openPullDownMenu( menubar, menuitem ) {

  var new_menu = nextSiblingElement(menuitem);

  while ( new_menu && new_menu.getAttribute("role") != "menu" ) {
     new_menu = firstChildElement(new_menu);
  }
  
  if( new_menu ) {
	  
    new_menu.className = "open";
	
	browser.setNodePosition( new_menu, browser.calculateOffsetLeft( menuitem), (browser.calculateOffsetTop( menuitem) + menuitem.offsetHeight ));

	browser.addEvent(new_menu, "mouseover", function(event) {handleMenuMouseOverEvent(event, menubar); }, false);

  }

  menubar.current_menu_node = new_menu;
  
  menubar.current_menuitems = new Array();
  
  var item_node = firstChildElement( menubar.current_menu_node );	

  do {
	  
    if( item_node.nodeType == Node.ELEMENT_NODE ) {
		
		var mi_node     = null;
		var mi_type     = MENUITEM_NONE; 
		var mi_checked  = item_node.getAttribute("aria-checked")
		var mi_disabled = item_node.getAttribute("aria-disabled")
		var mi_haspopup = item_node.getAttribute("aria-haspopup");		
		
        if( item_node.getAttribute("role") == "menuitem" ) {
		   mi_node = item_node;
		   mi_type = MENUITEM_ITEM;
		} // endif
		
        if( item_node.getAttribute("role") == "menuitemradio" ) {
		   mi_node = item_node;
		   mi_type = MENUITEM_RADIO;
		} // endif
			
        if( item_node.getAttribute("role") == "menuitemcheckbox" ) {
		   mi_node = item_node;
		   mi_type = MENUITEM_CHECKBOX;
		} // endif

        if( item_node.getAttribute("role") == "separator" ) {
		   mi_node = item_node;
		   mi_type = MENUITEM_SEPARATOR;
		} // endif

        if( mi_node ) {
		  var menuitem = new MenuItem( mi_node.id, mi_type, mi_checked, mi_disabled, mi_haspopup );
		  menubar.current_menuitems[menubar.current_menuitems.length] = menuitem;
		}
		
	}  // endif

    item_node = item_node.nextSibling;

  } while( item_node );
  
  return new_menu;

}

/**
 * closePullDownMenuItem 
 * 
 * @param ( menubar ) MenuBar object
 * @param ( menuitem ) MenuItem object
 *
 * @return node of new menu item
 */
 
function closePullDownMenu( menubar, menuitem ) {

  var old_menu = nextSiblingElement(menuitem);
  
  while ( old_menu && old_menu.getAttribute("role") != "menu" ) {
     old_menu = firstChildElement(old_menu);
  }

  if( old_menu ) {
    old_menu.className = "";
	
	browser.removeEvent(old_menu, "mouseover", function(event) {handleMenuMouseOverEvent(event, menubar); }, false);

  }
  
  return old_menu;

}



/**
 * menuBarUpdateMenuBar  
 * Supports moving to the next menu item
 * 
 * @param ( menubar ) MenuBar object
 * @return nothing
 */
 
function menuBarUpdateMenuBar( menubar, new_node ) {

  var last_node  = menubar.current_menubar_node;
  
  // Close old menu item if open
  if( last_node != new_node ) {
	
	// change styling on old menu item
	if( last_node != null )  {
	  last_node.className = "";
	  
	  // Check to see if there is a pull down menu
	  
	  if( menubar.pulldown_flag &&
		  last_node.getAttribute("aria-haspopup") == "true" ) {
		  closePullDownMenu( menubar, last_node );
	  }

    }

    // Update styling
	if( new_node != null ) {
	  new_node.className = "selected";
	  menubar.current_menubar_node = new_node;
	  
	  // Check to see if there is a pull down menu
	  
	  if( menubar.pulldown_flag &&
		  new_node.getAttribute("aria-haspopup") == "true" ) {
		  menubar.current_menu_node = openPullDownMenu( menubar, new_node );		  
	  }  	
	  
	}  // endif
	
  }  // endif

}

/**
 * menuBarUpdateMenu  
 * Supports updating the styling of the current menu that is open
 * 
 * @param ( menubar ) MenuBar object
 * @return nothing
 */
 
function menuBarUpdateMenu( menubar, new_menuitem_node ) {

  // see if any other nodes ae currently selected and restore their default styling
  if( menubar.current_menuitem_node &&
	  ( menubar.current_menuitem_node.getAttribute("role") != "separator" ) ) 
    if( menubar.current_menuitem_node.getAttribute("aria-checked") == "true" ) 
	   menubar.current_menuitem_node.className = "checked ";
    else 
	   menubar.current_menuitem_node.className = "";

  menubar.current_menuitem_node = new_menuitem_node;

  // Set the new node to a selected style
  if( menubar.current_menuitem_node &&
	  menubar.current_menuitem_node.getAttribute("role") != "separator" )  
    if( menubar.current_menuitem_node.getAttribute("aria-checked") == "true" )
	  menubar.current_menuitem_node.className = "checked selected";
    else 
	  menubar.current_menuitem_node.className = "selected";
		
  return menubar.current_menuitem_node;	

}



/**
 * menuBarKeyLeft  
 * Supports moving to the next menu item
 * 
 * @param ( menubar ) MenuBar object
 * @return nothing
 */
 
function menuBarKeyLeftArrow( menubar ) {

  var new_node  = getPreviousMenuItem( menubar );

  menuBarUpdateMenuBar( menubar, new_node );
  
  if( new_node.getAttribute("aria-haspopup") == "true") {
	menuBarKeyDownArrow( menubar );  
  } else {
	new_node.focus();  
  } // endif
   
}

/**
 * menuBarKeyRight  
 * Supports moving to the previous menu item
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarKeyRightArrow( menubar ) {

  var new_node = getNextMenuItem( menubar );
  
  menuBarUpdateMenuBar( menubar, new_node );
  
  if( new_node.getAttribute("aria-haspopup") == "true") {
	menuBarKeyDownArrow( menubar );  
  } else {
	new_node.focus();  
  } // endif
  
}

/**
 * MenuItem constructor for storing data on a menuitem node
 * 
 * @param ( id ) id of node of menuitem
 * @param ( type ) integer indicting the type of menuitem
 * @param ( checked ) boolean flag indicating if the menuitem is checked
 * @param ( disabled ) boolean flag indicating if the menuitem is disabled
 * @param ( haspopup ) boolean flag indicating if the menuitem has a popup menu
 * @return nothing
 */
 
function MenuItem( id, type, checked, disabled, haspopup ) {
				 
	this.id       = id;
	this.type     = type;
	this.checked  = checked;
	this.disabled = disabled;
	this.haspopup = haspopup;				  
}


/**
 * getMenuItems
 * Get an array of the current menu items
 * 
 * @param ( menu) menu object
 * @return nothing
 */
 
function getMenuItems( menu_node ) {


   
  return menuitems;

}

/**
 * getMenuItemItemIndex
 * 
 * 
 * @param ( menu ) menu object
 * @return -1      If menuitem is not in array
 *          >= 0   The index position in the array
 */
 
function getMenuItemIndex( menubar ) {

  var index = -1;
  var i = 0;
  var done = false;
  
  // Test to see if current menu item selected 
  if( menubar.current_menuitem_node ) {
	  
    while ( ( i < menubar.current_menuitems.length ) && !done ) {
	  
	  if( menubar.current_menuitems[i].id == menubar.current_menuitem_node.id ) {
		done = true;
		index = i;
	  }
	  
	  i++;
    }  // end while
	
  } // endif

  return index;

}

/**
 * menuBarKeyUp  
 * Supports moving to the previous menu item
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarKeyUpArrow( menubar ) {

  // see if menu has a popup
  if( !menubar.current_menu_node &&
	  menubar.current_menubar_node.getAttribute("aria-haspopup") == "true" ) {
		  
	  menubar.current_menu_node = openPullDownMenu( menubar, menubar.current_menubar_node );
	  menubar.pulldown_flag = true;
		  
  }  // endif

  if( menubar.current_menu_node ) {
	  
	  var index = getMenuItemIndex( menubar );
	  
	  index--;
	  
	  while( (index >= 0) && (menubar.current_menuitems[index].type == MENUITEM_SEPARATOR ) ){
		  index--;
	  }
	  
 
      if( (index < 0 ) || ( index >= menubar.current_menuitems.length ) ) 
	    index = menubar.current_menuitems.length - 1;

      var new_node = menuBarUpdateMenu(menubar, document.getElementById(menubar.current_menuitems[index].id) );
	  
	  new_node.focus();

	   
  } // endif


}

/**
 * menuBarKeyUp  
 * Supports moving to the previous menu item
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarKeyDownArrow( menubar ) {

  // see if menu has a popup
  if( !menubar.current_menu_node &&
	  menubar.current_menubar_node.getAttribute("aria-haspopup") == "true" ) {
		  
	  menubar.current_menu_node = openPullDownMenu( menubar, menubar.current_menubar_node );
	  menubar.pulldown_flag = true;
		  
  }  // endif

  if( menubar.current_menu_node ) {
	  
	  var index = getMenuItemIndex( menubar );
	  
	  index++;
	  
	  while( (index < menubar.current_menuitems.length) && (menubar.current_menuitems[index].type == MENUITEM_SEPARATOR ) ){
		  index++;
	  }
	  
      if( (index < 0 ) || ( index >= menubar.current_menuitems.length ) ) 
	    index = 0;

      var new_node = menuBarUpdateMenu(menubar, document.getElementById(menubar.current_menuitems[index].id) );

      new_node.focus();
	  	  
  } // endif

}

/**
 * menuBarOnClick  
 * Supports moving to the previous menu item
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarOnClick( menubar ) {

  if( menubar.current_menuitem_node ) {
	
	browser.simulateOnClickEvent( menubar.current_menuitem_node );
	  	  
  } // endif

}

/**
 * menuBarClosePulldown
 * Close pull down menu if it is open
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarClosePullDown( menubar ) {

  if( menubar.current_menubar_node ) {

	// Check to see if there is a pull down menu
	  
	if( menubar.current_menubar_node.getAttribute("aria-haspopup") == "true" ) {
		  closePullDownMenu( menubar, menubar.current_menubar_node );
	}  // endif
	  	  
	menubar.current_menubar_node.focus();
	 
  } // endif

}

/**
 * menuBarUpdateRadioMenuItems
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarUpdateRadioMenuItems( menubar ) {

  var node;
  var i = getMenuItemIndex( menubar );
  var j;
  
  //
  // uncheck any other radiomenuitems before current menuitem
	
  j = i-1;
  while( (j >= 0) && 
	  ( menubar.current_menuitems[j].type == MENUITEM_RADIO) ) {
	  
        node = document.getElementById( menubar.current_menuitems[j].id );

        node.setAttribute("aria-checked", "false" );   	  
        node.className = "";
			
	    j--;
 
   } // endwhile

    menubar.current_menuitem_node.setAttribute("aria-checked", "true" );   	  
    menubar.current_menuitem_node.className = "checked";   	  

	//
	// uncheck any other radiomenuitems before current menuitem
	j = i + 1;
	
	while( (j < menubar.current_menuitems.length) && 
			(menubar.current_menuitems[j].type == MENUITEM_RADIO) ) {

            node = document.getElementById( menubar.current_menuitems[j].id );

            node.setAttribute("aria-checked", "false" );   	  
            node.className = "";
			
            j++;
			
	} // endwhile

}

/**
 * menuBarUpdateCheckboxMenuItems
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarUpdateCheckboxMenuItems( menubar, checked ) {

  if( checked ) {
    menubar.current_menuitem_node.setAttribute("aria-checked", "true" );   	  
    menubar.current_menuitem_node.className = "checked";   	  
  } else {
    menubar.current_menuitem_node.setAttribute("aria-checked", "false" );   	  
    menubar.current_menuitem_node.className = "";   	  	  
  } // endif

}


/**
 * menuBarClose
 * 
 * @param ( menubar) MenuBar object
 * @return nothing
 */
 
function menuBarClose( menubar ) {

  menuBarClosePullDown( menubar );

  // reset styling of current menubar item
  if( menubar.current_menubar_node ) 
     menubar.current_menubar_node.className = "";

  menubar.current_menubar_node = null;
  menubar.current_menu_node = null;
  menubar.current_menubar_node = null;
  menubar.pulldown_flag = false;

}

/**
 * handleMenuBarKeyPressEvent 
 * handleMenuBatKetDownEvent Keyboard commands for the Menubar
 *
 * @param ( event object ) event 
 * @param ( MenuBar object) menubar is the MenuBar object associated with the event
 * @return boolean false if the event was used by MenuBar, otherwise true
 */

function handleMenuBarKeyDownEvent(event, menubar) {
	var e = event || window.event;

	// If any modifier keys are pressed do not process this event
	if( e.altKey || e.ctrlKey || e.shiftKey )
	  return true;

    switch( browser.keyCode( e ) ) {
		
      case KEY_LEFT:
           menuBarKeyLeftArrow( menubar );
           menubar.my_key_flag = false;
           return browser.stopPropagation( e ); 
           break;

      case KEY_RIGHT:
           menuBarKeyRightArrow( menubar );
		   menubar.my_key_flag = false;
		   return browser.stopPropagation( e ); 
           break;

	  case KEY_UP:
           menuBarKeyUpArrow( menubar );
		   menubar.my_key_flag = false;
		   return browser.stopPropagation( e ); 
           break;

	  case KEY_DOWN:
           menuBarKeyDownArrow( menubar );
		   menubar.my_key_flag = false;
		   return browser.stopPropagation( e ); 
           break;

	  case KEY_ESCAPE:
           menuBarClosePullDown( menubar );
		   menubar.pulldown_flag = false;
		   menubar.current_menu_node = null;
		   menubar.current_menu_node = null;
		   menubar.my_key_flag = false;
		   return browser.stopPropagation( e ); 
           break;

	  case KEY_ENTER:
           menuBarOnClick( menubar );
           menuBarUpdateMenuBar( menubar, null );
		   menubar.my_key_flag = false;
		   return browser.stopPropagation( e ); 
           break;

	  case KEY_TAB:
           menuBarClose( menubar );

           break;

	} // endif
	
  return true;
   
}

/**
 * handleMenuBarClickEvent
 *
 * @param ( event object ) event 
 * @param ( MenuBar object) menubar is the MenuBar object associated with the event
 * @return boolean false if the event was used by MenuBar, otherwise true
 */

handleMenuBarClickEvent = function(event, menubar) {
  var e = event || window.event;	
	
  if( browser.target( e ) == menubar.current_menubar_node ) {
	  
	if( menubar.current_menubar_node.getAttribute("aria-haspopup") == "true" ) {

	   menubar.current_menu_node = openPullDownMenu( menubar, menubar.current_menubar_node );
	   menubar.pulldown_flag = true;
	   
    }  //endif
	  
  }  // endif

  return true;
   
}

/**
 * handleMenuBarMouseOver
 *
 * @param ( event object ) event 
 * @param ( MenuBar object) menubar is the MenuBar object associated with the event
 * @return boolean false if the event was used by MenuBar, otherwise true
 */

handleMenuBarMouseOverEvent = function(event, menubar) {
   var e = event || window.event;

   var n = menubar.node.firstChild;
   
   while( n ) {
	   
	   if( (n.nodeType == Node.ELEMENT_NODE) &&
		   (n.getAttribute("role") == "menuitem" ) ) {
		   
		   if( n == browser.target( e ) ) {
			  menuBarUpdateMenuBar( menubar, n );
			  break;
		   } // endif
			  
	   } // endif
	   
	   n = n.nextSibling;
	   
   } // endwhile    

  return true;
   
}

/**
 * handleMenuMouseOver
 *
 * @param ( event object ) event 
 * @param ( MenuBar object) menubar is the MenuBar object associated with the event
 * @return boolean false if the event was used by MenuBar, otherwise true
 */

handleMenuMouseOverEvent = function(event, menubar) {
  var e = event || window.event;	

  if( menubar.current_menuitems ) {
	  
    for(var index = 0; index < menubar.current_menuitems.length; index++ ) {

      var n = document.getElementById(menubar.current_menuitems[index].id );

      if( browser.target( e ) == n )  {
         menuBarUpdateMenu( menubar, n ); 
         break;
      } // endif
	   
    } // endfor   
  
  } // endfor

  return true;
   
}


/**
 * handleMenuBarFocusEvent
 *
 * @param ( event object ) event 
 * @param ( MenuBar object) menubar is the MenuBar object associated with the event
 * @return boolean false if the event was used by MenuBar, otherwise true
 */

handleMenuBarFocusEvent = function(event, menubar) {
  var e = event || window.event;	

  if( browser.target( e ) == menubar.node ) {
	
    var new_node = getNextMenuItem( menubar );
    menuBarUpdateMenuBar( menubar, new_node );

  }  // endif
  
  return true;	
   
}

/**
 * handleMenuBarBlurEvent
 *
 * @param ( event object ) event 
 * @param ( MenuBar object) menubar is the MenuBar object associated with the event
 * @return boolean false if the event was used by MenuBar, otherwise true
 */

handleMenuBarBlurEvent = function(event, menubar) {
  var e = event | window.event;
  return true;
   
}


/**
 * StyledText Object
 *
 * @param ( id ) id of text to style
 * @return none
 */

function StyledText( id, menu_ids, menubar ) {

   this.id = id;
   this.menu_item_ids = menu_ids;
   this.menubar = menubar;

}

/**
 * init is a subclass of StyledText
 * tabs in a menu bar.
 * 
 * @member StyleText
 * @return nothing
 */
 
StyledText.prototype.init = function() {

  this.node = document.getElementById(this.id);
  this.fontSize = 2;
  this.fontSizes = ['x-small', 'small', 'medium', 'large', 'x-large'];
  
  var obj = this;

  browser.addEvent(this.node, "keydown",   function(event) {handleStyledTextKeyDownEvent(event, obj); }, false);

}

/**
 * handleStyledTextKeyPressEvent 
 * handleStyledTextKetDownEvent Keyboard commands for the Menubar
 *
 * @param ( event object ) event 
 * @param ( StyledText object) stext us a StykedText object associated with the event
 * @return boolean false if the event was used by MenuBar, otherwise true
 */

function handleStyledTextKeyDownEvent(event, stext ) {
	var e = event || window.event;

	// If any modifier keys are pressed do not process this event
	if( e.ctrlKey || e.shiftKey )
	  return true;

    alert( browser.keyCode( e ) );

    switch( browser.keyCode( e ) ) {
		
      case KEY_M:
	       if( e.altKey ) {
             setMenuBarFocus(stext.menubar);
             return browser.stopPropagation( e ); 
		   }
           break;


	} // endif
	
  return true;
   
}


/**
 * handleStyledTextSetFont
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextSetFontFamily( menubar, stext, family ) {

  stext.node.style.fontFamily = family;

  menuBarUpdateRadioMenuItems( menubar );
  
  menuBarClose( menubar );
  
  stext.node.focus();
	
}

/**
 * handleStyledTextSetJustification
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextSetJustification( menubar, stext, justification ) {

  stext.node.style.textAlign = justification;

  menuBarUpdateRadioMenuItems( menubar );
  
  menuBarClose( menubar );
  
  stext.node.focus();
	
}

/**
 * handleStyledTextSetFontSize
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextSetFontSize( menubar, stext, size ) {

  stext.fontSize = size;
  stext.node.style.fontSize = stext.fontSizes[stext.fontSize];

  menuBarUpdateRadioMenuItems( menubar );
  
  menuBarClose( menubar );
  
  stext.node.focus();
	
}

/**
 * handleStyledTextFontSizeLarger
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextFontSizeLarger( menubar, stext) {

  stext.fontSize++;
  
  if( stext.fontSize > 4 )
    stext.fontSize = 4;

  menubar.current_menuitem_node = document.getElementById(stext.menu_item_ids[stext.fontSize]);

  handleStyledTextSetFontSize( menubar, stext, stext.fontSize )  

  menuBarClose( menubar );
  
  stext.node.focus();
	
}

/**
 * handleStyledTextFontSizeSmaller
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextFontSizeSmaller( menubar, stext) {

  stext.fontSize--;
  
  if( stext.fontSize < 0 )
    stext.fontSize = 0;
  
  menubar.current_menuitem_node = document.getElementById(stext.menu_item_ids[stext.fontSize]);
  handleStyledTextSetFontSize( menubar, stext, stext.fontSize )  

  menuBarClose( menubar );
  
  stext.node.focus();
	
}



/**
 * handleStyledTextBold
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextToggleBold( menubar, stext ) {

  if( stext.node.style.fontWeight == "bold" ) {
    stext.node.style.fontWeight = "normal";
    menuBarUpdateCheckboxMenuItems( menubar, false );
  } else {
    stext.node.style.fontWeight = "bold";
    menuBarUpdateCheckboxMenuItems( menubar, true );
  } // endif
  
  menuBarClose( menubar );
  
  stext.node.focus();
	
}

/**
 * handleStyledTextItalic
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextToggleItalic( menubar, stext ) {

  if( stext.node.style.fontStyle == "italic" ) {
    stext.node.style.fontStyle = "normal";
    menuBarUpdateCheckboxMenuItems( menubar, false );
  } else {
    stext.node.style.fontStyle = "italic";
    menuBarUpdateCheckboxMenuItems( menubar, true );
  } // endif
  
  menuBarClose( menubar );
  
  stext.node.focus();
	
}

/**
 * handleStyledTextUnderline
 * handlers changing 
 *
 * @param ( MenuBar object) styled text to hav its font changed
 * @param ( StyledText object) styled text to hav its font changed
 * @return nothing
 */

function handleStyledTextToggleUnderline( menubar, stext ) {

  if( stext.node.style.textDecoration == "underline" ) {
    stext.node.style.textDecoration = "none";
    menuBarUpdateCheckboxMenuItems( menubar, false );
  } else {
    stext.node.style.textDecoration = "underline";
    menuBarUpdateCheckboxMenuItems( menubar, true );
  } // endif
  
  menuBarClose( menubar );
  
  stext.node.focus();
	
}
