Integrated string helper for VC (regex don't work yet)
diff --git a/dev/js/src/vc/stringval.js b/dev/js/src/vc/stringval.js
index e07b6a4..f9aa593 100644
--- a/dev/js/src/vc/stringval.js
+++ b/dev/js/src/vc/stringval.js
@@ -2,18 +2,24 @@
  * Add string values to the virtual collection
  */
 define({
+
+  /**
+   * Create new string value helper.
+   */
   create : function () {
     var regex = false;
     var value = '';
     if (arguments.length == 2) {
       regex = arguments[1];
     };
-    if (arguments.length > 1) {
+    if (arguments.length >= 1) {
       value = arguments[0];
     };
     return Object.create(this)._init(value, regex);
   },
   
+
+  // Initialize the string value
   _init : function (value, regex) {
     this.element();
     this.value(value);
@@ -21,6 +27,12 @@
     return this;
   },
 
+
+  /**
+   * Get or set the regex boolean value.
+   *
+   * @param bool Either true or false
+   */
   regex : function (bool) {
     if (arguments.length === 1) {
       if (bool) {
@@ -34,6 +46,11 @@
     return this._regex;
   },
 
+
+  /**
+   * Toggle the regex, make it either true,
+   * if it is false, or make it false, if it is true.
+   */
   toggleRegex : function () {
     if (this._regex === false)
       this.regex(true);
@@ -41,6 +58,9 @@
       this.regex(false);
   },
   
+  /**
+   * Get or set the string value.
+   */
   value : function (val) {
     if (arguments.length === 1) {
       this._value = val;
@@ -48,44 +68,93 @@
     };
     return this._value;
   },
-  
+
+
+  // Update dom element
   _update : function () {
-    this._input.firstChild.data = this._value;
+    this._input.value = this._value;
     if (this._regex) {
       this._element.classList.add('regex');
     }
     else {
-      this._element.classList.add('regex');
+      this._element.classList.remove('regex');
     };
   },
   
+
+  /**
+   * Store the string value.
+   * This method should be overwritten.
+   * The method receives the the value and the regex.
+   */
+  store : function (v,r) {},
+
+
+  focus : function () {
+    this._element.children[0].focus();
+  },
+
+  /**
+   * Get the associated dom element.
+   */
   element : function () {
     if (this._element !== undefined)
       return this._element;
 
+    // Create element
     this._element = document.createElement('div');
-    var cl = this._element.classList;
-    cl.add('vc-value');
-    if (this.regex())
+    var e = this._element;
+    e.setAttribute('tabindex', 0);
+    e.style.outline = 0;
+
+    var cl = e.classList;
+    cl.add('value');
+    if (this.regex() === true)
       cl.add('regex');
     
-    this._input = this._element.appendChild(
+    // Add input field
+    this._input = e.appendChild(
       document.createElement('input')
     );
-    this._input.appendChild(
-      document.createTextNode(this.value())
-    );
-    
-    this._element.appendChild(
-      document.createElement('div')
-    ).addEventListener('click', function (e) {
-      this.toggleRegex();
-    }.bind(this));
-    
-    var go = this._element.appendChild(
-      document.createElement('span')
+    if (this.value() !== undefined)
+      this._input.value = this.value();
+
+    this._input.addEventListener(
+      'blur',
+      function () {
+	this.store(this.value(), this.regex());
+      }.bind(this)
     );
 
-    return this._element;
+    this._input.addEventListener(
+      'keypress',
+      function (e) {
+	if (e.keyCode == 13) {
+	  this.value(this._input.value);
+	  this.store(this.value(), this.regex());
+          return false;
+	};
+      }.bind(this)
+    );
+
+    // Add regex button
+    var re = e.appendChild(
+      document.createElement('div')
+    );
+    re.addEventListener('click', function (e) {
+      this.toggleRegex();
+      e.halt();
+    }.bind(this));
+    re.appendChild(document.createTextNode('RE'));
+
+    // Add store button
+    /*
+    e.appendChild(
+      document.createElement('div')
+    ).addEventListener('click', function () {
+      this.store(this.value(), this.regex());
+    }.bind(this));
+    */
+    return e;
   }
 });