function ExpertsFormChanger(select, target, field, list) {
	this.select = $(select);
	this.target = $(target);
	this.field = field;
	this.list = list;
	this.form = this.select.form;
	if (this.form.elements[this.field]) {
		this.hidInput = this.form.elements[this.field];
		this.hidInput.parentNode.removeChild(this.hidInput);
	} else {
		this.hidInput = document.createElement('input');
		this.hidInput.type = 'hidden';
		this.hidInput.name = this.field;
		this.hidInput.value = "";
	}
	this.value = this.hidInput.value;

	this.clearTarget();

	if (this.select && this.list)
		Event.observe(this.select, 'change',
			this.changed.bindAsEventListener(this)
		);

	this.changed();
}
ExpertsFormChanger.prototype = {
	clearTarget: function() {
		while (this.target.childNodes.length)
			this.target.removeChild(this.target.firstChild);
	},

	changed: function(e) {
		if (this.select.selectedIndex < 0) return;
		var name = this.list[this.select.selectedIndex];

		this.target.hide();
		this.clearTarget();

		if (name) {
			var input = document.createElement('input');
			input.name = input.id = this.field;
			input.value = this.value;

			var p = document.createElement('p');
			p.appendChild(document.createTextNode(name + ": "));
			p.appendChild(input);

			this.target.appendChild(p);
		} else {
			this.target.appendChild(this.hidInput);
		}

		this.target.show();
	}
};

function ExpertsForm(options) {
	Object.extend(this, options);

	if (this.typeSelect && $(this.typeSelect)) {
		new ExpertsFormChanger(this.typeSelect, this.typeTarget, this.typeField, this.types);
	}
	
	if (this.sourceSelect && $(this.sourceSelect)) {
		new ExpertsFormChanger(this.sourceSelect, this.sourceTarget, this.sourceField, this.sources);
	}
}

ExpertsForm.prototype = {
	typeTarget: 'type-add-container',
	typeField: 'type_add',
	sourceTarget: 'source-add-container',
	sourceField: 'source_add'
};

ExpertsForm.delayedCreate = function(options, el, en) {
	if (el == undefined && en == undefined) {
		el = window;
		en = "load";
	}
	Event.observe(el, en, function() {
		new ExpertsForm(options);
	});
};
