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++) {

			try 
			{
				var val = this.form.elements[this.fields[i]].value;
			
				if ( val != '')
				{
					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);
					if (!($0.browser.msie && $0.browser.version.match(/8\./)))
					{
						this.form.elements[passwordText.name] = passwordText;
					}
				}
			} catch (e) {
				// alert( this.fields[i] + ' not found' );
			}				
		}
	}
}
HintForm.prototype.doOnSubmit = function() {
	for (var i=0; i <this.fields.length ; i++) {
		try
		{
			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;
			}
		} catch(e) {
			// Just skip the problem field
		}
	}
	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)
    }
}
