[richfaces-svn-commits] JBoss Rich Faces SVN: r18737 - in trunk/ui/input/ui/src/main: java/org/richfaces/renderkit and 4 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Tue Aug 17 15:30:39 EDT 2010


Author: nbelaevski
Date: 2010-08-17 15:30:38 -0400 (Tue, 17 Aug 2010)
New Revision: 18737

Added:
   trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutocomplete.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteEncodeStrategy.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteBaseGradient.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteButtonGradient.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteFieldGradient.java
   trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutocompleteHandler.java
   trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.ecss
   trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.js
   trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutocompleteBase.js
   trunk/ui/input/ui/src/main/templates/autocomplete.template.xml
Removed:
   trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutoComplete.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteEncodeStrategy.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteRendererBase.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteBaseGradient.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteButtonGradient.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteFieldGradient.java
   trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutoCompleteHandler.java
   trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.ecss
   trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.js
   trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoCompleteBase.js
   trunk/ui/input/ui/src/main/templates/autoComplete.template.xml
Modified:
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteDivLayoutStrategy.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteGridLayoutStrategy.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteListLayoutStrategy.java
   trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteTableLayoutStrategy.java
Log:
RF-9096

Deleted: trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutoComplete.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutoComplete.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutoComplete.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,259 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.component;
-
-import java.io.IOException;
-
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
-import javax.faces.application.Application;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIInput;
-import javax.faces.component.visit.VisitCallback;
-import javax.faces.component.visit.VisitContext;
-import javax.faces.component.visit.VisitResult;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-
-import org.ajax4jsf.util.ELUtils;
-import org.richfaces.cdk.annotations.Attribute;
-import org.richfaces.cdk.annotations.EventName;
-import org.richfaces.cdk.annotations.JsfComponent;
-import org.richfaces.cdk.annotations.JsfRenderer;
-import org.richfaces.cdk.annotations.Signature;
-import org.richfaces.cdk.annotations.Tag;
-import org.richfaces.cdk.annotations.TagType;
-import org.richfaces.context.ExtendedVisitContext;
-import org.richfaces.context.ExtendedVisitContextMode;
-import org.richfaces.renderkit.MetaComponentRenderer;
-
-/**
- * @author Nick Belaevski
- * 
- */
- at JsfComponent(tag = @Tag(type = TagType.Facelets, handler = "org.richfaces.view.facelets.AutoCompleteHandler"), renderer = @JsfRenderer(type = "org.richfaces.AutoCompleteRenderer"))
-public abstract class AbstractAutoComplete extends UIInput implements MetaComponentResolver, MetaComponentEncoder {
-
-    public static final String ITEMS_META_COMPONENT_ID = "items";
-
-    public static final String COMPONENT_TYPE = "org.richfaces.AutoComplete";
-
-    public static final String COMPONENT_FAMILY = UIInput.COMPONENT_FAMILY;
-
-    // TODO nick - change to Object - https://jira.jboss.org/browse/RF-8897
-    public abstract Object getAutocompleteList();
-
-    @Attribute(signature = @Signature(returnType = Object.class, parameters = {FacesContext.class, UIComponent.class, String.class}))
-    public abstract MethodExpression getAutocompleteMethod();
-
-    public abstract void setAutocompleteMethod(MethodExpression expression);
-
-    public abstract void setItemConverter(Converter converter);
-
-    @Attribute(literal = true)
-    public abstract String getVar();
-
-    // TODO nick - el-only?
-    @Attribute(literal = false)
-    public abstract Object getFetchValue();
-
-    @Attribute(defaultValue = "1")
-    public abstract int getMinChars();
-
-    @Attribute
-    public abstract String getFilterFunction();
-	
-    @Attribute(defaultValue = "rf-au-c")
-    public abstract String getSelectedItemClass();
-
-    @Attribute
-    public abstract String getMode();
-
-    @Attribute
-    public abstract String getLayout();
-
-    @Attribute
-    public abstract Converter getItemConverter();
-
-    @Attribute(defaultValue = "false")
-    public abstract boolean isAutoFill();
-
-    @Attribute(defaultValue = "false")
-    public abstract boolean isDisabled();
-
-    @Attribute(defaultValue = "false")
-    public abstract boolean isShowButton();
-
-    @Attribute(defaultValue = "false")
-    public abstract boolean isSelectFirst();
-
-    @Attribute(events = @EventName("click"))
-    public abstract String getOnclick();
-
-    @Attribute(events = @EventName("dblclick"))
-    public abstract String getOndblclick();
-
-    @Attribute(events = @EventName("mousedown"))
-    public abstract String getOnmousedown();
-
-    @Attribute(events = @EventName("mouseup"))
-    public abstract String getOnmouseup();
-
-    @Attribute(events = @EventName("mouseover"))
-    public abstract String getOnmouseover();
-
-    @Attribute(events = @EventName("mousemove"))
-    public abstract String getOnmousemove();
-
-    @Attribute(events = @EventName("mouseout"))
-    public abstract String getOnmouseout();
-
-    @Attribute(events = @EventName("keypress"))
-    public abstract String getOnkeypress();
-
-    @Attribute(events = @EventName("keydown"))
-    public abstract String getOnkeydown();
-
-    @Attribute(events = @EventName("keyup"))
-    public abstract String getOnkeyup();
-
-    @Attribute(events = @EventName("listclick"))
-    public abstract String getOnlistclick();
-
-    @Attribute(events = @EventName("listdblclick"))
-    public abstract String getOnlistdblclick();
-
-    @Attribute(events = @EventName("listmousedown"))
-    public abstract String getOnlistmousedown();
-
-    @Attribute(events = @EventName("listmouseup"))
-    public abstract String getOnlistmouseup();
-
-    @Attribute(events = @EventName("listmouseover"))
-    public abstract String getOnlistmouseover();
-
-    @Attribute(events = @EventName("listmousemove"))
-    public abstract String getOnlistmousemove();
-
-    @Attribute(events = @EventName("listmouseout"))
-    public abstract String getOnlistmouseout();
-
-    @Attribute(events = @EventName("listkeypress"))
-    public abstract String getOnlistkeypress();
-
-    @Attribute(events = @EventName("listkeydown"))
-    public abstract String getOnlistkeydown();
-
-    @Attribute(events = @EventName("listkeyup"))
-    public abstract String getOnlistkeyup();
-
-    @Attribute(events = @EventName("change"))
-    public abstract String getOnchange();
-
-    @Attribute(events = @EventName("blur"))
-    public abstract String getOnblur();
-
-    @Attribute(events = @EventName("focus"))
-    public abstract String getOnfocus();
-
-    @Attribute(events = @EventName("listblur"))
-    public abstract String getOnlistblur();
-
-    @Attribute(events = @EventName("listfocus"))
-    public abstract String getOnlistfocus();
-
-    @Attribute(events = @EventName("begin"))
-    public abstract String getOnbegin();
-
-    @Attribute(events = @EventName("error"))
-    public abstract String getOnerror();
-
-    @Attribute(events = @EventName("complete"))
-    public abstract String getOncomplete();
-
-    @Attribute(events = @EventName("beforedomupdate"))
-    public abstract String getOnbeforedomupdate();
-
-    @Override
-    public Converter getConverter() {
-        Converter converter = super.getConverter();
-        if (converter == null) {
-            converter = getConverterForValue(FacesContext.getCurrentInstance());
-        }
-
-        return converter;
-    }
-
-    private Converter getConverterForType(FacesContext context, Class<?> type) {
-
-        if (!Object.class.equals(type) && type != null) {
-            Application application = context.getApplication();
-            return application.createConverter(type);
-        }
-
-        return null;
-    }
-
-    public Converter getConverterForValue(FacesContext context) {
-        Converter converter = null;
-        ValueExpression expression = this.getValueExpression("value");
-
-        if (expression != null) {
-            Class<?> containerClass = ELUtils.getContainerClass(context, expression);
-
-            converter = getConverterForType(context, containerClass);
-        }
-
-        return converter;
-    }
-
-    public String resolveClientId(FacesContext facesContext, UIComponent contextComponent, String metaComponentId) {
-        if (ITEMS_META_COMPONENT_ID.equals(metaComponentId)) {
-            return getClientId(facesContext) + MetaComponentResolver.META_COMPONENT_SEPARATOR_CHAR + metaComponentId;
-        }
-
-        return null;
-    }
-
-    @Override
-    public boolean visitTree(VisitContext context, VisitCallback callback) {
-        if (context instanceof ExtendedVisitContext) {
-            ExtendedVisitContext extendedVisitContext = (ExtendedVisitContext) context;
-            if (extendedVisitContext.getVisitMode() == ExtendedVisitContextMode.RENDER) {
-
-                VisitResult result = extendedVisitContext.invokeMetaComponentVisitCallback(this, callback,
-                    ITEMS_META_COMPONENT_ID);
-                if (result == VisitResult.COMPLETE) {
-                    return true;
-                } else if (result == VisitResult.REJECT) {
-                    return false;
-                }
-            }
-        }
-
-        return super.visitTree(context, callback);
-    }
-
-    public void encodeMetaComponent(FacesContext context, String metaComponentId) throws IOException {
-        ((MetaComponentRenderer) getRenderer(context)).encodeMetaComponent(context, this, metaComponentId);
-    }
-}

Copied: trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutocomplete.java (from rev 18736, branches/RF-9096/src/main/java/org/richfaces/component/AbstractAutocomplete.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutocomplete.java	                        (rev 0)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/component/AbstractAutocomplete.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,259 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.component;
+
+import java.io.IOException;
+
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import javax.faces.application.Application;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.component.visit.VisitCallback;
+import javax.faces.component.visit.VisitContext;
+import javax.faces.component.visit.VisitResult;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+
+import org.ajax4jsf.util.ELUtils;
+import org.richfaces.cdk.annotations.Attribute;
+import org.richfaces.cdk.annotations.EventName;
+import org.richfaces.cdk.annotations.JsfComponent;
+import org.richfaces.cdk.annotations.JsfRenderer;
+import org.richfaces.cdk.annotations.Signature;
+import org.richfaces.cdk.annotations.Tag;
+import org.richfaces.cdk.annotations.TagType;
+import org.richfaces.context.ExtendedVisitContext;
+import org.richfaces.context.ExtendedVisitContextMode;
+import org.richfaces.renderkit.MetaComponentRenderer;
+
+/**
+ * @author Nick Belaevski
+ * 
+ */
+ at JsfComponent(tag = @Tag(type = TagType.Facelets, handler = "org.richfaces.view.facelets.AutocompleteHandler"), renderer = @JsfRenderer(type = "org.richfaces.AutocompleteRenderer"))
+public abstract class AbstractAutocomplete extends UIInput implements MetaComponentResolver, MetaComponentEncoder {
+
+    public static final String ITEMS_META_COMPONENT_ID = "items";
+
+    public static final String COMPONENT_TYPE = "org.richfaces.Autocomplete";
+
+    public static final String COMPONENT_FAMILY = UIInput.COMPONENT_FAMILY;
+
+    // TODO nick - change to Object - https://jira.jboss.org/browse/RF-8897
+    public abstract Object getAutocompleteList();
+
+    @Attribute(signature = @Signature(returnType = Object.class, parameters = {FacesContext.class, UIComponent.class, String.class}))
+    public abstract MethodExpression getAutocompleteMethod();
+
+    public abstract void setAutocompleteMethod(MethodExpression expression);
+
+    public abstract void setItemConverter(Converter converter);
+
+    @Attribute(literal = true)
+    public abstract String getVar();
+
+    // TODO nick - el-only?
+    @Attribute(literal = false)
+    public abstract Object getFetchValue();
+
+    @Attribute(defaultValue = "1")
+    public abstract int getMinChars();
+
+    @Attribute
+    public abstract String getFilterFunction();
+	
+    @Attribute(defaultValue = "rf-au-c")
+    public abstract String getSelectedItemClass();
+
+    @Attribute
+    public abstract String getMode();
+
+    @Attribute
+    public abstract String getLayout();
+
+    @Attribute
+    public abstract Converter getItemConverter();
+
+    @Attribute(defaultValue = "false")
+    public abstract boolean isAutoFill();
+
+    @Attribute(defaultValue = "false")
+    public abstract boolean isDisabled();
+
+    @Attribute(defaultValue = "false")
+    public abstract boolean isShowButton();
+
+    @Attribute(defaultValue = "false")
+    public abstract boolean isSelectFirst();
+
+    @Attribute(events = @EventName("click"))
+    public abstract String getOnclick();
+
+    @Attribute(events = @EventName("dblclick"))
+    public abstract String getOndblclick();
+
+    @Attribute(events = @EventName("mousedown"))
+    public abstract String getOnmousedown();
+
+    @Attribute(events = @EventName("mouseup"))
+    public abstract String getOnmouseup();
+
+    @Attribute(events = @EventName("mouseover"))
+    public abstract String getOnmouseover();
+
+    @Attribute(events = @EventName("mousemove"))
+    public abstract String getOnmousemove();
+
+    @Attribute(events = @EventName("mouseout"))
+    public abstract String getOnmouseout();
+
+    @Attribute(events = @EventName("keypress"))
+    public abstract String getOnkeypress();
+
+    @Attribute(events = @EventName("keydown"))
+    public abstract String getOnkeydown();
+
+    @Attribute(events = @EventName("keyup"))
+    public abstract String getOnkeyup();
+
+    @Attribute(events = @EventName("listclick"))
+    public abstract String getOnlistclick();
+
+    @Attribute(events = @EventName("listdblclick"))
+    public abstract String getOnlistdblclick();
+
+    @Attribute(events = @EventName("listmousedown"))
+    public abstract String getOnlistmousedown();
+
+    @Attribute(events = @EventName("listmouseup"))
+    public abstract String getOnlistmouseup();
+
+    @Attribute(events = @EventName("listmouseover"))
+    public abstract String getOnlistmouseover();
+
+    @Attribute(events = @EventName("listmousemove"))
+    public abstract String getOnlistmousemove();
+
+    @Attribute(events = @EventName("listmouseout"))
+    public abstract String getOnlistmouseout();
+
+    @Attribute(events = @EventName("listkeypress"))
+    public abstract String getOnlistkeypress();
+
+    @Attribute(events = @EventName("listkeydown"))
+    public abstract String getOnlistkeydown();
+
+    @Attribute(events = @EventName("listkeyup"))
+    public abstract String getOnlistkeyup();
+
+    @Attribute(events = @EventName("change"))
+    public abstract String getOnchange();
+
+    @Attribute(events = @EventName("blur"))
+    public abstract String getOnblur();
+
+    @Attribute(events = @EventName("focus"))
+    public abstract String getOnfocus();
+
+    @Attribute(events = @EventName("listblur"))
+    public abstract String getOnlistblur();
+
+    @Attribute(events = @EventName("listfocus"))
+    public abstract String getOnlistfocus();
+
+    @Attribute(events = @EventName("begin"))
+    public abstract String getOnbegin();
+
+    @Attribute(events = @EventName("error"))
+    public abstract String getOnerror();
+
+    @Attribute(events = @EventName("complete"))
+    public abstract String getOncomplete();
+
+    @Attribute(events = @EventName("beforedomupdate"))
+    public abstract String getOnbeforedomupdate();
+
+    @Override
+    public Converter getConverter() {
+        Converter converter = super.getConverter();
+        if (converter == null) {
+            converter = getConverterForValue(FacesContext.getCurrentInstance());
+        }
+
+        return converter;
+    }
+
+    private Converter getConverterForType(FacesContext context, Class<?> type) {
+
+        if (!Object.class.equals(type) && type != null) {
+            Application application = context.getApplication();
+            return application.createConverter(type);
+        }
+
+        return null;
+    }
+
+    public Converter getConverterForValue(FacesContext context) {
+        Converter converter = null;
+        ValueExpression expression = this.getValueExpression("value");
+
+        if (expression != null) {
+            Class<?> containerClass = ELUtils.getContainerClass(context, expression);
+
+            converter = getConverterForType(context, containerClass);
+        }
+
+        return converter;
+    }
+
+    public String resolveClientId(FacesContext facesContext, UIComponent contextComponent, String metaComponentId) {
+        if (ITEMS_META_COMPONENT_ID.equals(metaComponentId)) {
+            return getClientId(facesContext) + MetaComponentResolver.META_COMPONENT_SEPARATOR_CHAR + metaComponentId;
+        }
+
+        return null;
+    }
+
+    @Override
+    public boolean visitTree(VisitContext context, VisitCallback callback) {
+        if (context instanceof ExtendedVisitContext) {
+            ExtendedVisitContext extendedVisitContext = (ExtendedVisitContext) context;
+            if (extendedVisitContext.getVisitMode() == ExtendedVisitContextMode.RENDER) {
+
+                VisitResult result = extendedVisitContext.invokeMetaComponentVisitCallback(this, callback,
+                    ITEMS_META_COMPONENT_ID);
+                if (result == VisitResult.COMPLETE) {
+                    return true;
+                } else if (result == VisitResult.REJECT) {
+                    return false;
+                }
+            }
+        }
+
+        return super.visitTree(context, callback);
+    }
+
+    public void encodeMetaComponent(FacesContext context, String metaComponentId) throws IOException {
+        ((MetaComponentRenderer) getRenderer(context)).encodeMetaComponent(context, this, metaComponentId);
+    }
+}

Deleted: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteEncodeStrategy.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteEncodeStrategy.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteEncodeStrategy.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,22 +0,0 @@
-package org.richfaces.renderkit;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
-import org.richfaces.component.AbstractAutoComplete;
-
-
-public interface AutoCompleteEncodeStrategy {
-    void encodeItemsContainerBegin(FacesContext facesContext, UIComponent component) throws IOException ;
-
-    void encodeItemsContainerEnd(FacesContext facesContext, UIComponent component) throws IOException ;
-
-    void encodeFakeItem(FacesContext facesContext, UIComponent component) throws IOException ;
-
-    void encodeItem(FacesContext facesContext, AbstractAutoComplete comboBox,
-        Object nextItem) throws IOException;
-
-    public String getContainerElementId(FacesContext facesContext, UIComponent component);
-}

Deleted: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteRendererBase.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteRendererBase.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutoCompleteRendererBase.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,261 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.renderkit;
-
-import java.io.IOException;
-import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.el.ELException;
-import javax.el.MethodExpression;
-import javax.faces.application.ResourceDependencies;
-import javax.faces.application.ResourceDependency;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.PartialResponseWriter;
-import javax.faces.context.PartialViewContext;
-import javax.faces.model.ArrayDataModel;
-import javax.faces.model.DataModel;
-import javax.faces.model.ListDataModel;
-import javax.faces.model.ResultDataModel;
-import javax.faces.model.ResultSetDataModel;
-import javax.servlet.jsp.jstl.sql.Result;
-
-import org.ajax4jsf.context.AjaxContext;
-import org.ajax4jsf.javascript.ScriptUtils;
-import org.ajax4jsf.renderkit.RendererUtils;
-import org.ajax4jsf.util.InputUtils;
-import org.richfaces.component.AbstractAutoComplete;
-import org.richfaces.component.AutocompleteLayout;
-import org.richfaces.component.MetaComponentResolver;
-
-import com.google.common.base.Predicates;
-import com.google.common.collect.Iterators;
-
-/**
- * @author Nick Belaevski
- * 
- */
- at ResourceDependencies({ @ResourceDependency(library = "javax.faces", name = "jsf.js"),
-    @ResourceDependency(name = "jquery.js"), @ResourceDependency(name = "jquery.position.js"),
-    @ResourceDependency(name = "richfaces.js"), @ResourceDependency(name = "richfaces-event.js"),
-    @ResourceDependency(name = "richfaces-base-component.js"), @ResourceDependency(name = "richfaces-selection.js"),
-    @ResourceDependency(library = "org.richfaces", name = "AutoCompleteBase.js"),
-    @ResourceDependency(library = "org.richfaces", name = "AutoComplete.js"),
-    @ResourceDependency(library = "org.richfaces", name = "AutoComplete.ecss")
-
-})
-public abstract class AutoCompleteRendererBase extends InputRendererBase implements MetaComponentRenderer {
-
-    public String getScriptOptions(UIComponent component) {
-        Map<String, Object> attributes = component.getAttributes();
-        Map<String, Object> options = new HashMap<String, Object>();
-        RendererUtils utils = getUtils();
-        utils.addToScriptHash(options, "buttonId", component.getClientId() + "Button");
-        utils.addToScriptHash(options, "selectedItemClass", attributes.get("selectedItemClass"));
-        utils.addToScriptHash(options, "minChars", attributes.get("minChars"), "1");
-        utils.addToScriptHash(options, "mode", attributes.get("mode"), "ajax");
-        utils.addToScriptHash(options, "filterFunction", attributes.get("filterFunction"));
-        utils.addToScriptHash(options, "autoFill", attributes.get("autoFill"), "false");
-        utils.addToScriptHash(options, "disabled", attributes.get("disabled"), "false");
-        utils.addToScriptHash(options, "selectFirst", attributes.get("selectFirst"), "false");
-        utils.addToScriptHash(options, "onbegin", attributes.get("onbegin"));
-        utils.addToScriptHash(options, "oncomplete", attributes.get("oncomplete"));
-        utils.addToScriptHash(options, "onerror", attributes.get("onerror"));
-        utils.addToScriptHash(options, "onbeforedomupdate", attributes.get("onbeforedomupdate"));
-        utils.addToScriptHash(options, "onchange", attributes.get("onchange"));
-        StringBuilder builder = new StringBuilder();
-        builder.append(ScriptUtils.toScript(options));
-        return builder.toString();
-    }
-
-    // TODO nick - handle parameter
-    @SuppressWarnings("unchecked")
-    private DataModel<Object> getItems(FacesContext facesContext, AbstractAutoComplete component) {
-        Object itemsObject = null;
-
-        MethodExpression autocompleteMethod = component.getAutocompleteMethod();
-        if (autocompleteMethod != null) {
-            Map<String, String> requestParameters = facesContext.getExternalContext().getRequestParameterMap();
-            String value = requestParameters.get(component.getClientId(facesContext) + "Value");
-            try {
-                // String value = getInputValue(facesContext, component);
-
-                itemsObject = autocompleteMethod.invoke(facesContext.getELContext(), new Object[] { facesContext,
-                    component, value });
-            } catch (ELException e) {
-                try {
-                    autocompleteMethod = facesContext
-                        .getApplication()
-                        .getExpressionFactory()
-                        .createMethodExpression(facesContext.getELContext(), autocompleteMethod.getExpressionString(),
-                            Void.class, new Class[] { String.class });
-                    itemsObject = autocompleteMethod.invoke(facesContext.getELContext(), new Object[] { value });
-                } catch (ELException ee) {
-                    ee.printStackTrace();
-                }
-
-            }
-        } else {
-            itemsObject = component.getAutocompleteList();
-        }
-
-        DataModel result;
-
-        if (itemsObject instanceof Object[]) {
-            result = new ArrayDataModel((Object[]) itemsObject);
-        } else if (itemsObject instanceof List) {
-            result = new ListDataModel((List<Object>) itemsObject);
-        } else if (itemsObject instanceof Result) {
-            result = new ResultDataModel((Result) itemsObject);
-        } else if (itemsObject instanceof ResultSet) {
-            result = new ResultSetDataModel((ResultSet) itemsObject);
-        } else if (itemsObject != null) {
-            List<Object> temp = new ArrayList<Object>();
-            Iterator<Object> iterator = ((Iterable<Object>) itemsObject).iterator();
-            while (iterator.hasNext()) {
-                temp.add(iterator.next());
-            }
-            result = new ListDataModel(temp);
-        } else {
-            result = new ListDataModel(null);
-        }
-
-        return result;
-    }
-
-    private Object saveVar(FacesContext context, String var) {
-        if (var != null) {
-            Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
-            return requestMap.get(var);
-        }
-
-        return null;
-    }
-
-    private void setVar(FacesContext context, String var, Object varObject) {
-        if (var != null) {
-            Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
-            requestMap.put(var, varObject);
-        }
-    }
-
-    protected void encodeItems(FacesContext facesContext, UIComponent component, List<Object> fetchValues)
-        throws IOException {
-        AbstractAutoComplete comboBox = (AbstractAutoComplete) component;
-        AutoCompleteEncodeStrategy strategy = getStrategy(component);
-        strategy.encodeItemsContainerBegin(facesContext, component);
-
-        boolean hasEncodedElements = false;
-
-        Object savedVar = saveVar(facesContext, comboBox.getVar());
-        DataModel<Object> model = getItems(facesContext, comboBox);
-        for (Iterator<Object> items = model.iterator(); items.hasNext();) {
-            hasEncodedElements = true;
-
-            Object nextItem = items.next();
-            setVar(facesContext, comboBox.getVar(), nextItem);
-
-            strategy.encodeItem(facesContext, comboBox, nextItem);
-            if (comboBox.getFetchValue() != null) {
-                fetchValues.add(comboBox.getFetchValue());
-            } else {
-                // TODO use converter
-                fetchValues.add(nextItem);
-            }
-        }
-
-        setVar(facesContext, comboBox.getVar(), savedVar);
-
-        if (!hasEncodedElements) {
-            strategy.encodeFakeItem(facesContext, component);
-        }
-
-        strategy.encodeItemsContainerEnd(facesContext, component);
-    }
-
-    protected void encodeItemsContainer(FacesContext facesContext, UIComponent component) throws IOException {
-        AutoCompleteEncodeStrategy strategy = getStrategy(component);
-        strategy.encodeItemsContainerBegin(facesContext, component);
-        strategy.encodeFakeItem(facesContext, component);
-        strategy.encodeItemsContainerEnd(facesContext, component);
-    }
-
-    private AutoCompleteEncodeStrategy getStrategy(UIComponent component) {
-        AbstractAutoComplete comboBox = (AbstractAutoComplete) component;
-        if (comboBox.getLayout() != null) {
-            if (comboBox.getLayout().equals(AutocompleteLayout.div)) {
-                return new AutocompleteDivLayoutStrategy();
-            }
-            if (comboBox.getLayout().equals(AutocompleteLayout.grid)) {
-                return new AutocompleteGridLayoutStrategy();
-            }
-            if (comboBox.getLayout().equals(AutocompleteLayout.list)) {
-                return new AutocompleteListLayoutStrategy();
-            }
-            if (comboBox.getLayout().equals(AutocompleteLayout.table)) {
-                return new AutocompleteTableLayoutStrategy();
-            }
-        }
-        return new AutocompleteDivLayoutStrategy();
-    }
-
-    @Override
-    protected void doDecode(FacesContext context, UIComponent component) {
-        if (InputUtils.isDisabled(component)) {
-            return;
-        }
-        super.doDecode(context, component);
-
-        Map<String, String> requestParameters = context.getExternalContext().getRequestParameterMap();
-        if (requestParameters.get(component.getClientId(context) + ".ajax") != null) {
-            PartialViewContext pvc = context.getPartialViewContext();
-            pvc.getRenderIds().add(
-                component.getClientId(context) + MetaComponentResolver.META_COMPONENT_SEPARATOR_CHAR
-                    + AbstractAutoComplete.ITEMS_META_COMPONENT_ID);
-        }
-    }
-
-    public void encodeMetaComponent(FacesContext context, UIComponent component, String metaComponentId)
-        throws IOException {
-        if (AbstractAutoComplete.ITEMS_META_COMPONENT_ID.equals(metaComponentId)) {
-
-            List<Object> fetchValues = new ArrayList<Object>();
-
-            PartialResponseWriter partialWriter = context.getPartialViewContext().getPartialResponseWriter();
-            partialWriter.startUpdate(getStrategy(component).getContainerElementId(context, component));
-            encodeItems(context, component, fetchValues);
-            partialWriter.endUpdate();
-
-            if (!fetchValues.isEmpty() && Iterators.find(fetchValues.iterator(), Predicates.notNull()) != null) {
-                Map<String, Object> dataMap = AjaxContext.getCurrentInstance(context).getResponseComponentDataMap();
-                dataMap.put(component.getClientId(context), fetchValues);
-            }
-        } else {
-            throw new IllegalArgumentException(metaComponentId);
-        }
-    }
-}

Modified: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteDivLayoutStrategy.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteDivLayoutStrategy.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteDivLayoutStrategy.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -29,10 +29,10 @@
 import javax.faces.context.ResponseWriter;
 
 import org.ajax4jsf.renderkit.RendererUtils.HTML;
-import org.richfaces.component.AbstractAutoComplete;
+import org.richfaces.component.AbstractAutocomplete;
 
 public class AutocompleteDivLayoutStrategy extends AbstractAutocompleteLayoutStrategy implements
-    AutoCompleteEncodeStrategy {
+    AutocompleteEncodeStrategy {
 
     public void encodeFakeItem(FacesContext facesContext, UIComponent component) throws IOException {
         ResponseWriter responseWriter = facesContext.getResponseWriter();
@@ -54,7 +54,7 @@
         responseWriter.endElement(HTML.DIV_ELEM);
     }
 
-    public void encodeItem(FacesContext facesContext, AbstractAutoComplete comboBox, Object item) throws IOException {
+    public void encodeItem(FacesContext facesContext, AbstractAutocomplete comboBox, Object item) throws IOException {
         ResponseWriter writer = facesContext.getResponseWriter();
 
         writer.startElement(HTML.DIV_ELEM, comboBox);

Copied: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteEncodeStrategy.java (from rev 18736, branches/RF-9096/src/main/java/org/richfaces/renderkit/AutocompleteEncodeStrategy.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteEncodeStrategy.java	                        (rev 0)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteEncodeStrategy.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,22 @@
+package org.richfaces.renderkit;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+import org.richfaces.component.AbstractAutocomplete;
+
+
+public interface AutocompleteEncodeStrategy {
+    void encodeItemsContainerBegin(FacesContext facesContext, UIComponent component) throws IOException ;
+
+    void encodeItemsContainerEnd(FacesContext facesContext, UIComponent component) throws IOException ;
+
+    void encodeFakeItem(FacesContext facesContext, UIComponent component) throws IOException ;
+
+    void encodeItem(FacesContext facesContext, AbstractAutocomplete comboBox,
+        Object nextItem) throws IOException;
+
+    public String getContainerElementId(FacesContext facesContext, UIComponent component);
+}

Modified: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteGridLayoutStrategy.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteGridLayoutStrategy.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteGridLayoutStrategy.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -5,10 +5,10 @@
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 
-import org.richfaces.component.AbstractAutoComplete;
+import org.richfaces.component.AbstractAutocomplete;
 
 public class AutocompleteGridLayoutStrategy extends AbstractAutocompleteLayoutStrategy implements
-    AutoCompleteEncodeStrategy {
+    AutocompleteEncodeStrategy {
 
     public void encodeFakeItem(FacesContext facesContext, UIComponent component) throws IOException {
         // TODO Auto-generated method stub
@@ -25,7 +25,7 @@
 
     }
 
-    public void encodeItem(FacesContext facesContext, AbstractAutoComplete comboBox, Object nextItem)
+    public void encodeItem(FacesContext facesContext, AbstractAutocomplete comboBox, Object nextItem)
         throws IOException {
         // TODO Auto-generated method stub
 

Modified: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteListLayoutStrategy.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteListLayoutStrategy.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteListLayoutStrategy.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -7,10 +7,10 @@
 import javax.faces.context.ResponseWriter;
 
 import org.ajax4jsf.renderkit.RendererUtils.HTML;
-import org.richfaces.component.AbstractAutoComplete;
+import org.richfaces.component.AbstractAutocomplete;
 
 public class AutocompleteListLayoutStrategy extends AbstractAutocompleteLayoutStrategy implements
-    AutoCompleteEncodeStrategy {
+    AutocompleteEncodeStrategy {
 
     public void encodeFakeItem(FacesContext facesContext, UIComponent component) throws IOException {
         ResponseWriter responseWriter = facesContext.getResponseWriter();
@@ -32,7 +32,7 @@
         responseWriter.endElement(HTML.UL_ELEMENT);
     }
 
-    public void encodeItem(FacesContext facesContext, AbstractAutoComplete comboBox, Object item) throws IOException {
+    public void encodeItem(FacesContext facesContext, AbstractAutocomplete comboBox, Object item) throws IOException {
         ResponseWriter writer = facesContext.getResponseWriter();
 
         writer.startElement(HTML.LI_ELEMENT, comboBox);

Copied: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java (from rev 18736, branches/RF-9096/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java	                        (rev 0)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteRendererBase.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,261 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.renderkit;
+
+import java.io.IOException;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.el.ELException;
+import javax.el.MethodExpression;
+import javax.faces.application.ResourceDependencies;
+import javax.faces.application.ResourceDependency;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.PartialResponseWriter;
+import javax.faces.context.PartialViewContext;
+import javax.faces.model.ArrayDataModel;
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+import javax.faces.model.ResultDataModel;
+import javax.faces.model.ResultSetDataModel;
+import javax.servlet.jsp.jstl.sql.Result;
+
+import org.ajax4jsf.context.AjaxContext;
+import org.ajax4jsf.javascript.ScriptUtils;
+import org.ajax4jsf.renderkit.RendererUtils;
+import org.ajax4jsf.util.InputUtils;
+import org.richfaces.component.AbstractAutocomplete;
+import org.richfaces.component.AutocompleteLayout;
+import org.richfaces.component.MetaComponentResolver;
+
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterators;
+
+/**
+ * @author Nick Belaevski
+ * 
+ */
+ at ResourceDependencies({ @ResourceDependency(library = "javax.faces", name = "jsf.js"),
+    @ResourceDependency(name = "jquery.js"), @ResourceDependency(name = "jquery.position.js"),
+    @ResourceDependency(name = "richfaces.js"), @ResourceDependency(name = "richfaces-event.js"),
+    @ResourceDependency(name = "richfaces-base-component.js"), @ResourceDependency(name = "richfaces-selection.js"),
+    @ResourceDependency(library = "org.richfaces", name = "AutocompleteBase.js"),
+    @ResourceDependency(library = "org.richfaces", name = "Autocomplete.js"),
+    @ResourceDependency(library = "org.richfaces", name = "Autocomplete.ecss")
+
+})
+public abstract class AutocompleteRendererBase extends InputRendererBase implements MetaComponentRenderer {
+
+    public String getScriptOptions(UIComponent component) {
+        Map<String, Object> attributes = component.getAttributes();
+        Map<String, Object> options = new HashMap<String, Object>();
+        RendererUtils utils = getUtils();
+        utils.addToScriptHash(options, "buttonId", component.getClientId() + "Button");
+        utils.addToScriptHash(options, "selectedItemClass", attributes.get("selectedItemClass"));
+        utils.addToScriptHash(options, "minChars", attributes.get("minChars"), "1");
+        utils.addToScriptHash(options, "mode", attributes.get("mode"), "ajax");
+        utils.addToScriptHash(options, "filterFunction", attributes.get("filterFunction"));
+        utils.addToScriptHash(options, "autoFill", attributes.get("autoFill"), "false");
+        utils.addToScriptHash(options, "disabled", attributes.get("disabled"), "false");
+        utils.addToScriptHash(options, "selectFirst", attributes.get("selectFirst"), "false");
+        utils.addToScriptHash(options, "onbegin", attributes.get("onbegin"));
+        utils.addToScriptHash(options, "oncomplete", attributes.get("oncomplete"));
+        utils.addToScriptHash(options, "onerror", attributes.get("onerror"));
+        utils.addToScriptHash(options, "onbeforedomupdate", attributes.get("onbeforedomupdate"));
+        utils.addToScriptHash(options, "onchange", attributes.get("onchange"));
+        StringBuilder builder = new StringBuilder();
+        builder.append(ScriptUtils.toScript(options));
+        return builder.toString();
+    }
+
+    // TODO nick - handle parameter
+    @SuppressWarnings("unchecked")
+    private DataModel<Object> getItems(FacesContext facesContext, AbstractAutocomplete component) {
+        Object itemsObject = null;
+
+        MethodExpression autocompleteMethod = component.getAutocompleteMethod();
+        if (autocompleteMethod != null) {
+            Map<String, String> requestParameters = facesContext.getExternalContext().getRequestParameterMap();
+            String value = requestParameters.get(component.getClientId(facesContext) + "Value");
+            try {
+                // String value = getInputValue(facesContext, component);
+
+                itemsObject = autocompleteMethod.invoke(facesContext.getELContext(), new Object[] { facesContext,
+                    component, value });
+            } catch (ELException e) {
+                try {
+                    autocompleteMethod = facesContext
+                        .getApplication()
+                        .getExpressionFactory()
+                        .createMethodExpression(facesContext.getELContext(), autocompleteMethod.getExpressionString(),
+                            Void.class, new Class[] { String.class });
+                    itemsObject = autocompleteMethod.invoke(facesContext.getELContext(), new Object[] { value });
+                } catch (ELException ee) {
+                    ee.printStackTrace();
+                }
+
+            }
+        } else {
+            itemsObject = component.getAutocompleteList();
+        }
+
+        DataModel result;
+
+        if (itemsObject instanceof Object[]) {
+            result = new ArrayDataModel((Object[]) itemsObject);
+        } else if (itemsObject instanceof List) {
+            result = new ListDataModel((List<Object>) itemsObject);
+        } else if (itemsObject instanceof Result) {
+            result = new ResultDataModel((Result) itemsObject);
+        } else if (itemsObject instanceof ResultSet) {
+            result = new ResultSetDataModel((ResultSet) itemsObject);
+        } else if (itemsObject != null) {
+            List<Object> temp = new ArrayList<Object>();
+            Iterator<Object> iterator = ((Iterable<Object>) itemsObject).iterator();
+            while (iterator.hasNext()) {
+                temp.add(iterator.next());
+            }
+            result = new ListDataModel(temp);
+        } else {
+            result = new ListDataModel(null);
+        }
+
+        return result;
+    }
+
+    private Object saveVar(FacesContext context, String var) {
+        if (var != null) {
+            Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
+            return requestMap.get(var);
+        }
+
+        return null;
+    }
+
+    private void setVar(FacesContext context, String var, Object varObject) {
+        if (var != null) {
+            Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
+            requestMap.put(var, varObject);
+        }
+    }
+
+    protected void encodeItems(FacesContext facesContext, UIComponent component, List<Object> fetchValues)
+        throws IOException {
+        AbstractAutocomplete comboBox = (AbstractAutocomplete) component;
+        AutocompleteEncodeStrategy strategy = getStrategy(component);
+        strategy.encodeItemsContainerBegin(facesContext, component);
+
+        boolean hasEncodedElements = false;
+
+        Object savedVar = saveVar(facesContext, comboBox.getVar());
+        DataModel<Object> model = getItems(facesContext, comboBox);
+        for (Iterator<Object> items = model.iterator(); items.hasNext();) {
+            hasEncodedElements = true;
+
+            Object nextItem = items.next();
+            setVar(facesContext, comboBox.getVar(), nextItem);
+
+            strategy.encodeItem(facesContext, comboBox, nextItem);
+            if (comboBox.getFetchValue() != null) {
+                fetchValues.add(comboBox.getFetchValue());
+            } else {
+                // TODO use converter
+                fetchValues.add(nextItem);
+            }
+        }
+
+        setVar(facesContext, comboBox.getVar(), savedVar);
+
+        if (!hasEncodedElements) {
+            strategy.encodeFakeItem(facesContext, component);
+        }
+
+        strategy.encodeItemsContainerEnd(facesContext, component);
+    }
+
+    protected void encodeItemsContainer(FacesContext facesContext, UIComponent component) throws IOException {
+        AutocompleteEncodeStrategy strategy = getStrategy(component);
+        strategy.encodeItemsContainerBegin(facesContext, component);
+        strategy.encodeFakeItem(facesContext, component);
+        strategy.encodeItemsContainerEnd(facesContext, component);
+    }
+
+    private AutocompleteEncodeStrategy getStrategy(UIComponent component) {
+        AbstractAutocomplete comboBox = (AbstractAutocomplete) component;
+        if (comboBox.getLayout() != null) {
+            if (comboBox.getLayout().equals(AutocompleteLayout.div)) {
+                return new AutocompleteDivLayoutStrategy();
+            }
+            if (comboBox.getLayout().equals(AutocompleteLayout.grid)) {
+                return new AutocompleteGridLayoutStrategy();
+            }
+            if (comboBox.getLayout().equals(AutocompleteLayout.list)) {
+                return new AutocompleteListLayoutStrategy();
+            }
+            if (comboBox.getLayout().equals(AutocompleteLayout.table)) {
+                return new AutocompleteTableLayoutStrategy();
+            }
+        }
+        return new AutocompleteDivLayoutStrategy();
+    }
+
+    @Override
+    protected void doDecode(FacesContext context, UIComponent component) {
+        if (InputUtils.isDisabled(component)) {
+            return;
+        }
+        super.doDecode(context, component);
+
+        Map<String, String> requestParameters = context.getExternalContext().getRequestParameterMap();
+        if (requestParameters.get(component.getClientId(context) + ".ajax") != null) {
+            PartialViewContext pvc = context.getPartialViewContext();
+            pvc.getRenderIds().add(
+                component.getClientId(context) + MetaComponentResolver.META_COMPONENT_SEPARATOR_CHAR
+                    + AbstractAutocomplete.ITEMS_META_COMPONENT_ID);
+        }
+    }
+
+    public void encodeMetaComponent(FacesContext context, UIComponent component, String metaComponentId)
+        throws IOException {
+        if (AbstractAutocomplete.ITEMS_META_COMPONENT_ID.equals(metaComponentId)) {
+
+            List<Object> fetchValues = new ArrayList<Object>();
+
+            PartialResponseWriter partialWriter = context.getPartialViewContext().getPartialResponseWriter();
+            partialWriter.startUpdate(getStrategy(component).getContainerElementId(context, component));
+            encodeItems(context, component, fetchValues);
+            partialWriter.endUpdate();
+
+            if (!fetchValues.isEmpty() && Iterators.find(fetchValues.iterator(), Predicates.notNull()) != null) {
+                Map<String, Object> dataMap = AjaxContext.getCurrentInstance(context).getResponseComponentDataMap();
+                dataMap.put(component.getClientId(context), fetchValues);
+            }
+        } else {
+            throw new IllegalArgumentException(metaComponentId);
+        }
+    }
+}

Modified: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteTableLayoutStrategy.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteTableLayoutStrategy.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/AutocompleteTableLayoutStrategy.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -5,10 +5,10 @@
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 
-import org.richfaces.component.AbstractAutoComplete;
+import org.richfaces.component.AbstractAutocomplete;
 
 public class AutocompleteTableLayoutStrategy extends AbstractAutocompleteLayoutStrategy implements
-    AutoCompleteEncodeStrategy {
+    AutocompleteEncodeStrategy {
 
     public void encodeFakeItem(FacesContext facesContext, UIComponent component) throws IOException {
         // TODO Auto-generated method stub
@@ -25,7 +25,7 @@
 
     }
 
-    public void encodeItem(FacesContext facesContext, AbstractAutoComplete comboBox, Object nextItem)
+    public void encodeItem(FacesContext facesContext, AbstractAutocomplete comboBox, Object nextItem)
         throws IOException {
         // TODO Auto-generated method stub
 

Deleted: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteBaseGradient.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteBaseGradient.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteBaseGradient.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,126 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.renderkit.html.images;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.GradientPaint;
-import java.awt.Graphics2D;
-import java.awt.Rectangle;
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.Date;
-import java.util.Map;
-
-import javax.faces.context.FacesContext;
-
-import org.richfaces.resource.CacheableResource;
-import org.richfaces.resource.DynamicResource;
-import org.richfaces.resource.ImageType;
-import org.richfaces.resource.Java2DUserResource;
-import org.richfaces.resource.StateHolderResource;
-import org.richfaces.skin.Skin;
-import org.richfaces.skin.SkinFactory;
-
-/**
- * @author Nick Belaevski
- * 
- */
- at DynamicResource
-public abstract class AutoCompleteBaseGradient implements Java2DUserResource, CacheableResource, StateHolderResource {
-
-    private static final Dimension DIMENSION = new Dimension(18, 8);
-  
-    private String topColorSkinParameter;
-    
-    private String bottomColorSkinParameter;
-    
-    private Color topColor;
-    
-    private Color bottomColor;
-    
-    public Map<String, String> getResponseHeaders() {
-        return null;
-    }
-
-    public Date getLastModified() {
-        return null;
-    }
-
-    public ImageType getImageType() {
-        return ImageType.PNG;
-    }
-
-    public Dimension getDimension() {
-        return DIMENSION;
-    }
-
-    public void paint(Graphics2D graphics2d, Dimension dimension) {
-        GradientPaint paint = new GradientPaint(0, 0, topColor, 0, dimension.height, bottomColor);
-        graphics2d.setPaint(paint);
-        graphics2d.fill(new Rectangle(dimension));
-    }
-
-    public boolean isCacheable(FacesContext context) {
-        return true;
-    }
-
-    public Date getExpires(FacesContext context) {
-        return null;
-    }
-
-    public int getTimeToLive(FacesContext context) {
-        return 0;
-    }
-
-    public String getEntityTag(FacesContext context) {
-        return null;
-    }
-
-    public void writeState(FacesContext context, DataOutput dataOutput) throws IOException {
-        Skin skin = SkinFactory.getInstance().getSkin(context);
-        
-        Integer topColor = skin.getColorParameter(context, topColorSkinParameter);
-        Integer bottomColor = skin.getColorParameter(context, bottomColorSkinParameter);
-        
-        dataOutput.writeInt(topColor);
-        dataOutput.writeInt(bottomColor);
-    }
-    
-    public void readState(FacesContext context, DataInput dataInput) throws IOException {
-        topColor = new Color(dataInput.readInt());
-        bottomColor = new Color(dataInput.readInt());
-    }
- 
-    public boolean isTransient() {
-        return false;
-    }
-    
-    protected void setTopColorSkinParameter(String topColorSkinParameter) {
-        this.topColorSkinParameter = topColorSkinParameter;
-    }
-    
-    protected void setBottomColorSkinParameter(String bottomColorSkinParameter) {
-        this.bottomColorSkinParameter = bottomColorSkinParameter;
-    }
-}

Deleted: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteButtonGradient.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteButtonGradient.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteButtonGradient.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,39 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.renderkit.html.images;
-
-import org.richfaces.resource.DynamicResource;
-import org.richfaces.skin.Skin;
-
-/**
- * @author Nick Belaevski
- * 
- */
- at DynamicResource
-public class AutoCompleteButtonGradient extends AutoCompleteBaseGradient {
-
-    public AutoCompleteButtonGradient() {
-        setTopColorSkinParameter(Skin.HEADER_GRADIENT_COLOR);
-        setBottomColorSkinParameter(Skin.HEADER_BACKGROUND_COLOR);
-    }
-    
-}

Deleted: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteFieldGradient.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteFieldGradient.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutoCompleteFieldGradient.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,38 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.renderkit.html.images;
-
-import org.richfaces.resource.DynamicResource;
-import org.richfaces.skin.Skin;
-
-/**
- * @author Nick Belaevski
- * 
- */
- at DynamicResource
-public class AutoCompleteFieldGradient extends AutoCompleteBaseGradient {
-
-    public AutoCompleteFieldGradient() {
-        setTopColorSkinParameter(Skin.ADDITIONAL_BACKGROUND_COLOR);
-        setBottomColorSkinParameter(Skin.CONTROL_BACKGROUND_COLOR);
-    }
-}

Copied: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteBaseGradient.java (from rev 18736, branches/RF-9096/src/main/java/org/richfaces/renderkit/html/images/AutocompleteBaseGradient.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteBaseGradient.java	                        (rev 0)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteBaseGradient.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,126 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.renderkit.html.images;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GradientPaint;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+
+import org.richfaces.resource.CacheableResource;
+import org.richfaces.resource.DynamicResource;
+import org.richfaces.resource.ImageType;
+import org.richfaces.resource.Java2DUserResource;
+import org.richfaces.resource.StateHolderResource;
+import org.richfaces.skin.Skin;
+import org.richfaces.skin.SkinFactory;
+
+/**
+ * @author Nick Belaevski
+ * 
+ */
+ at DynamicResource
+public abstract class AutocompleteBaseGradient implements Java2DUserResource, CacheableResource, StateHolderResource {
+
+    private static final Dimension DIMENSION = new Dimension(18, 8);
+  
+    private String topColorSkinParameter;
+    
+    private String bottomColorSkinParameter;
+    
+    private Color topColor;
+    
+    private Color bottomColor;
+    
+    public Map<String, String> getResponseHeaders() {
+        return null;
+    }
+
+    public Date getLastModified() {
+        return null;
+    }
+
+    public ImageType getImageType() {
+        return ImageType.PNG;
+    }
+
+    public Dimension getDimension() {
+        return DIMENSION;
+    }
+
+    public void paint(Graphics2D graphics2d, Dimension dimension) {
+        GradientPaint paint = new GradientPaint(0, 0, topColor, 0, dimension.height, bottomColor);
+        graphics2d.setPaint(paint);
+        graphics2d.fill(new Rectangle(dimension));
+    }
+
+    public boolean isCacheable(FacesContext context) {
+        return true;
+    }
+
+    public Date getExpires(FacesContext context) {
+        return null;
+    }
+
+    public int getTimeToLive(FacesContext context) {
+        return 0;
+    }
+
+    public String getEntityTag(FacesContext context) {
+        return null;
+    }
+
+    public void writeState(FacesContext context, DataOutput dataOutput) throws IOException {
+        Skin skin = SkinFactory.getInstance().getSkin(context);
+        
+        Integer topColor = skin.getColorParameter(context, topColorSkinParameter);
+        Integer bottomColor = skin.getColorParameter(context, bottomColorSkinParameter);
+        
+        dataOutput.writeInt(topColor);
+        dataOutput.writeInt(bottomColor);
+    }
+    
+    public void readState(FacesContext context, DataInput dataInput) throws IOException {
+        topColor = new Color(dataInput.readInt());
+        bottomColor = new Color(dataInput.readInt());
+    }
+ 
+    public boolean isTransient() {
+        return false;
+    }
+    
+    protected void setTopColorSkinParameter(String topColorSkinParameter) {
+        this.topColorSkinParameter = topColorSkinParameter;
+    }
+    
+    protected void setBottomColorSkinParameter(String bottomColorSkinParameter) {
+        this.bottomColorSkinParameter = bottomColorSkinParameter;
+    }
+}

Copied: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteButtonGradient.java (from rev 18736, branches/RF-9096/src/main/java/org/richfaces/renderkit/html/images/AutocompleteButtonGradient.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteButtonGradient.java	                        (rev 0)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteButtonGradient.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,39 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.renderkit.html.images;
+
+import org.richfaces.resource.DynamicResource;
+import org.richfaces.skin.Skin;
+
+/**
+ * @author Nick Belaevski
+ * 
+ */
+ at DynamicResource
+public class AutocompleteButtonGradient extends AutocompleteBaseGradient {
+
+    public AutocompleteButtonGradient() {
+        setTopColorSkinParameter(Skin.HEADER_GRADIENT_COLOR);
+        setBottomColorSkinParameter(Skin.HEADER_BACKGROUND_COLOR);
+    }
+    
+}

Copied: trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteFieldGradient.java (from rev 18736, branches/RF-9096/src/main/java/org/richfaces/renderkit/html/images/AutocompleteFieldGradient.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteFieldGradient.java	                        (rev 0)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/renderkit/html/images/AutocompleteFieldGradient.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,38 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.renderkit.html.images;
+
+import org.richfaces.resource.DynamicResource;
+import org.richfaces.skin.Skin;
+
+/**
+ * @author Nick Belaevski
+ * 
+ */
+ at DynamicResource
+public class AutocompleteFieldGradient extends AutocompleteBaseGradient {
+
+    public AutocompleteFieldGradient() {
+        setTopColorSkinParameter(Skin.ADDITIONAL_BACKGROUND_COLOR);
+        setBottomColorSkinParameter(Skin.CONTROL_BACKGROUND_COLOR);
+    }
+}

Deleted: trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutoCompleteHandler.java
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutoCompleteHandler.java	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutoCompleteHandler.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,97 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.view.facelets;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.MetaRule;
-import javax.faces.view.facelets.MetaRuleset;
-import javax.faces.view.facelets.Metadata;
-import javax.faces.view.facelets.MetadataTarget;
-import javax.faces.view.facelets.TagAttribute;
-
-import org.richfaces.MethodMetadata;
-import org.richfaces.component.AbstractAutoComplete;
-
-/**
- * @author Nick Belaevski
- * 
- */
-// TODO nick - this should be generated by CDK
-public class AutoCompleteHandler extends ComponentHandler {
-
-    private static final MetaRule AUTOCOMPLETE_METHOD_META_RULE = new MetaRule() {
-
-        @Override
-        public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget meta) {
-            if (meta.isTargetInstanceOf(AbstractAutoComplete.class)) {
-                if ("autocompleteMethod".equals(name)) {
-                    return new MethodMetadata(attribute, FacesContext.class, UIComponent.class, String.class) {
-                        public void applyMetadata(FaceletContext ctx, Object instance) {
-                            ((AbstractAutoComplete) instance).setAutocompleteMethod(getMethodExpression(ctx));
-                        }
-                    };
-                }
-                /*
-                 * if ("converter".equals(name)) { return new ConverterMetadata(attribute) { public void
-                 * applyMetadata(FaceletContext ctx, Object instance) { ((AbstractComboBox)
-                 * instance).setConverter((Converter) this.getAttr() .getObject(ctx, Converter.class)); } }; }
-                 */
-                /*
-                 * if ("itemConverter".equals(name)) { return new ConverterMetadata(attribute) { public void
-                 * applyMetadata(FaceletContext ctx, Object instance) { ((AbstractComboBox)
-                 * instance).setItemConverter((Converter) this.getAttr() .getObject(ctx, Converter.class)); } }; }
-                 */
-            }
-
-            return null;
-        }
-    };
-
-    public AutoCompleteHandler(ComponentConfig config) {
-        super(config);
-    }
-
-    @Override
-    protected MetaRuleset createMetaRuleset(Class type) {
-        MetaRuleset metaRuleset = super.createMetaRuleset(type);
-        metaRuleset.addRule(AUTOCOMPLETE_METHOD_META_RULE);
-        return metaRuleset;
-    }
-
-    abstract static class ConverterMetadata extends Metadata {
-
-        private final TagAttribute attr;
-
-        public ConverterMetadata(TagAttribute attr) {
-            this.attr = attr;
-        }
-
-        public TagAttribute getAttr() {
-            return attr;
-        }
-
-    }
-}

Copied: trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutocompleteHandler.java (from rev 18736, branches/RF-9096/src/main/java/org/richfaces/view/facelets/AutocompleteHandler.java)
===================================================================
--- trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutocompleteHandler.java	                        (rev 0)
+++ trunk/ui/input/ui/src/main/java/org/richfaces/view/facelets/AutocompleteHandler.java	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,97 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.view.facelets;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.MetaRule;
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.Metadata;
+import javax.faces.view.facelets.MetadataTarget;
+import javax.faces.view.facelets.TagAttribute;
+
+import org.richfaces.MethodMetadata;
+import org.richfaces.component.AbstractAutocomplete;
+
+/**
+ * @author Nick Belaevski
+ * 
+ */
+// TODO nick - this should be generated by CDK
+public class AutocompleteHandler extends ComponentHandler {
+
+    private static final MetaRule AUTOCOMPLETE_METHOD_META_RULE = new MetaRule() {
+
+        @Override
+        public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget meta) {
+            if (meta.isTargetInstanceOf(AbstractAutocomplete.class)) {
+                if ("autocompleteMethod".equals(name)) {
+                    return new MethodMetadata(attribute, FacesContext.class, UIComponent.class, String.class) {
+                        public void applyMetadata(FaceletContext ctx, Object instance) {
+                            ((AbstractAutocomplete) instance).setAutocompleteMethod(getMethodExpression(ctx));
+                        }
+                    };
+                }
+                /*
+                 * if ("converter".equals(name)) { return new ConverterMetadata(attribute) { public void
+                 * applyMetadata(FaceletContext ctx, Object instance) { ((AbstractComboBox)
+                 * instance).setConverter((Converter) this.getAttr() .getObject(ctx, Converter.class)); } }; }
+                 */
+                /*
+                 * if ("itemConverter".equals(name)) { return new ConverterMetadata(attribute) { public void
+                 * applyMetadata(FaceletContext ctx, Object instance) { ((AbstractComboBox)
+                 * instance).setItemConverter((Converter) this.getAttr() .getObject(ctx, Converter.class)); } }; }
+                 */
+            }
+
+            return null;
+        }
+    };
+
+    public AutocompleteHandler(ComponentConfig config) {
+        super(config);
+    }
+
+    @Override
+    protected MetaRuleset createMetaRuleset(Class type) {
+        MetaRuleset metaRuleset = super.createMetaRuleset(type);
+        metaRuleset.addRule(AUTOCOMPLETE_METHOD_META_RULE);
+        return metaRuleset;
+    }
+
+    abstract static class ConverterMetadata extends Metadata {
+
+        private final TagAttribute attr;
+
+        public ConverterMetadata(TagAttribute attr) {
+            this.attr = attr;
+        }
+
+        public TagAttribute getAttr() {
+            return attr;
+        }
+
+    }
+}

Deleted: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.ecss
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.ecss	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.ecss	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,152 +0,0 @@
-.rf-au-f-w{
-	width: 200px;
-}
-
-.rf-au-l-w{
-	width: 200px;
-}
-
-.rf-au-l-h{
-	max-height: 100px;
-	min-height: 20px;
-}
-
-.rf-au-i.rf-au-ft, .rf-au-o.rf-au-ft{
-	color: '#{richSkin.generalTextColor}';
-	font-size: '#{richSkin.generalSizeFont}';
-	font-family: '#{richSkin.generalFamilyFont}';
-}
-
-input.rf-au-i {
-	border-width: 0px;
-	background: none;
-	width: 100%;
-}
-
-.rf-au-f{
-	position: inline-block;
-	border-width: 1px;
-	border-style: solid;
-	border-color: '#{richSkin.panelBorderColor}';
-	display: inline-block;
-	background-image: "url(#{resource['org.richfaces.renderkit.html.images.AutoCompleteFieldGradient']})";
-	background-repeat: repeat-x;
-	background-position: top left;
-	background-color: '#{richSkin.controlBackgroundColor}';
-}
-
-.rf-au-b{
-	background-image: "url(#{resource['org.richfaces.renderkit.html.images.AutoCompleteButtonGradient']})";
-	background-repeat: repeat-x;
-	background-position: top left;
-	background-color: '#{richSkin.headerBackgroundColor}';
-	text-align: center;
-	border-left-style: solid;
-	border-left-width: 1px;
-	border-left-color: '#{richSkin.panelBorderColor}';
-	width: 15px;
-	position: absolute;
-	top: 0px;
-	right: 0px;
-	height: 200px;
-	padding-top: 1px
-}
-
-.rf-au-b-a{
-	background-position: center;
-	background-repeat: no-repeat;
-	background-image: "url(#{resource['org.richfaces:combo_down_button.gif']})";
-	cursor: pointer;
-	width: 15px;
-	height: 15px;
-}
-
-.rf-au-l-c{
-	position: absolute;
-	/* TODO nick - review: font-size: 0px; */
-	display: none;
-}
-
-.rf-au-l-d{
-	border-width: 1px;
-	border-style: solid;
-	border-color: '#{richSkin.panelBorderColor}';
-	padding: 0px;
-	background-color: '#{richSkin.tableBackgroundColor}';
-}
-
-.rf-au-l-s{
-	overflow: auto;
-	overflow-x: hidden;
-}
-
-.rf-au-o{
-	padding: 2px;
-	white-space: nowrap;
-	cursor: default;
-	list-style-type: none;
-}
-
-.rf-au-s{
-	padding: 1px;
-	width: 100%;
-	background-color: '#{richSkin.headerBackgroundColor}';
-	border-width: 1px;
-	border-style: dotted;
-	border-color: '#{richSkin.generalTextColor}';
-}
-
-.rf-au-shw{
-	border: 0px solid red;
-	display: inline-block;
-	position: absolute;
-	float: left;
-	padding: 6px 6px 6px 6px;
-	top: -6px;
-	left: -7px;
-}
-
-.rf-au-shw-t{
-	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
-	background-position: top left;
-	position: absolute;
-	width: 6px;
-	top: 0px;
-	bottom: 6px;
-	left: 0px
-}
-
-.rf-au-shw-l{
-	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
-	background-position: bottom left;
-	position: absolute;
-	height: 6px;
-	bottom: 0px;
-	left: 0px;
-	right: 6px;
-}
-
-.rf-au-shw-r{
-	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
-	background-position: bottom right;
-	position: absolute;
-	width: 6px;
-	top: 6px;
-	bottom: 0px;
-	right: 0px;
-}
-
-.rf-au-shw-b{
-	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
-	background-position: right top;
-	position: absolute;
-	height: 6px;
-	top: 0px;
-	left: 6px;
-	right: 0px;
-}
-
-.rf-au-l-ul{
-	margin: 0px;
-	padding: 0px;
-}
\ No newline at end of file

Deleted: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.js
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.js	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoComplete.js	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,408 +0,0 @@
-(function ($, rf) {
-	rf.utils = rf.utils || {};
-
-	rf.utils.Cache = function (key, items, values) {
-		this.key = key;
-		this.cache = {}
-		this.cache[this.key] = items || [];
-		this.values = typeof values != "function" ? values || this.cache[this.key] : values(items);
-	};
-
-	var getItems = function (key) {
-		var newCache = [];
-		
-		if (key.length < this.key.length) {
-			return newCache;
-		}
-
-		if (this.cache[key]) {
-			newCache = this.cache[key];
-		} else {
-			var itemsCache = this.cache[this.key];
-			for (var i = 0; i<this.values.length; i++) {
-				var value = this.values[i].toLowerCase();
-				var p = value.indexOf(key.toLowerCase());
-				if (p == 0) {
-					newCache.push(itemsCache[i]);
-				}
-			}
-
-			if ((!this.lastKey || key.indexOf(this.lastKey)!=0) && newCache.length > 0) {
-				this.cache[key] = newCache;
-				if (newCache.length==1) {
-					this.lastKey = key;
-				}
-			}
-		}
-
-		return newCache;
-	};
-	
-	var getItemValue = function (item) {
-		return this.values[this.cache[this.key].index(item)];
-	};
-	
-	var isCached = function (key) {
-		return this.cache[key];
-	};
-
-	$.extend(rf.utils.Cache.prototype, (function () {
-		return  {
-			getItems: getItems,
-			getItemValue: getItemValue,
-			isCached: isCached
-		};
-	})());
-
-})(jQuery, RichFaces);
-
-(function ($, rf) {
-
-	/*
-	 * TODO: add user's event handlers call from options
-	 * TODO: add fire events
-	 */
-	
-	rf.ui = rf.ui || {};
-	// Constructor definition
-	rf.ui.AutoComplete = function(componentId, fieldId, options) {
-		this.namespace = "."+rf.Event.createNamespace(this.name, this.id);
-		this.options = {};
-		// call constructor of parent class
-		$super.constructor.call(this, componentId, componentId+ID.SELECT, fieldId, options);
-		this.attachToDom(componentId);
-		this.options = $.extend(this.options, defaultOptions, options);
-		this.value = this.__getSubValue();
-		this.index = -1;
-		this.isFirstAjax = true;
-		updateTokenOptions.call(this);
-		bindEventHandlers.call(this);
-		updateItemsList.call(this, "");
-	};
-
-	// Extend component class and add protected methods from parent class to our container
-	rf.ui.AutoCompleteBase.extend(rf.ui.AutoComplete);
-
-	// define super class link
-	var $super = rf.ui.AutoComplete.$super;
-
-	var defaultOptions = {
-		selectedItemClass:'rf-au-s',
-		autoFill:true,
-		minChars:1,
-		selectFirst:true,
-		ajaxMode:true,
-		tokens: ",",
-		attachToBody:true
-	};
-
-	var ID = {
-		SELECT:'List',
-		ITEMS:'Items',
-		VALUE:'Value'
-	};
-	
-	var REGEXP_TRIM = /^[\n\s]*(.*)[\n\s]*$/;
-	var REGEXP_TOKEN_LEFT;
-	var REGEXP_TOKEN_RIGHT;
-	
-	var getData = function (nodeList) {
-		var data = [];
-		nodeList.each(function () {;
-			data.push($(this).text().replace(REGEXP_TRIM, "$1"));
-		});
-		return data;
-	}
-	
-	var updateTokenOptions = function () {
-		this.useTokens = (typeof this.options.tokens == "string" && this.options.tokens.length>0);
-		if (this.useTokens) {
-			var escapedTokens = this.options.tokens.split('').join("\\");
-			REGEXP_TOKEN_LEFT = new RegExp('[^'+escapedTokens+']+$','i');
-			REGEXP_TOKEN_RIGHT = new RegExp('['+escapedTokens+']','i');
-			this.hasSpaceToken = this.options.tokens.indexOf(' ')!=-1;
-		};
-	};
-
-	var bindEventHandlers = function () {
-		rf.Event.bind(rf.getDomElement(this.id+ID.ITEMS).parentNode, "click"+this.namespace+" mouseover"+this.namespace, onMouseAction, this);
-	};
-
-	var onMouseAction = function(event) {
-		var element = $(event.target).closest(".rf-ac-i", event.currentTarget).get(0);
-
-		if (element) {
-			if (event.type=="mouseover") {
-				var index = this.items.index(element);
-				if (index!=this.index) {
-					selectItem.call(this, index);
-				}
-			} else {
-				this.__onChangeValue(event, getSelectedItemValue.call(this));
-				rf.Selection.setCaretTo(rf.getDomElement(this.fieldId));
-				this.hide(event);
-			}
-		}
-	};
-
-	var updateItemsList = function (value, fetchValues) {
-		this.items = $(rf.getDomElement(this.id+ID.ITEMS)).find(".rf-ac-i");
-		if (this.items.length>0) {
-			this.cache = new rf.utils.Cache(value, this.items, fetchValues || getData);
-		}
-	};
-
-	var scrollToSelectedItem = function() {
-        var offset = 0;
-        this.items.slice(0, this.index).each(function() {
-			offset += this.offsetHeight;
-		});
-        var parentContainer = $(rf.getDomElement(this.id+ID.ITEMS)).parent();
-        if(offset < parentContainer.scrollTop()) {
-        	parentContainer.scrollTop(offset);
-        } else {
-        	offset+=this.items.get(this.index).offsetHeight;
-        	if(offset - parentContainer.scrollTop() > parentContainer.get(0).clientHeight) {
-        		parentContainer.scrollTop(offset - parentContainer.innerHeight());
-            }
-        }
-	};
-
-	var autoFill = function (inputValue, value) {
-		if( this.options.autoFill) {
-			var field = rf.getDomElement(this.fieldId);
-			var start = rf.Selection.getStart(field);
-			this.setInputValue(inputValue + value.substring(inputValue.length));
-			var end = start+value.length - inputValue.length;
-			rf.Selection.set(field, start, end);
-		}
-	};
-
-	var callAjax = function(event, value) {
-		
-		$(rf.getDomElement(this.id+ID.ITEMS)).removeData().empty();
-		rf.getDomElement(this.id+ID.VALUE).value = value;
-		
-		var _this = this;
-		var ajaxSuccess = function (event) {
-			updateItemsList.call(_this, _this.value, event.componentData && event.componentData[_this.id]);
-			if (_this.isVisible && _this.options.selectFirst) {
-				selectItem.call(_this, 0);
-			}
-		}
-		
-		var ajaxError = function (event) {
-			//alert("error");
-		}
-		
-		this.isFirstAjax = false;
-		//caution: JSF submits inputs with empty names causing "WARNING: Parameters: Invalid chunk ignored." in Tomcat log
-		var params = {};
-		params[this.id + ".ajax"] = "1";
-		rf.ajax(this.id, event, {parameters: params, error: ajaxError, complete:ajaxSuccess});
-	};
-	
-	var selectItem = function(index, isOffset, noAutoFill) {
-		if (this.items.length==0) return;
-	
-		if (this.index!=-1) {
-				this.items.eq(this.index).removeClass(this.options.selectedItemClass);
-		}
-
-		if (index==undefined) {
-			this.index = -1;
-			return;
-		}
-
-		if (isOffset) {
-			this.index += index;
-		if ( this.index<0 ) {
-			this.index = this.items.length - 1;
-		} else if (this.index >= this.items.length) {
-			this.index = 0;
-		}
-		} else {
-			if (index<0) {
-				index = 0;
-			} else if (index>=this.items.length) {
-				index = this.items.length - 1;
-			}
-			this.index = index;
-		}
-		var item = this.items.eq(this.index);
-		item.addClass(this.options.selectedItemClass);
-		scrollToSelectedItem.call(this);
-		!noAutoFill && autoFill.call(this, this.value, getSelectedItemValue.call(this));
-	};
-	
-	var onChangeValue = function (event, value) {
-		//if(this.options.onchange){
-				//this.options.onchange.call(this, event);
-		//}
-		selectItem.call(this);
-		
-		// value is undefined if called from AutoCompleteBase onChange
-		var subValue = (typeof value == "undefined") ? this.__getSubValue() : value;
-		
-		// TODO: ajax call here if needed
-		if ((!this.cache || subValue.length==0 || subValue.toLowerCase().indexOf(this.cache.key.toLowerCase())!=0) && 
-				subValue.length>=this.options.minChars) {
-			this.value = subValue;
-			this.options.ajaxMode && callAjax.call(this, event, subValue);
-			return;
-		}
-		if(!this.cache){
-			return;
-		}
-		var newItems = this.cache.getItems(subValue);
-		this.items = $(newItems);
-		//TODO: works only with simple markup, not with <tr>
-		$(rf.getDomElement(this.id+ID.ITEMS)).empty().append(newItems);
-		this.index = -1;
-		this.value = subValue;
-		if (subValue.length<this.options.minChars){
-			this.hide();
-		}
-		if (this.options.selectFirst) {
-			if (event.which == rf.KEYS.RETURN || event.type == "click") {
-				this.setInputValue(subValue);
-				return;
-			} else {
-				selectItem.call(this, 0, false, event.which == rf.KEYS.BACKSPACE || event.which == rf.KEYS.LEFT || event.which == rf.KEYS.RIGHT);
-				return;
-			}
-		}
-		this.setInputValue(subValue);
-	};
-	
-	var getSelectedItemValue = function () {
-		if ( this.index>=0) {
-			var element = this.items.eq(this.index);
-			return this.cache.getItemValue(element);
-		}
-		return undefined;
-	};
-	
-	var getSubValue = function () {
-		//TODO: add posibility to use space chars before and after tokens if space not a token char
-		if (this.useTokens) {
-			var field = rf.getDomElement(this.fieldId);
-			var value = field.value;
-			var cursorPosition = rf.Selection.getStart(field);
-			var beforeCursorStr = value.substring(0, cursorPosition);
-			var afterCursorStr = value.substring(cursorPosition);
-			var r = REGEXP_TOKEN_LEFT.exec(beforeCursorStr);
-			var result = "";
-			if (r) {
-				result = r[0];
-			}
-			r = afterCursorStr.search(REGEXP_TOKEN_RIGHT);
-			if (r==-1) r = afterCursorStr.length;
-			result += afterCursorStr.substring(0, r);
-
-			return result;
-		} else {
-			return this.getInputValue();
-		}
-	};
-	
-	var updateInputValue = function (value) {
-		var field = rf.getDomElement(this.fieldId);
-		var inputValue = field.value;
-		
-		var cursorPosition = rf.Selection.getStart(field);
-		var beforeCursorStr = inputValue.substring(0, cursorPosition);
-		var afterCursorStr = inputValue.substring(cursorPosition);
-		
-		var pos = beforeCursorStr.search(REGEXP_TOKEN_LEFT);
-		var startPos = pos!=-1 ? pos : beforeCursorStr.length;
-		pos = afterCursorStr.search(REGEXP_TOKEN_RIGHT);
-		var endPos = pos!=-1 ? pos : afterCursorStr.length;
-		
-		var beginNewValue = inputValue.substring(0, startPos) + value;
-		cursorPosition = beginNewValue.length;
-		field.value = beginNewValue + afterCursorStr.substring(endPos);
-		field.focus();
-		rf.Selection.setCaretTo(field, cursorPosition);
-		return field.value;
-	};
-	
-	/*
-	 * Prototype definition
-	 */
-	$.extend(rf.ui.AutoComplete.prototype, (function () {
-		return {
-			/*
-			 * public API functions
-			 */
- 			name:"AutoComplete",
- 			/*
- 			 * Protected methods
- 			 */
- 			__updateState: function (event) {
-				var subValue = this.__getSubValue();
-				// called from onShow method, not actually value changed
-				if (this.items.length==0 && this.isFirstAjax) {
-					this.options.ajaxMode && callAjax.call(this, event, subValue);
-				}
-				return;
-			},
- 			__getSubValue: getSubValue,
- 			__updateInputValue: function (value) {
-				if (this.useTokens) {
-					return updateInputValue.call(this, value);
-				} else {
-					return $super.__updateInputValue.call(this, value);
-				}
- 			},
- 			__onChangeValue: onChangeValue,
- 			/*
- 			 * Override abstract protected methods
- 			 */
- 			__onKeyUp: function () {
- 				selectItem.call(this, -1, true);
- 			},
- 			__onKeyDown: function () {
- 				selectItem.call(this, 1, true);
- 			},
- 			__onPageUp: function () {
-
- 			},
- 			__onPageDown: function () {
-
- 			},
- 			__onBeforeShow: function (event) {
- 			},
- 			__onEnter: function (event) {
- 				this.__onChangeValue(event, getSelectedItemValue.call(this));
-				//rf.getDomElement(this.fieldId).blur();
-				//rf.Selection.setCaretTo(rf.getDomElement(this.fieldId));
-				//rf.getDomElement(this.fieldId).focus();
- 			},
- 			__onShow: function (event) {
- 				if (event.which != rf.KEYS.BACKSPACE) {
- 					if(this.items && this.items.length>0){
- 						if (this.index!=0 && this.options.selectFirst) {
- 							selectItem.call(this, 0);
- 						}
- 					}
- 				}
- 			},
- 			__onHide: function () {
- 				selectItem.call(this);
- 			},
- 			/*
- 			 * Destructor
- 			 */
- 			destroy: function () {
-				//TODO: add all unbind
-				this.items = null;
-				this.cache = null;
-				var itemsContainer = rf.getDomElement(this.id+ID.ITEMS);
-				$(itemsContainer).removeData();
-				rf.Event.unbind(itemsContainer.parentNode, this.namespace);
-				$super.destroy.call(this);
- 			}
-		};
-	})());
-})(jQuery, RichFaces);
\ No newline at end of file

Deleted: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoCompleteBase.js
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoCompleteBase.js	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutoCompleteBase.js	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,297 +0,0 @@
-// TODO: move this extend to RichFaces.Event for exapmle
-$.extend(RichFaces.Event, {
-	bindScrollEventHandlers: function(element, handler, component) {
-		var elements = [];
-		element = RichFaces.getDomElement(element).parentNode;
-		while (element && element!=window.document.body)
-		{
-			if (element.offsetWidth!=element.scrollWidth || element.offsetHeight!=element.scrollHeight)
-			{
-				elements.push(element);
-				RichFaces.Event.bind(element, "scroll"+component.getNamespace(), handler, component);
-			}
-			element = element.parentNode;
-		}
-		return elements;
-	},
-	unbindScrollEventHandlers: function(elements, component) {
-		RichFaces.Event.unbind(elements, component.getNamespace());
-	}
-});
-
-(function (rf) {
-	rf.KEYS = {
-		BACKSPACE: 8,	
-		TAB: 9,
-		RETURN: 13,
-		ESC: 27,
-		PAGEUP: 33,
-		PAGEDOWN: 34,
-		LEFT: 37,
-		UP: 38,
-		RIGHT: 39,
-		DOWN: 40,
-		DEL: 46,
-	}
-})(RichFaces);
-
-(function ($, rf) {
-
-	rf.ui = rf.ui || {}; 
-	
-	// Constructor definition
-	rf.ui.AutoCompleteBase = function(componentId, selectId, fieldId, options) {
-		// call constructor of parent class
-		$super.constructor.call(this, componentId);
-		this.selectId = selectId;
-		this.fieldId = fieldId;
-		this.options = $.extend({}, defaultOptions, options);
-		this.namespace = this.namespace || "."+rf.Event.createNamespace(this.name, this.selectId);
-		this.currentValue = this.getInputValue();
-		bindEventHandlers.call(this);
-	};
-	
-	// Extend component class and add protected methods from parent class to our container
-	rf.BaseComponent.extend(rf.ui.AutoCompleteBase);
-	
-	// define super class link
-	var $super = rf.ui.AutoCompleteBase.$super;
-	
-	var defaultOptions = {
-			changeDelay:8
-	};
-	
-	var bindEventHandlers = function() {
-		
-		var inputEventHandlers = {};
-		
-		if (this.options.buttonId && !this.options.disabled) {
-			inputEventHandlers["mousedown"+this.namespace] = onButtonShow;
-			inputEventHandlers["mouseup"+this.namespace] = onSelectMouseUp;
-			rf.Event.bindById(this.options.buttonId, inputEventHandlers, this);
-		}
-		
-		inputEventHandlers = {};
-		inputEventHandlers["focus"+this.namespace] = onFocus;
-		inputEventHandlers["blur"+this.namespace] = onBlur;
-		inputEventHandlers["click"+this.namespace] = onClick;
-		inputEventHandlers[($.browser.opera ? "keypress" : "keydown")+this.namespace] = onKeyDown;
-		rf.Event.bindById(this.fieldId, inputEventHandlers, this);
-		
-		inputEventHandlers = {};
-		inputEventHandlers["mousedown"+this.namespace] = onSelectMouseDown;
-		inputEventHandlers["mouseup"+this.namespace] = onSelectMouseUp;
-		rf.Event.bindById(this.selectId, inputEventHandlers, this);
-	};
-	
-	var onSelectMouseDown = function () {
-		this.isMouseDown = true;
-	};
-	var onSelectMouseUp = function () {
-		rf.getDomElement(this.fieldId).focus();
-	};
-	
-	var onButtonShow = function (event) {
-		this.isMouseDown = true;
-		if (this.timeoutId) {
-			window.clearTimeout(this.timeoutId);
-			this.timeoutId = null;
-			rf.getDomElement(this.fieldId).focus();
-		}
-		
-		if (this.isVisible) {
-			this.hide(event);
-		} else {
-			onShow.call(this, event);
-		}
-	};
-	
-	var onFocus = function (event) {
-	};
-	
-	var onBlur = function (event) {
-		if (this.isMouseDown) {
-			rf.getDomElement(this.fieldId).focus();
-			this.isMouseDown = false;
-		} else if (this.isVisible && !this.isMouseDown) {
-			var _this = this;
-			this.timeoutId = window.setTimeout(function(){_this.hide();}, 200);
-		}
-	};
-	
-	var onClick = function (event) {
-	};
-	
-	var onChange = function (event) {
-		var value = this.getInputValue();
-		var flag = value != this.currentValue;
-		//TODO: is it needed to chesk keys?
-		//TODO: we need to set value when autoFill used when LEFT or RIGHT was pressed
-		if (event.which == rf.KEYS.LEFT || event.which == rf.KEYS.RIGHT || flag) {
-			if (flag || this.isVisible) {
-				this.__onChangeValue(event);
-			}
-			if (flag) {
-				this.currentValue = this.getInputValue();
-				if(value && value.length>=this.options.minChars){
-					onShow.call(this, event);
-				}
-				
-			}
-		}
-	};
-	
-	var onShow = function (event) {
-		this.__updateState(event);
-		this.show(event);
-	};
-	
-	var onKeyDown = function (event) {
-		switch(event.which) {
-			case rf.KEYS.UP:
-				event.preventDefault();
-				if (this.isVisible) {
-					this.__onKeyUp(event);
-				}
-				break;
-			case rf.KEYS.DOWN:
-				event.preventDefault();
-				if (this.isVisible) {
-					this.__onKeyDown(event);
-				} else {
-					onShow.call(this, event);
-				}
-				break;
-			case rf.KEYS.PAGEUP:
-				event.preventDefault();
-				if (this.isVisible) {
-					this.__onPageUp(event);
-				}
-				break;
-			case rf.KEYS.PAGEDOWN:
-				event.preventDefault();
-				if (this.isVisible) {
-					this.__onPageDown(event);
-				}
-				break;
-			case rf.KEYS.RETURN:
-
-				event.preventDefault();
-				this.__onEnter(event);
-				//TODO: bind form submit event handler to cancel form submit under the opera
-				//cancelSubmit = true;
-				this.hide();
-				return false;
-				break;
-			case rf.KEYS.ESC:
-				this.hide();
-				break;
-			default:
-				if (!this.options.selectOnly) {
-					var _this = this;
-					window.clearTimeout(this.changeTimerId);
-					this.changeTimerId = window.setTimeout(function(){onChange.call(_this, event);}, this.options.changeDelay)
-				}
-				break;
-		}
-	}
-	
-	/*
-	 * public API functions definition
-	 */
-	var show = function (event, showButtonPressed) {
-		if (!this.isVisible) {
-			if (this.__onBeforeShow(event)!=false) {
-				this.scrollElements = rf.Event.bindScrollEventHandlers(this.selectId, this.hide, this, this.namespace);
-				if (this.options.attachToBody) {
-					var element = rf.getDomElement(this.selectId);
-					this.parentElement = element.parentNode;
-					$(element).detach().appendTo("body");
-				}
-				$(rf.getDomElement(this.selectId)).setPosition({id: this.fieldId}, {type:"DROPDOWN", offset:[0,20]}).show();
-				this.isVisible = true;
-				this.__onShow(event, showButtonPressed);
-			}
-		}
-	};
-	var hide = function (event) {
-		if (this.isVisible) {
-			rf.Event.unbindScrollEventHandlers(this.scrollElements, this);
-			this.scrollElements = null;
-				$(rf.getDomElement(this.selectId)).hide();
-				this.isVisible = false;
-				if (this.options.attachToBody && this.parentElement) {
-				$(rf.getDomElement(this.selectId)).detach().appendTo(this.parentElement);
-				this.parentElement = null;
-			}
-		    this.__onHide(event);
-		}
-	};
-	
-	/*
-	 * Prototype definition
-	 */
-	$.extend(rf.ui.AutoCompleteBase.prototype, (function () {
-		return {
-			/*
-			 * public API functions
-			 */
- 			name:"AutoCompleteBase",
- 			show: show,
- 			hide: hide,
- 			getNamespace: function () {
- 				return this.namespace;
- 			},
- 			getInputValue: function () {
- 				return this.fieldId ? rf.getDomElement(this.fieldId).value : "";
- 			},
- 			setInputValue: function (value) {
- 				this.currentValue = this.__updateInputValue(value); 
- 			},
- 			/*
- 			 * Protected methods
- 			 */
- 			__updateInputValue: function (value) {
- 				if (this.fieldId) {
- 					 rf.getDomElement(this.fieldId).value = value;
- 					 return value;
- 				} else {
- 					return "";
- 				}
- 			},
- 			/*
- 			 * abstract protected methods
- 			 */
- 			__onChangeValue: function (event) {
- 			},			
- 			__onKeyUp: function () {
- 			},
- 			__onKeyDown: function () {
- 			},
- 			__onPageUp: function () {
- 			},
- 			__onPageDown: function () {
- 			},
- 			__onBeforeShow: function () {
- 			},
- 			__onShow: function () {
- 			},
- 			__onHide: function () {
- 			},
- 			/*
- 			 * Destructor
- 			 */
- 			destroy: function () {
- 				this.parentNode = null;
- 				if (this.scrollElements) {
- 					rf.Event.unbindScrollEventHandlers(this.scrollElements, this);
- 					this.scrollElements = null;
- 				}
- 				this.options.buttonId && rf.Event.unbindById(this.options.buttonId, this.namespace);
- 				rf.Event.unbindById(this.fieldId, this.namespace);
- 				rf.Event.unbindById(this.selectId, this.namespace);
- 				$super.destroy.call(this);
- 			}
-		};
-	})());
-})(jQuery, RichFaces);
\ No newline at end of file

Copied: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.ecss (from rev 18736, branches/RF-9096/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.ecss)
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.ecss	                        (rev 0)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.ecss	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,152 @@
+.rf-au-f-w{
+	width: 200px;
+}
+
+.rf-au-l-w{
+	width: 200px;
+}
+
+.rf-au-l-h{
+	max-height: 100px;
+	min-height: 20px;
+}
+
+.rf-au-i.rf-au-ft, .rf-au-o.rf-au-ft{
+	color: '#{richSkin.generalTextColor}';
+	font-size: '#{richSkin.generalSizeFont}';
+	font-family: '#{richSkin.generalFamilyFont}';
+}
+
+input.rf-au-i {
+	border-width: 0px;
+	background: none;
+	width: 100%;
+}
+
+.rf-au-f{
+	position: inline-block;
+	border-width: 1px;
+	border-style: solid;
+	border-color: '#{richSkin.panelBorderColor}';
+	display: inline-block;
+	background-image: "url(#{resource['org.richfaces.renderkit.html.images.AutocompleteFieldGradient']})";
+	background-repeat: repeat-x;
+	background-position: top left;
+	background-color: '#{richSkin.controlBackgroundColor}';
+}
+
+.rf-au-b{
+	background-image: "url(#{resource['org.richfaces.renderkit.html.images.AutocompleteButtonGradient']})";
+	background-repeat: repeat-x;
+	background-position: top left;
+	background-color: '#{richSkin.headerBackgroundColor}';
+	text-align: center;
+	border-left-style: solid;
+	border-left-width: 1px;
+	border-left-color: '#{richSkin.panelBorderColor}';
+	width: 15px;
+	position: absolute;
+	top: 0px;
+	right: 0px;
+	height: 200px;
+	padding-top: 1px
+}
+
+.rf-au-b-a{
+	background-position: center;
+	background-repeat: no-repeat;
+	background-image: "url(#{resource['org.richfaces:combo_down_button.gif']})";
+	cursor: pointer;
+	width: 15px;
+	height: 15px;
+}
+
+.rf-au-l-c{
+	position: absolute;
+	/* TODO nick - review: font-size: 0px; */
+	display: none;
+}
+
+.rf-au-l-d{
+	border-width: 1px;
+	border-style: solid;
+	border-color: '#{richSkin.panelBorderColor}';
+	padding: 0px;
+	background-color: '#{richSkin.tableBackgroundColor}';
+}
+
+.rf-au-l-s{
+	overflow: auto;
+	overflow-x: hidden;
+}
+
+.rf-au-o{
+	padding: 2px;
+	white-space: nowrap;
+	cursor: default;
+	list-style-type: none;
+}
+
+.rf-au-s{
+	padding: 1px;
+	width: 100%;
+	background-color: '#{richSkin.headerBackgroundColor}';
+	border-width: 1px;
+	border-style: dotted;
+	border-color: '#{richSkin.generalTextColor}';
+}
+
+.rf-au-shw{
+	border: 0px solid red;
+	display: inline-block;
+	position: absolute;
+	float: left;
+	padding: 6px 6px 6px 6px;
+	top: -6px;
+	left: -7px;
+}
+
+.rf-au-shw-t{
+	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
+	background-position: top left;
+	position: absolute;
+	width: 6px;
+	top: 0px;
+	bottom: 6px;
+	left: 0px
+}
+
+.rf-au-shw-l{
+	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
+	background-position: bottom left;
+	position: absolute;
+	height: 6px;
+	bottom: 0px;
+	left: 0px;
+	right: 6px;
+}
+
+.rf-au-shw-r{
+	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
+	background-position: bottom right;
+	position: absolute;
+	width: 6px;
+	top: 6px;
+	bottom: 0px;
+	right: 0px;
+}
+
+.rf-au-shw-b{
+	background-image: "url(#{resource['org.richfaces:combo_list_shadow.png']})";
+	background-position: right top;
+	position: absolute;
+	height: 6px;
+	top: 0px;
+	left: 6px;
+	right: 0px;
+}
+
+.rf-au-l-ul{
+	margin: 0px;
+	padding: 0px;
+}
\ No newline at end of file

Copied: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.js (from rev 18736, branches/RF-9096/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.js)
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.js	                        (rev 0)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/Autocomplete.js	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,408 @@
+(function ($, rf) {
+	rf.utils = rf.utils || {};
+
+	rf.utils.Cache = function (key, items, values) {
+		this.key = key;
+		this.cache = {}
+		this.cache[this.key] = items || [];
+		this.values = typeof values != "function" ? values || this.cache[this.key] : values(items);
+	};
+
+	var getItems = function (key) {
+		var newCache = [];
+		
+		if (key.length < this.key.length) {
+			return newCache;
+		}
+
+		if (this.cache[key]) {
+			newCache = this.cache[key];
+		} else {
+			var itemsCache = this.cache[this.key];
+			for (var i = 0; i<this.values.length; i++) {
+				var value = this.values[i].toLowerCase();
+				var p = value.indexOf(key.toLowerCase());
+				if (p == 0) {
+					newCache.push(itemsCache[i]);
+				}
+			}
+
+			if ((!this.lastKey || key.indexOf(this.lastKey)!=0) && newCache.length > 0) {
+				this.cache[key] = newCache;
+				if (newCache.length==1) {
+					this.lastKey = key;
+				}
+			}
+		}
+
+		return newCache;
+	};
+	
+	var getItemValue = function (item) {
+		return this.values[this.cache[this.key].index(item)];
+	};
+	
+	var isCached = function (key) {
+		return this.cache[key];
+	};
+
+	$.extend(rf.utils.Cache.prototype, (function () {
+		return  {
+			getItems: getItems,
+			getItemValue: getItemValue,
+			isCached: isCached
+		};
+	})());
+
+})(jQuery, RichFaces);
+
+(function ($, rf) {
+
+	/*
+	 * TODO: add user's event handlers call from options
+	 * TODO: add fire events
+	 */
+	
+	rf.ui = rf.ui || {};
+	// Constructor definition
+	rf.ui.Autocomplete = function(componentId, fieldId, options) {
+		this.namespace = "."+rf.Event.createNamespace(this.name, this.id);
+		this.options = {};
+		// call constructor of parent class
+		$super.constructor.call(this, componentId, componentId+ID.SELECT, fieldId, options);
+		this.attachToDom(componentId);
+		this.options = $.extend(this.options, defaultOptions, options);
+		this.value = this.__getSubValue();
+		this.index = -1;
+		this.isFirstAjax = true;
+		updateTokenOptions.call(this);
+		bindEventHandlers.call(this);
+		updateItemsList.call(this, "");
+	};
+
+	// Extend component class and add protected methods from parent class to our container
+	rf.ui.AutocompleteBase.extend(rf.ui.Autocomplete);
+
+	// define super class link
+	var $super = rf.ui.Autocomplete.$super;
+
+	var defaultOptions = {
+		selectedItemClass:'rf-au-s',
+		autoFill:true,
+		minChars:1,
+		selectFirst:true,
+		ajaxMode:true,
+		tokens: ",",
+		attachToBody:true
+	};
+
+	var ID = {
+		SELECT:'List',
+		ITEMS:'Items',
+		VALUE:'Value'
+	};
+	
+	var REGEXP_TRIM = /^[\n\s]*(.*)[\n\s]*$/;
+	var REGEXP_TOKEN_LEFT;
+	var REGEXP_TOKEN_RIGHT;
+	
+	var getData = function (nodeList) {
+		var data = [];
+		nodeList.each(function () {;
+			data.push($(this).text().replace(REGEXP_TRIM, "$1"));
+		});
+		return data;
+	}
+	
+	var updateTokenOptions = function () {
+		this.useTokens = (typeof this.options.tokens == "string" && this.options.tokens.length>0);
+		if (this.useTokens) {
+			var escapedTokens = this.options.tokens.split('').join("\\");
+			REGEXP_TOKEN_LEFT = new RegExp('[^'+escapedTokens+']+$','i');
+			REGEXP_TOKEN_RIGHT = new RegExp('['+escapedTokens+']','i');
+			this.hasSpaceToken = this.options.tokens.indexOf(' ')!=-1;
+		};
+	};
+
+	var bindEventHandlers = function () {
+		rf.Event.bind(rf.getDomElement(this.id+ID.ITEMS).parentNode, "click"+this.namespace+" mouseover"+this.namespace, onMouseAction, this);
+	};
+
+	var onMouseAction = function(event) {
+		var element = $(event.target).closest(".rf-ac-i", event.currentTarget).get(0);
+
+		if (element) {
+			if (event.type=="mouseover") {
+				var index = this.items.index(element);
+				if (index!=this.index) {
+					selectItem.call(this, index);
+				}
+			} else {
+				this.__onChangeValue(event, getSelectedItemValue.call(this));
+				rf.Selection.setCaretTo(rf.getDomElement(this.fieldId));
+				this.hide(event);
+			}
+		}
+	};
+
+	var updateItemsList = function (value, fetchValues) {
+		this.items = $(rf.getDomElement(this.id+ID.ITEMS)).find(".rf-ac-i");
+		if (this.items.length>0) {
+			this.cache = new rf.utils.Cache(value, this.items, fetchValues || getData);
+		}
+	};
+
+	var scrollToSelectedItem = function() {
+        var offset = 0;
+        this.items.slice(0, this.index).each(function() {
+			offset += this.offsetHeight;
+		});
+        var parentContainer = $(rf.getDomElement(this.id+ID.ITEMS)).parent();
+        if(offset < parentContainer.scrollTop()) {
+        	parentContainer.scrollTop(offset);
+        } else {
+        	offset+=this.items.get(this.index).offsetHeight;
+        	if(offset - parentContainer.scrollTop() > parentContainer.get(0).clientHeight) {
+        		parentContainer.scrollTop(offset - parentContainer.innerHeight());
+            }
+        }
+	};
+
+	var autoFill = function (inputValue, value) {
+		if( this.options.autoFill) {
+			var field = rf.getDomElement(this.fieldId);
+			var start = rf.Selection.getStart(field);
+			this.setInputValue(inputValue + value.substring(inputValue.length));
+			var end = start+value.length - inputValue.length;
+			rf.Selection.set(field, start, end);
+		}
+	};
+
+	var callAjax = function(event, value) {
+		
+		$(rf.getDomElement(this.id+ID.ITEMS)).removeData().empty();
+		rf.getDomElement(this.id+ID.VALUE).value = value;
+		
+		var _this = this;
+		var ajaxSuccess = function (event) {
+			updateItemsList.call(_this, _this.value, event.componentData && event.componentData[_this.id]);
+			if (_this.isVisible && _this.options.selectFirst) {
+				selectItem.call(_this, 0);
+			}
+		}
+		
+		var ajaxError = function (event) {
+			//alert("error");
+		}
+		
+		this.isFirstAjax = false;
+		//caution: JSF submits inputs with empty names causing "WARNING: Parameters: Invalid chunk ignored." in Tomcat log
+		var params = {};
+		params[this.id + ".ajax"] = "1";
+		rf.ajax(this.id, event, {parameters: params, error: ajaxError, complete:ajaxSuccess});
+	};
+	
+	var selectItem = function(index, isOffset, noAutoFill) {
+		if (this.items.length==0) return;
+	
+		if (this.index!=-1) {
+				this.items.eq(this.index).removeClass(this.options.selectedItemClass);
+		}
+
+		if (index==undefined) {
+			this.index = -1;
+			return;
+		}
+
+		if (isOffset) {
+			this.index += index;
+		if ( this.index<0 ) {
+			this.index = this.items.length - 1;
+		} else if (this.index >= this.items.length) {
+			this.index = 0;
+		}
+		} else {
+			if (index<0) {
+				index = 0;
+			} else if (index>=this.items.length) {
+				index = this.items.length - 1;
+			}
+			this.index = index;
+		}
+		var item = this.items.eq(this.index);
+		item.addClass(this.options.selectedItemClass);
+		scrollToSelectedItem.call(this);
+		!noAutoFill && autoFill.call(this, this.value, getSelectedItemValue.call(this));
+	};
+	
+	var onChangeValue = function (event, value) {
+		//if(this.options.onchange){
+				//this.options.onchange.call(this, event);
+		//}
+		selectItem.call(this);
+		
+		// value is undefined if called from AutocompleteBase onChange
+		var subValue = (typeof value == "undefined") ? this.__getSubValue() : value;
+		
+		// TODO: ajax call here if needed
+		if ((!this.cache || subValue.length==0 || subValue.toLowerCase().indexOf(this.cache.key.toLowerCase())!=0) && 
+				subValue.length>=this.options.minChars) {
+			this.value = subValue;
+			this.options.ajaxMode && callAjax.call(this, event, subValue);
+			return;
+		}
+		if(!this.cache){
+			return;
+		}
+		var newItems = this.cache.getItems(subValue);
+		this.items = $(newItems);
+		//TODO: works only with simple markup, not with <tr>
+		$(rf.getDomElement(this.id+ID.ITEMS)).empty().append(newItems);
+		this.index = -1;
+		this.value = subValue;
+		if (subValue.length<this.options.minChars){
+			this.hide();
+		}
+		if (this.options.selectFirst) {
+			if (event.which == rf.KEYS.RETURN || event.type == "click") {
+				this.setInputValue(subValue);
+				return;
+			} else {
+				selectItem.call(this, 0, false, event.which == rf.KEYS.BACKSPACE || event.which == rf.KEYS.LEFT || event.which == rf.KEYS.RIGHT);
+				return;
+			}
+		}
+		this.setInputValue(subValue);
+	};
+	
+	var getSelectedItemValue = function () {
+		if ( this.index>=0) {
+			var element = this.items.eq(this.index);
+			return this.cache.getItemValue(element);
+		}
+		return undefined;
+	};
+	
+	var getSubValue = function () {
+		//TODO: add posibility to use space chars before and after tokens if space not a token char
+		if (this.useTokens) {
+			var field = rf.getDomElement(this.fieldId);
+			var value = field.value;
+			var cursorPosition = rf.Selection.getStart(field);
+			var beforeCursorStr = value.substring(0, cursorPosition);
+			var afterCursorStr = value.substring(cursorPosition);
+			var r = REGEXP_TOKEN_LEFT.exec(beforeCursorStr);
+			var result = "";
+			if (r) {
+				result = r[0];
+			}
+			r = afterCursorStr.search(REGEXP_TOKEN_RIGHT);
+			if (r==-1) r = afterCursorStr.length;
+			result += afterCursorStr.substring(0, r);
+
+			return result;
+		} else {
+			return this.getInputValue();
+		}
+	};
+	
+	var updateInputValue = function (value) {
+		var field = rf.getDomElement(this.fieldId);
+		var inputValue = field.value;
+		
+		var cursorPosition = rf.Selection.getStart(field);
+		var beforeCursorStr = inputValue.substring(0, cursorPosition);
+		var afterCursorStr = inputValue.substring(cursorPosition);
+		
+		var pos = beforeCursorStr.search(REGEXP_TOKEN_LEFT);
+		var startPos = pos!=-1 ? pos : beforeCursorStr.length;
+		pos = afterCursorStr.search(REGEXP_TOKEN_RIGHT);
+		var endPos = pos!=-1 ? pos : afterCursorStr.length;
+		
+		var beginNewValue = inputValue.substring(0, startPos) + value;
+		cursorPosition = beginNewValue.length;
+		field.value = beginNewValue + afterCursorStr.substring(endPos);
+		field.focus();
+		rf.Selection.setCaretTo(field, cursorPosition);
+		return field.value;
+	};
+	
+	/*
+	 * Prototype definition
+	 */
+	$.extend(rf.ui.Autocomplete.prototype, (function () {
+		return {
+			/*
+			 * public API functions
+			 */
+ 			name:"Autocomplete",
+ 			/*
+ 			 * Protected methods
+ 			 */
+ 			__updateState: function (event) {
+				var subValue = this.__getSubValue();
+				// called from onShow method, not actually value changed
+				if (this.items.length==0 && this.isFirstAjax) {
+					this.options.ajaxMode && callAjax.call(this, event, subValue);
+				}
+				return;
+			},
+ 			__getSubValue: getSubValue,
+ 			__updateInputValue: function (value) {
+				if (this.useTokens) {
+					return updateInputValue.call(this, value);
+				} else {
+					return $super.__updateInputValue.call(this, value);
+				}
+ 			},
+ 			__onChangeValue: onChangeValue,
+ 			/*
+ 			 * Override abstract protected methods
+ 			 */
+ 			__onKeyUp: function () {
+ 				selectItem.call(this, -1, true);
+ 			},
+ 			__onKeyDown: function () {
+ 				selectItem.call(this, 1, true);
+ 			},
+ 			__onPageUp: function () {
+
+ 			},
+ 			__onPageDown: function () {
+
+ 			},
+ 			__onBeforeShow: function (event) {
+ 			},
+ 			__onEnter: function (event) {
+ 				this.__onChangeValue(event, getSelectedItemValue.call(this));
+				//rf.getDomElement(this.fieldId).blur();
+				//rf.Selection.setCaretTo(rf.getDomElement(this.fieldId));
+				//rf.getDomElement(this.fieldId).focus();
+ 			},
+ 			__onShow: function (event) {
+ 				if (event.which != rf.KEYS.BACKSPACE) {
+ 					if(this.items && this.items.length>0){
+ 						if (this.index!=0 && this.options.selectFirst) {
+ 							selectItem.call(this, 0);
+ 						}
+ 					}
+ 				}
+ 			},
+ 			__onHide: function () {
+ 				selectItem.call(this);
+ 			},
+ 			/*
+ 			 * Destructor
+ 			 */
+ 			destroy: function () {
+				//TODO: add all unbind
+				this.items = null;
+				this.cache = null;
+				var itemsContainer = rf.getDomElement(this.id+ID.ITEMS);
+				$(itemsContainer).removeData();
+				rf.Event.unbind(itemsContainer.parentNode, this.namespace);
+				$super.destroy.call(this);
+ 			}
+		};
+	})());
+})(jQuery, RichFaces);
\ No newline at end of file

Copied: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutocompleteBase.js (from rev 18736, branches/RF-9096/src/main/resources/META-INF/resources/org.richfaces/AutocompleteBase.js)
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutocompleteBase.js	                        (rev 0)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/AutocompleteBase.js	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,297 @@
+// TODO: move this extend to RichFaces.Event for exapmle
+$.extend(RichFaces.Event, {
+	bindScrollEventHandlers: function(element, handler, component) {
+		var elements = [];
+		element = RichFaces.getDomElement(element).parentNode;
+		while (element && element!=window.document.body)
+		{
+			if (element.offsetWidth!=element.scrollWidth || element.offsetHeight!=element.scrollHeight)
+			{
+				elements.push(element);
+				RichFaces.Event.bind(element, "scroll"+component.getNamespace(), handler, component);
+			}
+			element = element.parentNode;
+		}
+		return elements;
+	},
+	unbindScrollEventHandlers: function(elements, component) {
+		RichFaces.Event.unbind(elements, component.getNamespace());
+	}
+});
+
+(function (rf) {
+	rf.KEYS = {
+		BACKSPACE: 8,	
+		TAB: 9,
+		RETURN: 13,
+		ESC: 27,
+		PAGEUP: 33,
+		PAGEDOWN: 34,
+		LEFT: 37,
+		UP: 38,
+		RIGHT: 39,
+		DOWN: 40,
+		DEL: 46,
+	}
+})(RichFaces);
+
+(function ($, rf) {
+
+	rf.ui = rf.ui || {}; 
+	
+	// Constructor definition
+	rf.ui.AutocompleteBase = function(componentId, selectId, fieldId, options) {
+		// call constructor of parent class
+		$super.constructor.call(this, componentId);
+		this.selectId = selectId;
+		this.fieldId = fieldId;
+		this.options = $.extend({}, defaultOptions, options);
+		this.namespace = this.namespace || "."+rf.Event.createNamespace(this.name, this.selectId);
+		this.currentValue = this.getInputValue();
+		bindEventHandlers.call(this);
+	};
+	
+	// Extend component class and add protected methods from parent class to our container
+	rf.BaseComponent.extend(rf.ui.AutocompleteBase);
+	
+	// define super class link
+	var $super = rf.ui.AutocompleteBase.$super;
+	
+	var defaultOptions = {
+			changeDelay:8
+	};
+	
+	var bindEventHandlers = function() {
+		
+		var inputEventHandlers = {};
+		
+		if (this.options.buttonId && !this.options.disabled) {
+			inputEventHandlers["mousedown"+this.namespace] = onButtonShow;
+			inputEventHandlers["mouseup"+this.namespace] = onSelectMouseUp;
+			rf.Event.bindById(this.options.buttonId, inputEventHandlers, this);
+		}
+		
+		inputEventHandlers = {};
+		inputEventHandlers["focus"+this.namespace] = onFocus;
+		inputEventHandlers["blur"+this.namespace] = onBlur;
+		inputEventHandlers["click"+this.namespace] = onClick;
+		inputEventHandlers[($.browser.opera ? "keypress" : "keydown")+this.namespace] = onKeyDown;
+		rf.Event.bindById(this.fieldId, inputEventHandlers, this);
+		
+		inputEventHandlers = {};
+		inputEventHandlers["mousedown"+this.namespace] = onSelectMouseDown;
+		inputEventHandlers["mouseup"+this.namespace] = onSelectMouseUp;
+		rf.Event.bindById(this.selectId, inputEventHandlers, this);
+	};
+	
+	var onSelectMouseDown = function () {
+		this.isMouseDown = true;
+	};
+	var onSelectMouseUp = function () {
+		rf.getDomElement(this.fieldId).focus();
+	};
+	
+	var onButtonShow = function (event) {
+		this.isMouseDown = true;
+		if (this.timeoutId) {
+			window.clearTimeout(this.timeoutId);
+			this.timeoutId = null;
+			rf.getDomElement(this.fieldId).focus();
+		}
+		
+		if (this.isVisible) {
+			this.hide(event);
+		} else {
+			onShow.call(this, event);
+		}
+	};
+	
+	var onFocus = function (event) {
+	};
+	
+	var onBlur = function (event) {
+		if (this.isMouseDown) {
+			rf.getDomElement(this.fieldId).focus();
+			this.isMouseDown = false;
+		} else if (this.isVisible && !this.isMouseDown) {
+			var _this = this;
+			this.timeoutId = window.setTimeout(function(){_this.hide();}, 200);
+		}
+	};
+	
+	var onClick = function (event) {
+	};
+	
+	var onChange = function (event) {
+		var value = this.getInputValue();
+		var flag = value != this.currentValue;
+		//TODO: is it needed to chesk keys?
+		//TODO: we need to set value when autoFill used when LEFT or RIGHT was pressed
+		if (event.which == rf.KEYS.LEFT || event.which == rf.KEYS.RIGHT || flag) {
+			if (flag || this.isVisible) {
+				this.__onChangeValue(event);
+			}
+			if (flag) {
+				this.currentValue = this.getInputValue();
+				if(value && value.length>=this.options.minChars){
+					onShow.call(this, event);
+				}
+				
+			}
+		}
+	};
+	
+	var onShow = function (event) {
+		this.__updateState(event);
+		this.show(event);
+	};
+	
+	var onKeyDown = function (event) {
+		switch(event.which) {
+			case rf.KEYS.UP:
+				event.preventDefault();
+				if (this.isVisible) {
+					this.__onKeyUp(event);
+				}
+				break;
+			case rf.KEYS.DOWN:
+				event.preventDefault();
+				if (this.isVisible) {
+					this.__onKeyDown(event);
+				} else {
+					onShow.call(this, event);
+				}
+				break;
+			case rf.KEYS.PAGEUP:
+				event.preventDefault();
+				if (this.isVisible) {
+					this.__onPageUp(event);
+				}
+				break;
+			case rf.KEYS.PAGEDOWN:
+				event.preventDefault();
+				if (this.isVisible) {
+					this.__onPageDown(event);
+				}
+				break;
+			case rf.KEYS.RETURN:
+
+				event.preventDefault();
+				this.__onEnter(event);
+				//TODO: bind form submit event handler to cancel form submit under the opera
+				//cancelSubmit = true;
+				this.hide();
+				return false;
+				break;
+			case rf.KEYS.ESC:
+				this.hide();
+				break;
+			default:
+				if (!this.options.selectOnly) {
+					var _this = this;
+					window.clearTimeout(this.changeTimerId);
+					this.changeTimerId = window.setTimeout(function(){onChange.call(_this, event);}, this.options.changeDelay)
+				}
+				break;
+		}
+	}
+	
+	/*
+	 * public API functions definition
+	 */
+	var show = function (event, showButtonPressed) {
+		if (!this.isVisible) {
+			if (this.__onBeforeShow(event)!=false) {
+				this.scrollElements = rf.Event.bindScrollEventHandlers(this.selectId, this.hide, this, this.namespace);
+				if (this.options.attachToBody) {
+					var element = rf.getDomElement(this.selectId);
+					this.parentElement = element.parentNode;
+					$(element).detach().appendTo("body");
+				}
+				$(rf.getDomElement(this.selectId)).setPosition({id: this.fieldId}, {type:"DROPDOWN", offset:[0,20]}).show();
+				this.isVisible = true;
+				this.__onShow(event, showButtonPressed);
+			}
+		}
+	};
+	var hide = function (event) {
+		if (this.isVisible) {
+			rf.Event.unbindScrollEventHandlers(this.scrollElements, this);
+			this.scrollElements = null;
+				$(rf.getDomElement(this.selectId)).hide();
+				this.isVisible = false;
+				if (this.options.attachToBody && this.parentElement) {
+				$(rf.getDomElement(this.selectId)).detach().appendTo(this.parentElement);
+				this.parentElement = null;
+			}
+		    this.__onHide(event);
+		}
+	};
+	
+	/*
+	 * Prototype definition
+	 */
+	$.extend(rf.ui.AutocompleteBase.prototype, (function () {
+		return {
+			/*
+			 * public API functions
+			 */
+ 			name:"AutocompleteBase",
+ 			show: show,
+ 			hide: hide,
+ 			getNamespace: function () {
+ 				return this.namespace;
+ 			},
+ 			getInputValue: function () {
+ 				return this.fieldId ? rf.getDomElement(this.fieldId).value : "";
+ 			},
+ 			setInputValue: function (value) {
+ 				this.currentValue = this.__updateInputValue(value); 
+ 			},
+ 			/*
+ 			 * Protected methods
+ 			 */
+ 			__updateInputValue: function (value) {
+ 				if (this.fieldId) {
+ 					 rf.getDomElement(this.fieldId).value = value;
+ 					 return value;
+ 				} else {
+ 					return "";
+ 				}
+ 			},
+ 			/*
+ 			 * abstract protected methods
+ 			 */
+ 			__onChangeValue: function (event) {
+ 			},			
+ 			__onKeyUp: function () {
+ 			},
+ 			__onKeyDown: function () {
+ 			},
+ 			__onPageUp: function () {
+ 			},
+ 			__onPageDown: function () {
+ 			},
+ 			__onBeforeShow: function () {
+ 			},
+ 			__onShow: function () {
+ 			},
+ 			__onHide: function () {
+ 			},
+ 			/*
+ 			 * Destructor
+ 			 */
+ 			destroy: function () {
+ 				this.parentNode = null;
+ 				if (this.scrollElements) {
+ 					rf.Event.unbindScrollEventHandlers(this.scrollElements, this);
+ 					this.scrollElements = null;
+ 				}
+ 				this.options.buttonId && rf.Event.unbindById(this.options.buttonId, this.namespace);
+ 				rf.Event.unbindById(this.fieldId, this.namespace);
+ 				rf.Event.unbindById(this.selectId, this.namespace);
+ 				$super.destroy.call(this);
+ 			}
+		};
+	})());
+})(jQuery, RichFaces);
\ No newline at end of file

Deleted: trunk/ui/input/ui/src/main/templates/autoComplete.template.xml
===================================================================
--- trunk/ui/input/ui/src/main/templates/autoComplete.template.xml	2010-08-17 19:15:21 UTC (rev 18736)
+++ trunk/ui/input/ui/src/main/templates/autoComplete.template.xml	2010-08-17 19:30:38 UTC (rev 18737)
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<cdk:root xmlns="http://richfaces.org/cdk/xhtml-el" xmlns:cdk="http://richfaces.org/cdk/core"
-    xmlns:c="http://richfaces.org/cdk/jstl/core" xmlns:cc="http://richfaces.org/cdk/jsf/composite"
-    xmlns:javaee="http://java.sun.com/xml/ns/javaee">
-
-    <cc:interface>
-        <cdk:class>org.richfaces.renderkit.html.AutoCompleteRenderer</cdk:class>
-        <cdk:superclass>org.richfaces.renderkit.AutoCompleteRendererBase</cdk:superclass>
-        <cdk:component-family>javax.faces.Input</cdk:component-family>
-        <cdk:renderer-type>org.richfaces.AutoCompleteRenderer
-        </cdk:renderer-type>
-        <cdk:renders-children>true</cdk:renders-children>
-    </cc:interface>
-
-    <cc:implementation>
-    <cdk:object type="java.lang.Object" name="disabled" value="#{component.attributes['disabled']}" />
-        <div id="#{clientId}" class="rf-au-f-w rf-au-f">
-        	<input id="#{clientId}Value" name="#{clientId}Value" type="hidden" class="rf-au-ft rf-au-i" />
-            <div style="position : relative; overflow : hidden; text-align : left; padding-right : 21px;">
-            	<input onclick="#{component.attributes['onclick']}"
-				ondblclick="#{component.attributes['ondblclick']}"
-				onmouseup="#{component.attributes['onmouseup']}"
-				onmousedown="#{component.attributes['onmousedown']}"
-				onmousemove="#{component.attributes['onmousemove']}"
-				onblur="#{component.attributes['onblur']}"
-				onfocus="#{component.attributes['onfocus']}"
-				onmouseover="#{component.attributes['onmouseover']}"
-				onmouseout="#{component.attributes['onmouseout']}"
-				onkeyup="#{component.attributes['onkeyup']}"
-				onkeydown="#{component.attributes['onkeydown']}"
-				onkeypress="#{component.attributes['onkeypress']}" id="#{clientId}Input" disabled="#{disabled}" name="#{clientId}" type="text" class="rf-au-ft rf-au-i" />
-                <c:if test="#{component.attributes['showButton']}">
-                <c:if test="#{component.attributes['disabled']}">
-                <div id="#{clientId}Button" class="rf-au-b">
-                    <div class="rf-au-b-a"></div>
-                </div>
-                </c:if>
-                <c:if test="#{!component.attributes['disabled']}">
-                <div id="#{clientId}Button" class="rf-au-b">
-                    <div class="rf-au-b-a"></div>
-                </div>
-                </c:if>
-                </c:if>
-            </div>
-
-            <div onclick="#{component.attributes['onlistclick']}" 
-				ondblclick="#{component.attributes['onlistdblclick']}"
-				onmouseup="#{component.attributes['onlistmouseup']}"
-				onmousedown="#{component.attributes['onlistmousedown']}"
-				onmousemove="#{component.attributes['onlistmousemove']}"
-				onmouseover="#{component.attributes['onlistmouseover']}"
-				onmouseout="#{component.attributes['onlistmouseout']}"
-				onblur="#{component.attributes['onlistblur']}"
-				onfocus="#{component.attributes['onlistfocus']}"
-				onkeyup="#{component.attributes['onlistkeyup']}"
-				onkeydown="#{component.attributes['onlistkeydown']}"
-				onkeypress="#{component.attributes['onlistkeypress']}"
-				 id="#{clientId}List" class="rf-au-l-c">
-
-                <div class="rf-au-shw">
-                    <div class="rf-au-shw-t"></div>
-                    <div class="rf-au-shw-l"></div>
-                    <div class="rf-au-shw-r"></div>
-                    <div class="rf-au-shw-b"></div>
-
-                    <div class="rf-au-l-d">
-                        <div class="rf-au-l-s rf-au-l-w rf-au-l-h">
-                            <cdk:body>
-                                <cdk:call expression="encodeItemsContainer(facesContext, component)"/>
-                            </cdk:body>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <script type="text/javascript">
-                new RichFaces.ui.AutoComplete("#{clientId}",
-                "#{clientId}Input", #{getScriptOptions(component)}
-                 );
-            </script>
-        </div>
-    </cc:implementation>
-
-</cdk:root>

Copied: trunk/ui/input/ui/src/main/templates/autocomplete.template.xml (from rev 18736, branches/RF-9096/src/main/templates/autocomplete.template.xml)
===================================================================
--- trunk/ui/input/ui/src/main/templates/autocomplete.template.xml	                        (rev 0)
+++ trunk/ui/input/ui/src/main/templates/autocomplete.template.xml	2010-08-17 19:30:38 UTC (rev 18737)
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<cdk:root xmlns="http://richfaces.org/cdk/xhtml-el" xmlns:cdk="http://richfaces.org/cdk/core"
+    xmlns:c="http://richfaces.org/cdk/jstl/core" xmlns:cc="http://richfaces.org/cdk/jsf/composite"
+    xmlns:javaee="http://java.sun.com/xml/ns/javaee">
+
+    <cc:interface>
+        <cdk:class>org.richfaces.renderkit.html.AutocompleteRenderer</cdk:class>
+        <cdk:superclass>org.richfaces.renderkit.AutocompleteRendererBase</cdk:superclass>
+        <cdk:component-family>javax.faces.Input</cdk:component-family>
+        <cdk:renderer-type>org.richfaces.AutocompleteRenderer
+        </cdk:renderer-type>
+        <cdk:renders-children>true</cdk:renders-children>
+    </cc:interface>
+
+    <cc:implementation>
+    <cdk:object type="java.lang.Object" name="disabled" value="#{component.attributes['disabled']}" />
+        <div id="#{clientId}" class="rf-au-f-w rf-au-f">
+        	<input id="#{clientId}Value" name="#{clientId}Value" type="hidden" class="rf-au-ft rf-au-i" />
+            <div style="position : relative; overflow : hidden; text-align : left; padding-right : 21px;">
+            	<input onclick="#{component.attributes['onclick']}"
+				ondblclick="#{component.attributes['ondblclick']}"
+				onmouseup="#{component.attributes['onmouseup']}"
+				onmousedown="#{component.attributes['onmousedown']}"
+				onmousemove="#{component.attributes['onmousemove']}"
+				onblur="#{component.attributes['onblur']}"
+				onfocus="#{component.attributes['onfocus']}"
+				onmouseover="#{component.attributes['onmouseover']}"
+				onmouseout="#{component.attributes['onmouseout']}"
+				onkeyup="#{component.attributes['onkeyup']}"
+				onkeydown="#{component.attributes['onkeydown']}"
+				onkeypress="#{component.attributes['onkeypress']}" id="#{clientId}Input" disabled="#{disabled}" name="#{clientId}" type="text" class="rf-au-ft rf-au-i" />
+                <c:if test="#{component.attributes['showButton']}">
+                <c:if test="#{component.attributes['disabled']}">
+                <div id="#{clientId}Button" class="rf-au-b">
+                    <div class="rf-au-b-a"></div>
+                </div>
+                </c:if>
+                <c:if test="#{!component.attributes['disabled']}">
+                <div id="#{clientId}Button" class="rf-au-b">
+                    <div class="rf-au-b-a"></div>
+                </div>
+                </c:if>
+                </c:if>
+            </div>
+
+            <div onclick="#{component.attributes['onlistclick']}" 
+				ondblclick="#{component.attributes['onlistdblclick']}"
+				onmouseup="#{component.attributes['onlistmouseup']}"
+				onmousedown="#{component.attributes['onlistmousedown']}"
+				onmousemove="#{component.attributes['onlistmousemove']}"
+				onmouseover="#{component.attributes['onlistmouseover']}"
+				onmouseout="#{component.attributes['onlistmouseout']}"
+				onblur="#{component.attributes['onlistblur']}"
+				onfocus="#{component.attributes['onlistfocus']}"
+				onkeyup="#{component.attributes['onlistkeyup']}"
+				onkeydown="#{component.attributes['onlistkeydown']}"
+				onkeypress="#{component.attributes['onlistkeypress']}"
+				 id="#{clientId}List" class="rf-au-l-c">
+
+                <div class="rf-au-shw">
+                    <div class="rf-au-shw-t"></div>
+                    <div class="rf-au-shw-l"></div>
+                    <div class="rf-au-shw-r"></div>
+                    <div class="rf-au-shw-b"></div>
+
+                    <div class="rf-au-l-d">
+                        <div class="rf-au-l-s rf-au-l-w rf-au-l-h">
+                            <cdk:body>
+                                <cdk:call expression="encodeItemsContainer(facesContext, component)"/>
+                            </cdk:body>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <script type="text/javascript">
+                new RichFaces.ui.Autocomplete("#{clientId}",
+                "#{clientId}Input", #{getScriptOptions(component)}
+                 );
+            </script>
+        </div>
+    </cc:implementation>
+
+</cdk:root>



More information about the richfaces-svn-commits mailing list