docs: function mxGraph(container, model, renderHint, stylesheet)
  {
  	// Initializes the variable in case the prototype has been
  	// modified to hold some listeners (which is possible because
  	// the createHandlers call is executed regardless of the
  	// arguments passed into the ctor).
  	this.mouseListeners = null;
  	
  	// Converts the renderHint into a dialect
  	this.renderHint = renderHint;
  
  	if (mxClient.IS_SVG)
  	{
  		this.dialect = mxConstants.DIALECT_SVG;
  	}
  	else if (renderHint == mxConstants.RENDERING_HINT_EXACT && mxClient.IS_VML)
  	{
  		this.dialect = mxConstants.DIALECT_VML;
  	}
  	else if (renderHint == mxConstants.RENDERING_HINT_FASTEST)
  	{
  		this.dialect = mxConstants.DIALECT_STRICTHTML;
  	}
  	else if (renderHint == mxConstants.RENDERING_HINT_FASTER)
  	{
  		this.dialect = mxConstants.DIALECT_PREFERHTML;
  	}
  	else // default for VML
  	{
  		this.dialect = mxConstants.DIALECT_MIXEDHTML;
  	}
  	
  	// Initializes the main members that do not require a container
  	this.model = (model != null) ? model : new mxGraphModel();
  	this.multiplicities = [];
  	this.imageBundles = [];
  	this.cellRenderer = this.createCellRenderer();
  	this.setSelectionModel(this.createSelectionModel());
  	this.setStylesheet((stylesheet != null) ? stylesheet : this.createStylesheet());
  	this.view = this.createGraphView();
  	
  	// Adds a graph model listener to update the view
  	this.graphModelChangeListener = mxUtils.bind(this, function(sender, evt)
  	{
  		this.graphModelChanged(evt.getProperty('edit').changes);
  	});
  	
  	this.model.addListener(mxEvent.CHANGE, this.graphModelChangeListener);
  
  	// Installs basic event handlers with disabled default settings.
  	this.createHandlers();
  	
  	// Initializes the display if a container was specified
  	if (container != null)
  	{
  		this.init(container);
  	}
  	
  	this.view.revalidate();
  }