/*
 * Extend Form class.
 */
Object.extend(Form, {
  insertIntoTextField: function(element, text) {
    element = $(element);
    if (!element) return;
    if (document.selection) {
			element.focus();
			var orig = element.value.replace(/\r\n/g, "\n");
			var range = document.selection.createRange();
			if (range.parentElement() != element) {
				return;
			}
			range.text = text;
			var actual = tmp = élement.value.replace(/\r\n/g, "\n");
			for(var diff = 0; diff < orig.length; diff++) {
				if (orig.charAt(diff) != actual.charAt(diff)) {
				  break;
			  }
			}
			for(var index = 0, start = 0; tmp.match(text) 
				&& (tmp = tmp.replace(text, "")) 
				&& index <= diff; 
				index = start + text.length) {
				start = actual.indexOf(text, index);
			}
		} else if (element.selectionStart) {
			var start = element.selectionStart;
			var end = element.selectionEnd;
			element.value = element.value.substr(0, start) 
				+ text + element.value.substr(end, element.value.length);
		}
		if (start != null) {
			Form.setCaretTo(element, start + text.length);
		} else {
			element.value += text;
		}
	},

	setCaretTo: function(element, pos) {
		if (element.createTextRange) {
			var range = element.createTextRange();
			range.move('character', pos);
			range.select();
		} else if (element.selectionStart) {
			element.focus();
			element.setSelectionRange(pos, pos);
		}
	}
});

var FieldPlaceholder = Class.create();
FieldPlaceholder.prototype = {
  initialize: function(field) {
    this.field = $(field);
    if (this.field.type == "password") {
      this.isPassword = true;
    }
    if (this.field.title != "" && this.field.title != null) {
      var form = null;
      var e = this.field.parentNode;
      while (e) {
        if (e.tagName.toLowerCase() == "form") {
          form = e;
          break;
        }
        e = e.parentNode;
      }
      if (form) {
        this.observeForm(form);
      }
      this.field.observe("focus", function() {
        this.focus();
      }.bind(this));
      this.field.observe("blur", function() {
        this.blur();
      }.bind(this));
      this.blur();
    }
  },

  observeForm: function(form) {
    $(form).observe("submit", function() {
      this.focus();
    }.bind(this));
  },

  blur: function() {
    if (this.getValue() == "") {
      if (this.isPassword) {
        this.field.type = "text";
      }
      this.field.addClassName("placeholder");
      this.setValue(this.field.title);
    }
  },

  focus: function() {
    if (this.getValue() == "") {
      if (this.isPassword) {
        this.field.type = "password";
      }
      this.setValue("");
      this.field.removeClassName("placeholder");
    }
  },

  getValue: function() {
    if (this.field.value == this.field.title) {
      return "";
    }
    return this.field.value;
  },

  setValue: function(value) {
    this.field.value = value;
  }
};
