Bug 489096 - HTML5 support 
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
index bf10152..c4d03ee 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/VisualizeEngine.java
@@ -378,7 +378,6 @@
 					for(int j = 0; j < tmpNL2.getLength(); j++){
 						Element e2 = (Element) tmpNL2.item(j);
 						String id = e2.getAttribute("id");
-						System.out.println(listS+" : "+id);
 						if(id!=null && id.equals(listS)){
 							Node tmpN = mapData.getResultNode(e2);
 							if(tmpN!=null && tmpN instanceof Element){
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
index 96e1dbe..7145fdd 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/NodeInfoCreator.java
@@ -85,11 +85,15 @@
 			return true;
 		} else if (tagName.equals("input")) {
 			String type = el.getAttribute("type").toLowerCase();
-			if ((type.length() == 0) | type.equals("text") | type.equals("textarea") | type.equals("radio")
-					| type.equals("checkbox")) {
+			if (type.equals("submit") || type.equals("reset") || type.equals("hidden") || type.equals("image")) {
+				//TODO update by using techniques (only hidden state is not labelable in HTML5)
+				return false;
+			} else {
 				return true;
 			}
 		}
+		//TODO update by using techniques 
+		//keygen, meter, output, progress
 		return false;
 	}
 
@@ -227,10 +231,10 @@
 					} else if (nodeName.equals("label")) {
 						info.setLabel(true);
 						info.appendComment("Label for '" + ((Element) curNode).getAttribute("for") + "'. ");
-					} else if (nodeName.contains("caption")){
+					} else if (nodeName.contains("caption")) {
 						info.setCaption(true);
 						info.appendComment(curNode.getNodeName());
-					} else if (nodeName.equals("mark")){
+					} else if (nodeName.equals("mark")) {
 						info.appendComment("mark");
 					}
 
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
index dcc9928..d2e8b4d 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/internal/engines/blind/html/util/VisualizeColorUtil.java
@@ -143,16 +143,16 @@
 			String inputRGB = getRGBString(param.inputTagsColor, "#FF9900");
 			String captionRGB = getRGBString(param.captionColor, "#FFFF80");
 
-			if (param.bColorizeTags && (info.isHeading() | info.isTableHeader() | info.isLabel()
-					| info.isIdRequiredInput() | info.isCaption())) {
+			if (param.bColorizeTags && (info.isHeading() || info.isTableHeader() || info.isLabel()
+					|| info.isIdRequiredInput() || info.isCaption())) {
 				if (info.isHeading()) {
 					strRGB = headingRGB;
 				} else if (info.isTableHeader()) {
 					strRGB = thRGB;
-				} else if (info.isLabel()) {
-					strRGB = labelRGB;
 				} else if (info.isIdRequiredInput()) {
 					strRGB = inputRGB;
+				} else if (info.isLabel()) {
+					strRGB = labelRGB;
 				} else if (info.isCaption()) {
 					strRGB = captionRGB;
 				}
@@ -177,7 +177,7 @@
 				}
 
 				if (param.bVisualizeTime == true) {
-					if ("mark".equals(el.getTagName())||HtmlTagUtil.hasAncestor(el, "mark")) {
+					if ("mark".equals(el.getTagName()) || HtmlTagUtil.hasAncestor(el, "mark")) {
 						el.setAttribute("style", "color: black; background-image: none;");
 					} else {
 						el.setAttribute("style", "color: black; background-image: none; background-color: #"
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java
index 2ff4be5..cdad86e 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/DomUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@
 
 	/**
 	 * Method recursiveWalk.
+	 * 
 	 * @param node
 	 * @param num
 	 */
@@ -41,9 +42,7 @@
 		getNodeInfo(node, num);
 		tab++;
 		cnt = 0;
-		for (Node child = node.getFirstChild();
-			child != null;
-			child = child.getNextSibling(), cnt++) {
+		for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling(), cnt++) {
 			recursiveWalk(child, cnt);
 		}
 		tab--;
@@ -51,6 +50,7 @@
 
 	/**
 	 * Method getString.
+	 * 
 	 * @param node
 	 * @return String
 	 */
@@ -64,6 +64,7 @@
 
 	/**
 	 * Method getNodeInfo.
+	 * 
 	 * @param node
 	 * @param num
 	 */
@@ -82,12 +83,10 @@
 				str += ">";
 				System.out.println(str);
 			} else {
-				System.out.println(
-					"<" + nodeName + ":" + node.getNodeValue() + ">");
+				System.out.println("<" + nodeName + ":" + node.getNodeValue() + ">");
 			}
 		} else {
-			System.out.println(
-				"<" + nodeName + ":" + node.getNodeValue() + ">");
+			System.out.println("<" + nodeName + ":" + node.getNodeValue() + ">");
 		}
 	}
 
@@ -102,13 +101,13 @@
 
 	/**
 	 * Method isNameAttr.
+	 * 
 	 * @param node
 	 * @return boolean
 	 */
 	public static boolean isNameAttr(Node node) {
 		if (node != null) {
-			if (node.getNodeType() == Node.ELEMENT_NODE
-				&& node.getNodeName().toLowerCase().equals("a")) {
+			if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().toLowerCase().equals("a")) {
 				NamedNodeMap attrs = node.getAttributes();
 				Node altNode = attrs.getNamedItem("name");
 				if (altNode != null)
@@ -120,6 +119,7 @@
 
 	/**
 	 * Method dumpPC.
+	 * 
 	 * @param pc
 	 */
 	public static void dumpPC(PacketCollection pc) {
@@ -136,6 +136,7 @@
 
 	/**
 	 * Method setFormList.
+	 * 
 	 * @param node
 	 */
 	public static void setFormList(Node node) {
@@ -146,6 +147,7 @@
 
 	/**
 	 * Method getFormNum.
+	 * 
 	 * @param element
 	 * @return int
 	 */
@@ -160,4 +162,47 @@
 		}
 		return 0;
 	}
+
+	/**
+	 * Get ancestor node whose name is specified target name
+	 * 
+	 * @param target
+	 *            target {@link Node}
+	 * @param ancestorName
+	 *            target ancestor tag name
+	 * @return target ancestor {@link Node} or null
+	 */
+	public static Node getAncestor(Node target, String ancestorName) {
+		Node tmpNode = target;
+		while (tmpNode != null) {
+			if (tmpNode.getNodeName().equals(ancestorName)) {
+				return tmpNode;
+			}
+			tmpNode = tmpNode.getParentNode();
+		}
+		return null;
+	}
+	
+	
+	
+	public static boolean isDisabled(Element target){
+		if(target.hasAttribute("disabled")){
+			String disabled = target.getAttribute("disabled");
+			if (!"false".equals(disabled)) {
+				return true;
+			}			
+		}
+		Node tmpN = DomUtil.getAncestor(target, "fieldset");
+		if (null != tmpN && tmpN instanceof Element) {
+			Element fieldset = (Element) tmpN;
+			if (fieldset.hasAttribute("disabled")) {
+				String disabled = ((Element) fieldset).getAttribute("disabled");
+				if (!"false".equals(disabled)) {
+					return true;
+				}
+			}
+		}		
+		return false;
+	}
+
 }
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java
index a8176f4..5a4cf19 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/JWATCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -240,6 +240,7 @@
 		elementMap.put("form", new StaticFORMRenderer());
 		elementMap.put("select", new StaticSELECTRenderer());
 		elementMap.put("input", new StaticINPUTRenderer());
+		elementMap.put("button", new StaticBUTTONRenderer());
 		elementMap.put("br", new StaticBRRenderer());
 		elementMap.put("table", new StaticTABLERenderer());
 		elementMap.put("area", new StaticAREARenderer());
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticBUTTONRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticBUTTONRenderer.java
new file mode 100644
index 0000000..43b242d
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticBUTTONRenderer.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2016 IBM Corporation and Others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Masahide WASHIZAWA - initial API and implementation
+ *    Kentarou Fukuda - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.actf.visualization.internal.engines.voicebrowser;
+
+import org.eclipse.actf.visualization.engines.voicebrowser.IVoiceBrowserController;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+@SuppressWarnings("nls")
+public class StaticBUTTONRenderer implements IElementRenderer {
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element,
+	 *      Context)
+	 */
+	// @SuppressWarnings("nls")
+	public PacketCollection getPacketCollectionIn(Element element, Context curContext, String url,
+			MessageCollection mc) {
+		try {
+			setContextIn(element, curContext);
+			NamedNodeMap attrs = element.getAttributes();
+
+			String type = null, result = null;
+			Node typeNode = attrs.getNamedItem("type");
+			if (typeNode != null) {
+				type = typeNode.getNodeValue();
+				if (type.length() > 0) {
+					if (type.equals("submit")) {
+						result = inputTypeSubmit(element, attrs, mc, url);
+					} else if (type.equals("reset")) {
+						result = inputTypeReset(element, attrs, mc, url);
+					} else if (type.equals("button")) {
+						result = inputTypeButton(element, attrs, mc, url);
+					}
+					// other??
+				}
+			} else {
+				result = inputTypeButton(element, attrs, mc, url);
+			}
+			if (OutLoud.jwat_mode == IVoiceBrowserController.SCREEN_READER_MODE) {
+				curContext.setLineDelimiter(true);
+				curContext.setStartSelect(true);
+			}
+			if (result != null) {
+				result = result.trim();
+
+				if (DomUtil.isDisabled(element)) {
+					result = "(disabled)" + result;
+				}
+
+				return new PacketCollection(new Packet(element, result, curContext, true));
+			} else {
+				return null;
+			}
+		} catch (NullPointerException npe) {
+			return null;
+		}
+	}
+
+	/**
+	 * Method inputTypeSubmit.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeSubmit(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			result = OutLoud.buildResultString(mc, url, element, "submit", "hasstr", "name=str1", value);
+			if (result == null)
+				result = "[" + value + ": Submit button.]";
+		} else {
+			result = OutLoud.buildResultString(mc, url, element, "submit", "nostr");
+			if (result == null)
+				result = "[Submit button.]";
+		}
+		return result;
+	}
+
+	/**
+	 * Method inputTypeReset.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeReset(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			result = OutLoud.buildResultString(mc, url, element, "reset", "hasstr", "name=str1", value);
+			if (result == null)
+				result = "[" + value + ": Reset button.]";
+		} else {
+			result = OutLoud.buildResultString(mc, url, element, "reset", "nostr");
+			if (result == null)
+				result = "[Reset button.]";
+		}
+		return result;
+	}
+
+	/**
+	 * Method inputTypeButton.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeButton(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			result = OutLoud.buildResultString(mc, url, element, "button", "hasstr", "name=str1", value);
+			if (result == null)
+				result = "[" + value + ": Button.]";
+		} else {
+			result = OutLoud.buildResultString(mc, url, element, "button", "nostr");
+			if (result == null)
+				result = "[Button.]";
+		}
+		return result;
+	}
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element,
+	 *      Context)
+	 */
+	public PacketCollection getPacketCollectionOut(Element element, Context curContext, String url,
+			MessageCollection mc) {
+		setContextOut(element, curContext);
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#setContextIn(Context)
+	 */
+	public void setContextIn(Element element, Context curContext) {
+		curContext.setGoChild(true);
+		/*
+		 * try { NamedNodeMap attrs = element.getAttributes();
+		 * 
+		 * String type = null; Node typeNode = attrs.getNamedItem("type");
+		 * //$NON-NLS-1$ if (typeNode != null) { type = typeNode.getNodeValue();
+		 * if (type.length() > 0) { if (type.equals("submit") ||
+		 * type.equals("reset")) { //$NON-NLS-1$ //$NON-NLS-2$
+		 * curContext.setLineDelimiter(true); } else {
+		 * curContext.setLineDelimiter(false); } } else {
+		 * curContext.setLineDelimiter(false); } } else {
+		 * curContext.setLineDelimiter(false); } } catch (NullPointerException
+		 * npe) { npe.printStackTrace(); }
+		 */
+		curContext.setLineDelimiter(false);
+		curContext.setLinkTag(true);
+	}
+
+	/**
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#setContextOut(Context)
+	 */
+	public void setContextOut(Element element, Context curContext) {
+		curContext.setGoChild(true);
+		curContext.setLineDelimiter(true);
+		curContext.setLinkTag(false);
+	}
+}
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java
index 2aec773..cd25f46 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticINPUTRenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,9 +22,9 @@
 	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element,
 	 *      Context)
 	 */
-	//@SuppressWarnings("nls")
-	public PacketCollection getPacketCollectionIn(Element element,
-			Context curContext, String url, MessageCollection mc) {
+	// @SuppressWarnings("nls")
+	public PacketCollection getPacketCollectionIn(Element element, Context curContext, String url,
+			MessageCollection mc) {
 		try {
 			setContextIn(element, curContext);
 			NamedNodeMap attrs = element.getAttributes();
@@ -54,7 +54,17 @@
 						result = inputTypeFile(element, attrs, mc, url);
 					} else if (type.equals("hidden")) {
 						result = inputTypeHidden(element, attrs, mc, url);
+					} else if (type.equals("range")) {
+						result = inputTypeRange(element, attrs, mc, url);
+					} else if (type.equals("tel") || type.equals("search") || type.equals("url") || type.equals("email")
+							|| type.equals("number")) {
+						// temp for (supported) tel, search, url, email, number,
+						result = inputTypeOther(element, attrs, mc, url, type);
+					} else if (type.equals("date") || type.equals("time") || type.equals("color")) {
+						// temp for (not supported) date, time, color
+						result = inputTypeText(element, attrs, mc, url);
 					}
+					// other??
 				}
 			} else {
 				result = inputTypeText(element, attrs, mc, url);
@@ -65,8 +75,12 @@
 			}
 			if (result != null) {
 				result = result.trim();
-				return new PacketCollection(new Packet(element, result,
-						curContext, true));
+
+				if(DomUtil.isDisabled(element)){
+					result = "(disabled)"+result;
+				}
+
+				return new PacketCollection(new Packet(element, result, curContext, true));
 			} else {
 				return null;
 			}
@@ -83,16 +97,14 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeImage(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeImage(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("alt");
 		if (valueNode != null) {
 			value = valueNode.getNodeValue();
 			if (value != null && value.length() > 0) {
-				result = OutLoud.buildResultString(mc, url, element, "image",
-						"hasstr", "name=str1", value);
+				result = OutLoud.buildResultString(mc, url, element, "image", "hasstr", "name=str1", value);
 				if (result == null)
 					result = "[" + value + ": Image button.]";
 			}
@@ -116,13 +128,11 @@
 				}
 			}
 			if (value != null && value.length() > 0) {
-				result = OutLoud.buildResultString(mc, url, element, "image",
-						"hasstr", "name=str", value);
+				result = OutLoud.buildResultString(mc, url, element, "image", "hasstr", "name=str", value);
 				if (result == null)
 					result = "[" + value + ": Image button.]";
 			} else {
-				result = OutLoud.buildResultString(mc, url, element, "image",
-						"nostr");
+				result = OutLoud.buildResultString(mc, url, element, "image", "nostr");
 				if (result == null)
 					result = "[Image button.]";
 			}
@@ -138,16 +148,31 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeText(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
-		String result = OutLoud.buildResultString(mc, url, element, "text",
-				null);
+	private String inputTypeText(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = OutLoud.buildResultString(mc, url, element, "text", null);
 		if (result == null)
 			result = "[Text.]";
 		return result;
 	}
 
 	/**
+	 * Method inputTypeOther.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeOther(Element element, NamedNodeMap attrs, MessageCollection mc, String url, String type) {
+		// String result = OutLoud.buildResultString(mc, url, element, "text",
+		// null);
+		String result = null;
+		if (result == null)
+			result = "[" + type + ".]";
+		return result;
+	}
+
+	/**
 	 * Method inputTypeSubmit.
 	 * 
 	 * @param nodeName
@@ -155,21 +180,18 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeSubmit(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeSubmit(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("VALUE");
 		if (valueNode != null)
 			value = valueNode.getNodeValue();
 		if (value != null && value.length() > 0) {
-			result = OutLoud.buildResultString(mc, url, element, "submit",
-					"hasstr", "name=str1", value);
+			result = OutLoud.buildResultString(mc, url, element, "submit", "hasstr", "name=str1", value);
 			if (result == null)
 				result = "[" + value + ": Submit button.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "submit",
-					"nostr");
+			result = OutLoud.buildResultString(mc, url, element, "submit", "nostr");
 			if (result == null)
 				result = "[Submit button.]";
 		}
@@ -184,21 +206,18 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeReset(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeReset(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("VALUE");
 		if (valueNode != null)
 			value = valueNode.getNodeValue();
 		if (value != null && value.length() > 0) {
-			result = OutLoud.buildResultString(mc, url, element, "reset",
-					"hasstr", "name=str1", value);
+			result = OutLoud.buildResultString(mc, url, element, "reset", "hasstr", "name=str1", value);
 			if (result == null)
 				result = "[" + value + ": Reset button.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "reset",
-					"nostr");
+			result = OutLoud.buildResultString(mc, url, element, "reset", "nostr");
 			if (result == null)
 				result = "[Reset button.]";
 		}
@@ -213,21 +232,18 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeButton(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeButton(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		String value = null;
 		Node valueNode = attrs.getNamedItem("VALUE");
 		if (valueNode != null)
 			value = valueNode.getNodeValue();
 		if (value != null && value.length() > 0) {
-			result = OutLoud.buildResultString(mc, url, element, "button",
-					"hasstr", "name=str1", value);
+			result = OutLoud.buildResultString(mc, url, element, "button", "hasstr", "name=str1", value);
 			if (result == null)
 				result = "[" + value + ": Button.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "button",
-					"nostr");
+			result = OutLoud.buildResultString(mc, url, element, "button", "nostr");
 			if (result == null)
 				result = "[Button.]";
 		}
@@ -242,10 +258,8 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypePassword(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
-		String result = OutLoud.buildResultString(mc, url, element, "password",
-				null);
+	private String inputTypePassword(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = OutLoud.buildResultString(mc, url, element, "password", null);
 		if (result == null)
 			result = "[Password.]";
 		return result;
@@ -259,18 +273,15 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeCheckbox(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeCheckbox(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		Node cnode = attrs.getNamedItem("checked");
 		if (cnode == null) {
-			result = OutLoud.buildResultString(mc, url, element, "checkbox",
-					"off");
+			result = OutLoud.buildResultString(mc, url, element, "checkbox", "off");
 			if (result == null)
 				result = "[Not Checked.]";
 		} else {
-			result = OutLoud.buildResultString(mc, url, element, "checkbox",
-					"on");
+			result = OutLoud.buildResultString(mc, url, element, "checkbox", "on");
 			if (result == null)
 				result = "[Checked.]";
 		}
@@ -285,13 +296,11 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeRadio(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeRadio(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		String result = null;
 		Node cnode = attrs.getNamedItem("checked");
 		if (cnode == null) {
-			result = OutLoud
-					.buildResultString(mc, url, element, "radio", "off");
+			result = OutLoud.buildResultString(mc, url, element, "radio", "off");
 			if (result == null)
 				result = "[Not Pressed.]";
 		} else {
@@ -310,10 +319,8 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeFile(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
-		String result = OutLoud.buildResultString(mc, url, element, "file",
-				null);
+	private String inputTypeFile(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = OutLoud.buildResultString(mc, url, element, "file", null);
 		if (result == null)
 			result = "[Browse button.]";
 		return result;
@@ -327,17 +334,44 @@
 	 * @param mc
 	 * @return String
 	 */
-	private String inputTypeHidden(Element element, NamedNodeMap attrs,
-			MessageCollection mc, String url) {
+	private String inputTypeHidden(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
 		return null;
 	}
 
 	/**
+	 * Method inputTypeRange.
+	 * 
+	 * @param nodeName
+	 * @param attrs
+	 * @param mc
+	 * @return String
+	 */
+	private String inputTypeRange(Element element, NamedNodeMap attrs, MessageCollection mc, String url) {
+		String result = null;
+		String value = null;
+		Node valueNode = attrs.getNamedItem("VALUE");
+		if (valueNode != null)
+			value = valueNode.getNodeValue();
+		if (value != null && value.length() > 0) {
+			try {
+				double val = Double.parseDouble(value);
+				result = "[slider:" + val + "]";
+			} catch (Exception e) {
+
+			}
+		}
+		if (result == null) {
+			result = "[slider]";
+		}
+		return result;
+	}
+
+	/**
 	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element,
 	 *      Context)
 	 */
-	public PacketCollection getPacketCollectionOut(Element element,
-			Context curContext, String url, MessageCollection mc) {
+	public PacketCollection getPacketCollectionOut(Element element, Context curContext, String url,
+			MessageCollection mc) {
 		setContextOut(element, curContext);
 		return null;
 	}
@@ -355,7 +389,7 @@
 			if (typeNode != null) {
 				type = typeNode.getNodeValue();
 				if (type.length() > 0) {
-					if (type.equals("submit") || type.equals("reset")) { //$NON-NLS-1$  //$NON-NLS-2$
+					if (type.equals("submit") || type.equals("reset")) { //$NON-NLS-1$ //$NON-NLS-2$
 						curContext.setLineDelimiter(true);
 					} else {
 						curContext.setLineDelimiter(false);
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java
index 5aac736..2e281b5 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticOPTIONRenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,6 +79,11 @@
 		}
 		if (result != null)
 			result = result.trim();
+		
+		if(DomUtil.isDisabled(element)){
+			result = "(disabled)"+result;
+		}
+
 		return new PacketCollection(
 			new Packet(element, result, curContext, true));
 	}
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java
index 5b7d8e2..c4dd74d 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticSELECTRenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -80,6 +80,11 @@
 		}
 		if (result != null)
 			result = result.trim();
+		
+		if(DomUtil.isDisabled(element)){
+			result = "(disabled)"+result;
+		}
+
 		return new PacketCollection(
 			new Packet(element, result, curContext, true));
 	}
diff --git a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java
index 042b855..bd76668 100644
--- a/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java
+++ b/plugins/org.eclipse.actf.visualization.engines.voicebrowser/src/org/eclipse/actf/visualization/internal/engines/voicebrowser/StaticTEXTAREARenderer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and Others
+ * Copyright (c) 2003, 2016 IBM Corporation and Others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,20 +10,18 @@
  *******************************************************************************/
 package org.eclipse.actf.visualization.internal.engines.voicebrowser;
 
-import org.w3c.dom.*;
-
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 public class StaticTEXTAREARenderer implements IElementRenderer {
 
 	/**
-	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element, Context)
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionIn(Element,
+	 *      Context)
 	 */
 	@SuppressWarnings("nls")
-	public PacketCollection getPacketCollectionIn(
-		Element element,
-		Context curContext,
-		String url,
-		MessageCollection mc) {
+	public PacketCollection getPacketCollectionIn(Element element, Context curContext, String url,
+			MessageCollection mc) {
 
 		// set `context in' flags
 		setContextIn(element, curContext);
@@ -36,15 +34,7 @@
 			String nodeValue = node.getNodeValue();
 			nodeValue = nodeValue.trim();
 			if (nodeValue.length() > 0) {
-				result =
-					OutLoud.buildResultString(
-						mc,
-						url,
-						element,
-						null,
-						"hasstr",
-						"name=str1",
-						nodeValue);
+				result = OutLoud.buildResultString(mc, url, element, null, "hasstr", "name=str1", nodeValue);
 				if (result == null && OutLoud.hprDefltMsg)
 					result = "[TextArea: " + nodeValue + "]";
 			}
@@ -56,18 +46,20 @@
 		}
 		if (result != null)
 			result = result.trim();
-		return new PacketCollection(
-			new Packet(element, result, curContext, true));
+
+		if(DomUtil.isDisabled(element)){
+			result = "(disabled)"+result;
+		}
+
+		return new PacketCollection(new Packet(element, result, curContext, true));
 	}
 
 	/**
-	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element, Context)
+	 * @see org.eclipse.actf.visualization.internal.engines.voicebrowser.IElementRenderer#getPacketCollectionOut(Element,
+	 *      Context)
 	 */
-	public PacketCollection getPacketCollectionOut(
-		Element element,
-		Context curContext,
-		String url,
-		MessageCollection mc) {
+	public PacketCollection getPacketCollectionOut(Element element, Context curContext, String url,
+			MessageCollection mc) {
 		setContextOut(element, curContext);
 
 		return null;
@@ -87,8 +79,8 @@
 	 */
 	public void setContextOut(Element element, Context curContext) {
 		curContext.setGoChild(true);
-		//		curContext.setLineDelimiter(false);
-		//		curContext.setLinkTag(true);
+		// curContext.setLineDelimiter(false);
+		// curContext.setLinkTag(true);
 		curContext.setLineDelimiter(true);
 		curContext.setLinkTag(false);
 	}