var TagManager = new Class({
	version:1.0,
	Implements: [Events, Options],
	options: {
	},
	initialize: function(selectList, addButton, tagsContainer, hiddenInput, options) {
		this.setOptions(options);
		this.selectList = selectList;
		this.addButton = addButton;
		this.tagsContainer = tagsContainer;
		this.hiddenInput = hiddenInput;
		this.regionsAdded = $H({});
		this.selectListHash = $H({});
		$each(this.selectList.getChildren('option'),function(option){
			this.selectListHash.set(option.get('value'),option.get('text'));
		}.bind(this));
		this.addButton.addEvent('click',function(e){
			e.stop();
			this.addTagItem(this.selectList.get('value'));
		}.bind(this))
	},
	addTagItem:function(tagKey){
		tagText = this.selectListHash.get(tagKey);
		if(!this.regionsAdded.has(tagKey) && tagKey != 0)
		{
			this.regionsAdded.set(tagKey,tagText);
			this.updateHiddenInput();
			var tagButton = new Element('button',{
			styles:{
				'font-weight':'bold',
				width:17,
				border:'1px solid #5C95B9',
				'float':'right',
				'-moz-border-radius':'3px 3px 3px 3px',
				'-webkit-border-radius':'3px 3px 3px 3px',
				'text-align':'center',
				'background':'white',
				height:'17px',
				color:'black',
				padding:0,
				margin:0,
				'font-family':'arial',
				'padding-bottom':'1px'
			},
			events:{
				click:function(e){
					e.stop();
					this.regionsAdded.erase(tagKey);
					this.updateHiddenInput();
					tagButton.getParent().destroy();
				}.bind(this)
			}}).set('text','X')
				
			var tagItem = new Element('div',{'styles':{
				border:'1px solid #5C95B9',
				width:100,
				'-moz-border-radius':'3px 3px 3px 3px',
				'-webkit-border-radius':'3px 3px 3px 3px',
				'float':'left',
				'margin-left':10,
				'margin-right':10,
				'margin-bottom':3
			}}).adopt(
				new Element('div',{'styles':{
					'float':'left',
					'padding-left':5,
					width:75
				}}).set('text',tagText),
				tagButton
			);
			this.tagsContainer.adopt(tagItem);
		}
	},
	updateHiddenInput:function()
	{
		this.hiddenInput.set('value',this.regionsAdded.getKeys().join(','));
	},
	preselectFromString:function(values)
	{
		var valuesToInsert = values.split(',');
		
		$each(valuesToInsert,function(key){
			this.addTagItem(key);
		}.bind(this));
	}
});