if (!Pure) var Pure={};

Pure.CriteriaList = function(options) {
	this.options = options;
	this.select = $id(options.select);
	this.textfield = options.textfield;
	this.list = $id(options.list);
	this.values = {};
	this.addBehavior();
	this.checkForEmptyCriteria();
}

Pure.CriteriaList.prototype.addBehavior = function() {
	var self = this;
	if (this.select) {
		this.select.onclick = this.select.onblur = function() {
			self.selectDidChange();
		}
	}
	if (this.textfield) {
		this.textfield.setDelegate(this);
	}
}
/**
 * text is optional, get fetched from select if not given
 */
Pure.CriteriaList.prototype.addCriteria = function(value,text) {
	if (this.values[value]==true) return;
	if (!text) {
		text = this.valueToText(value);		
	}
	if (text!=null) {
		var element = document.createElement('div');
		element.className='criteria';
		var del = document.createElement('div');
		var hidden = document.createElement('input');
		hidden.setAttribute('type','hidden');
		hidden.setAttribute('name',this.options.property);
		hidden.setAttribute('value',value);
		del.className='delete';
		var self = this;
		del.onclick = function() {
			self.deleteWasClicked(this);
		}
		element.appendChild(hidden);
		element.appendChild(del);
		element.appendChild(document.createTextNode(text));
		this.list.appendChild(element);
		this.values[value] = true;
		this.checkForEmptyCriteria();
	}
}

Pure.CriteriaList.prototype.checkForEmptyCriteria = function() {
	if ($class('criteria',this.list).length==0) {
		this.list.innerHTML = '<div class="no_criterias">'+this.options.lang.noCriteria+'</div>';
	} else if ($class('no_criterias',this.list).length>0){
		var noCriteria = $class('no_criterias',this.list)[0];
		this.list.removeChild(noCriteria);
	}
}

Pure.CriteriaList.prototype.completionFinished = function(item) {
	this.textfield.setValue('');
	this.addCriteria(item.value,item.title);
}

Pure.CriteriaList.prototype.modifyCompletionQuery = function(query) {
	var newQuery = '';
	var words = query.split(' ');
	for (var i=0; i < words.length; i++) {
		if (words[i].length>0) {
			newQuery+=words[i]+'* ';
		}
	};
	return newQuery;
}

Pure.CriteriaList.prototype.selectDidChange = function() {
	var option = this.select.options[this.select.selectedIndex];
	if (this.select.selectedIndex==0 || this.values[option.value]==true) {
		this.select.selectedIndex=0;
		return;
	}
	this.addCriteria(option.value,option.text);
	this.select.selectedIndex=0;
	this.checkForEmptyCriteria();
}

Pure.CriteriaList.prototype.deleteWasClicked = function(tag) {
	var element = tag.parentNode;
	var value = element.getElementsByTagName('input')[0].value;
	element.parentNode.removeChild(element);
	this.values[value] = false;
	this.checkForEmptyCriteria();
}

Pure.CriteriaList.prototype.valueToText = function(value) {
	if (this.select) {
		for (var i=0; i < this.select.options.length; i++) {
			if (this.select.options[i].value==value) {
				return this.select.options[i].text;
			}
		};
	}
	return null;
}