[165977] Element Ref combo is not using the Reference Edit Manager.
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java
index 0fc9f92..dfc76d3 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java
@@ -88,13 +88,22 @@
   
 //TODO not changed yet
   public void modifyComponentReference(Object referencingObject, ComponentSpecification component)
-  {    
+  {
+    XSDElementDeclaration concreteComponent = null;
     if (referencingObject instanceof Adapter)
     {
       Adapter adapter = (Adapter)referencingObject;
-      if (adapter.getTarget() instanceof XSDConcreteComponent)
+      if (adapter.getTarget() instanceof XSDElementDeclaration)
       {
-        XSDElementDeclaration concreteComponent = (XSDElementDeclaration)adapter.getTarget();
+        concreteComponent = (XSDElementDeclaration)adapter.getTarget();
+      }
+    }
+    else if (referencingObject instanceof XSDConcreteComponent)
+    {
+      concreteComponent = (XSDElementDeclaration) referencingObject;
+    }
+    if (concreteComponent != null)
+    {
         if (component.isNew())
         {  
           XSDElementDeclaration elementDec = null;
@@ -107,8 +116,7 @@
           }
           if (elementDec != null)
           {
-            Command command = new UpdateElementReferenceCommand(Messages._UI_ACTION_UPDATE_ELEMENT_REFERENCE,
-            		concreteComponent, elementDec);
+            Command command = new UpdateElementReferenceCommand(Messages._UI_ACTION_UPDATE_ELEMENT_REFERENCE, concreteComponent, elementDec);
             command.execute();
           }  
         }  
@@ -119,6 +127,5 @@
           command.execute();
         }  
       }
-    }
   }
 }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDElementDeclarationSection.java b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDElementDeclarationSection.java
index c1c030d..a44cbc3 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDElementDeclarationSection.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-common/org/eclipse/wst/xsd/ui/internal/common/properties/sections/XSDElementDeclarationSection.java
@@ -10,9 +10,6 @@
  *******************************************************************************/
 package org.eclipse.wst.xsd.ui.internal.common.properties.sections;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.xerces.util.XMLChar;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.jface.viewers.ISelection;
@@ -38,9 +35,9 @@
 import org.eclipse.wst.xsd.ui.internal.dialogs.NewTypeDialog;
 import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorCSHelpIds;
+import org.eclipse.wst.xsd.ui.internal.editor.XSDElementReferenceEditManager;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDTypeReferenceEditManager;
 import org.eclipse.wst.xsd.ui.internal.editor.search.XSDSearchListDialogDelegate;
-import org.eclipse.wst.xsd.ui.internal.util.TypesHelper;
 import org.eclipse.xsd.XSDElementDeclaration;
 import org.eclipse.xsd.XSDTypeDefinition;
 import org.eclipse.xsd.util.XSDConstants;
@@ -215,15 +212,6 @@
     init();
     relayout();
     
-    if (isElementReference)
-    {
-      TypesHelper helper = new TypesHelper(xsdSchema);
-      List items = new ArrayList();
-      items = helper.getGlobalElements();
-      items.add(0, ""); //$NON-NLS-1$
-      componentNameCombo.setItems((String [])items.toArray(new String[0]));
-    }
-//    fillTypesCombo();
     setListenerEnabled(true);
   }
   
@@ -407,13 +395,39 @@
     }
     else if (e.widget == componentNameCombo)
     {
-      String newValue = componentNameCombo.getText();
-      String newName = newValue.substring(newValue.indexOf(":") + 1); //$NON-NLS-1$
-      if (isElementReference)
+      IEditorPart editor = getActiveEditor();
+      if (editor == null) return;
+      ComponentReferenceEditManager manager = (ComponentReferenceEditManager)editor.getAdapter(XSDElementReferenceEditManager.class);    
+
+      String selection = componentNameCombo.getText();
+      ComponentSpecification newValue;
+      IComponentDialog dialog= null;
+      if ( selection.equals(Messages._UI_ACTION_BROWSE))
       {
-        XSDElementDeclaration elementRef = (XSDElementDeclaration)input;
-        elementRef.getElement().setAttribute(XSDConstants.REF_ATTRIBUTE, newValue);
-        nameText.setText(newName);
+        dialog = manager.getBrowseDialog();
+      }
+      else if ( selection.equals(Messages._UI_ACTION_NEW))
+      {
+        dialog = manager.getNewDialog();
+      }
+
+      if (dialog != null)
+      {
+        if (dialog.createAndOpen() == Window.OK)
+        {
+          newValue = dialog.getSelectedComponent();
+          manager.modifyComponentReference(input, newValue);
+        }
+        else
+        {
+          componentNameCombo.setText("");
+        }
+      }
+      else //use the value from selected quickPick item
+      {
+        newValue = getComponentSpecFromQuickPickForValue(selection, manager);
+        if (newValue != null)
+          manager.modifyComponentReference(input, newValue);
       }
 
     }
@@ -518,7 +532,36 @@
   protected void refreshRefCombo()
   {
     componentNameCombo.setText(""); //$NON-NLS-1$
-
+    fillElementsCombo();
+  }
+  
+  private void fillElementsCombo()
+  {
+    IEditorPart editor = getActiveEditor();
+    ComponentReferenceEditManager manager = (ComponentReferenceEditManager)editor.getAdapter(XSDElementReferenceEditManager.class);    
+    
+    componentNameCombo.removeAll();
+    componentNameCombo.add(Messages._UI_ACTION_BROWSE);
+    componentNameCombo.add(Messages._UI_ACTION_NEW);
+    ComponentSpecification[] quickPicks = manager.getQuickPicks();
+    if (quickPicks != null)
+    {
+      for (int i=0; i < quickPicks.length; i++)
+      {
+        ComponentSpecification componentSpecification = quickPicks[i];
+        componentNameCombo.add(componentSpecification.getName());
+      }  
+    }
+    ComponentSpecification[] history = manager.getHistory();
+    if (history != null)
+    {
+      for (int i=0; i < history.length; i++)
+      {
+        ComponentSpecification componentSpecification = history[i];
+        componentNameCombo.add(componentSpecification.getName());
+      }  
+    }
+    
     XSDElementDeclaration namedComponent = (XSDElementDeclaration) input;
     Element element = namedComponent.getElement();
     if (element != null)
@@ -528,7 +571,13 @@
       {
         attrValue = ""; //$NON-NLS-1$
       }
+      ComponentSpecification ret = getComponentSpecFromQuickPickForValue(attrValue, manager);
+      if (ret == null)
+      {
+        componentNameCombo.add(attrValue);
+      }
       componentNameCombo.setText(attrValue);
-    }
+    } 
   }
+
 }