docs: function(basename, lan, callback)
  	{
  		lan = (lan != null) ? lan : ((mxClient.language != null) ?
  			mxClient.language.toLowerCase() : mxConstants.NONE);
  		
  		if (lan != mxConstants.NONE)
  		{
  			var defaultBundle = mxResources.getDefaultBundle(basename, lan);
  			var specialBundle = mxResources.getSpecialBundle(basename, lan);
  			
  			var loadSpecialBundle = function()
  			{
  				if (specialBundle != null)
  				{
  					if (callback)
  					{
  						mxUtils.get(specialBundle, function(req)
  						{
  							mxResources.parse(req.getText());
  							callback();
  						}, function()
  						{
  							callback();
  						});
  					}
  					else
  					{
  						try
  						{
  					   		var req = mxUtils.load(specialBundle);
  					   		
  					   		if (req.isReady())
  					   		{
  					 	   		mxResources.parse(req.getText());
  					   		}
  				   		}
  				   		catch (e)
  				   		{
  				   			// ignore
  					   	}
  					}
  				}
  				else if (callback != null)
  				{
  					callback();
  				}
  			}
  			
  			if (defaultBundle != null)
  			{
  				if (callback)
  				{
  					mxUtils.get(defaultBundle, function(req)
  					{
  						mxResources.parse(req.getText());
  						loadSpecialBundle();
  					}, function()
  					{
  						loadSpecialBundle();
  					});
  				}
  				else
  				{
  					try
  					{
  				   		var req = mxUtils.load(defaultBundle);
  				   		
  				   		if (req.isReady())
  				   		{
  				 	   		mxResources.parse(req.getText());
  				   		}
  				   		
  				   		loadSpecialBundle();
  				  	}
  				  	catch (e)
  				  	{
  				  		// ignore
  				  	}
  				}
  			}
  			else
  			{
  				// Overlays the language specific file (_lan-extension)
  				loadSpecialBundle();
  			}
  		}
  	}