function FullSearchSelector (data, input, select, form, emptyLabel, promptLabel, pointLabel, frame){
	this.prototype = new AutoComplete(data, input, select);
	this.prototype.frame = frame;
	this.prototype.form = form;
	this.prototype.emptyLabel = emptyLabel;
	this.prototype.promptLabel = promptLabel;
	this.prototype.pointLabel = pointLabel;
	var onselect = this.prototype.onselect;
	this.prototype.onselect = function(){
		this.showLabel(this.promptLabel);
		onselect.apply(this);
		if(this.select.visible){
			this.setValueToHidden();
		}
	}
	var moveUp = this.prototype.moveUp;
	this.prototype.moveUp = function(){
		moveUp.apply(this);
		this.onselect();
	};
	var moveDown = this.prototype.moveDown;
	this.prototype.moveDown = function(){
		moveDown.apply(this);
		this.onselect();
	};
	var doSelect = this.prototype.doSelect;
	this.prototype.doSelect = function(e){
		if(e && e.keyCode == 13 && !this.select.visible){
			this.form.submit();
		}else{
			doSelect.apply(this);
		}
	};
	var show = this.prototype.show;
	this.prototype.show = function(e){
		this.showLabel(this.promptLabel);
		show.apply(this);
		this.frame.style.display = 'block';
	};
	var hide = this.prototype.hide;
	this.prototype.hide = function(e){
		if (this.isResult() == 'null'){
			document.getElementsByName('rstr').item(0).value = '';
			this.showLabel(this.emptyLabel);
		}else if (this.isResult() == 'point'){
			document.getElementsByName('rstr').item(0).value = '';
			this.showLabel(this.pointLabel);
		}else{
			this.showLabel(this.promptLabel);
		}
		hide.apply(this);
		this.frame.style.display = 'none';
	};
	var onaction = this.prototype.onaction;
	this.prototype.onaction = function(e){
		if (this.select.visible){
			this.setValueToHidden();
		}
		onaction.apply(this);
	}
	this.prototype.setValueToHidden = function(){
		if (this.isResult() == 'result' && this.input.value){
			document.getElementsByName('rstr').item(0).value = '-' + this.select.getSelectedValue();
		}else{
			document.getElementsByName('rstr').item(0).value = '';
		}
	},
	this.prototype.showLabel = function (label){
		this.promptLabel.style.display = 'none';
		this.emptyLabel.style.display = 'none';
		this.pointLabel.style.display = 'none';
		label.style.display = 'block';
	}
	this.prototype.isResult = function(){
		if (this.input.value == ''){
			return 'result';
		}
		var html = this.data.match(new RegExp('<o [^>]*>' + this.input.value + '[^<]*</o>', 'ig'));
		if (!html){
			return 'null';
		}
		for (var i = 0, l = html.length; i < l; i++){
			if (html[i].match(new RegExp('<o [^>]*>' + this.input.value + '</o>', 'ig'))){
				return 'result';
			}
		}
		return 'point';
	};
}
