var beginColor = '#878584';
var endColor = '#000000';

function HintForm(id, fields, values, required, withoutSubmit) {
	this.form = document.getElementById(id);
	this.fields = fields;
	this.values = values;
	this.required = required;
	this.passwords = new Array();

	if (this.form) {
		if (!withoutSubmit) this.form.onsubmit = this.doOnSubmit.bind(this);
		for (var i=0; i < this.fields.length; i++) {

			if (this.form.elements[this.fields[i]].value != '')
			{
				this.form.elements[this.fields[i]].style.color = endColor;
			}
			else
			{
				this.form.elements[this.fields[i]].style.color = beginColor;
				this.form.elements[this.fields[i]].value = this.values[i];
			}
			this.form.elements[this.fields[i]].onfocus = this.doOnFocus.bind(this);
			this.form.elements[this.fields[i]].onblur = this.doOnBlur.bind(this);

			if (this.form.elements[this.fields[i]].type == 'password') {
				this.passwords[i] = 1;
				this.form.elements[this.fields[i]].style.display = 'none';
				this.form.elements[this.fields[i]].onfocus = null;

				var passwordText = document.createElement("INPUT");
				passwordText.name = this.fields[i] + '__text';
				passwordText.value = this.form.elements[this.fields[i]].value;
				passwordText.className = this.form.elements[this.fields[i]].className;
				passwordText.style.color = this.form.elements[this.fields[i]].style.color;
				passwordText.onfocus = this.doOnFocus.bind(this);
				this.form.elements[this.fields[i]].parentNode.appendChild(passwordText);
				this.form.elements[passwordText.name] = passwordText;
			}
		}
	}
}
HintForm.prototype.doOnSubmit = function() {
	for (var i=0; i <this.fields.length ; i++) {
		if (this.passwords[i] == 1) {
			this.form.elements[this.fields[i] + '__text'].style.display = 'none';
			this.form.elements[this.fields[i]].style.display = 'block';
		}
		if (this.form.elements[this.fields[i]].value == this.values[i]) {
			this.form.elements[this.fields[i]].value = '';
		}
		if (this.form.elements[this.fields[i]].value == '' && this.required[i]) {
			alert('Please enter ' + this.values[i]);
			this.form.elements[this.fields[i]].focus();
			return false;
		}
	}
	return true;
}
HintForm.prototype.doOnBlur = function(e) {
	var field = window.event ? window.event.srcElement : e.currentTarget;
	if (field.value == '') {
		var index = 0;
		for (var i=0; i <this.fields.length ; i++) {
			if (this.fields[i] == field.name) {
				index = i; break;
			}
		}
		if (this.passwords[index] == 1) {
			this.form.elements[this.fields[index] + '__text'].style.display = 'block';
			this.form.elements[this.fields[index]].style.display = 'none';
			field = this.form.elements[this.fields[index] + '__text'];
		}
		field.value = this.values[index];
		field.style.color = beginColor;
	}
}
HintForm.prototype.doOnFocus = function(e) {
	var field = window.event ? window.event.srcElement : e.currentTarget;
	var index = 0;
	for (var i=0; i <this.fields.length ; i++) {
		if (this.passwords[i] == 1) {
			if (this.fields[i] + '__text' != field.name) continue;
			this.form.elements[this.fields[i] + '__text'].style.display = 'none';
			this.form.elements[this.fields[i]].style.display = 'block';
			field = this.form.elements[this.fields[i]];
			field.focus();
		}
		if (this.fields[i] == field.name) {
			index = i; break;
		}
	}
	if (field.value == this.values[index]) {
			field.value = '';
	}
	field.style.color = endColor;
}
Function.prototype.bind = function(object) {
    var method = this
    return function() {
        return method.apply(object, arguments)
    }
}