var FormAddButton = new Class ({
	Implements: [Events],
	
	initialize: function (element) {
		element.addEvent('click', this.add.bind(this));
	},
	
	add: function (e) {
		e.stop();
		var li = $(e.target).getPrevious('ul').getLast('li');
		li.getChildren('div').show();
		this.createClone(li).inject(li, 'after');
		new InputSortable(li.getParent(), '.move');
	},
	
	createClone: function(li) {
		var clone = li.clone();
		clone.getChildren('input').each(function(item) {
			var n = item.get('name').replace(/\D*/g, '').toInt() + 1;
			item.set('name', item.get('name').replace(/\d+/g, n));
			item.set('value', '');
			if(item.get('type') == 'hidden')
				item.set('value', $time() + n);
		});
		new InputDelete.Button(clone.getElement('div.delete'));
		return clone;
	}
});

var InputDelete = new Class({
	initialize: function (buttons) {
		buttons.each(function (button) {
			new InputDelete.Button(button);
		});
	}
});

InputDelete.Button = new Class({
	Implements: [Events],
	
	xhr: null,
	element: null,
	
	initialize: function(element) {
		element.addEvent('click', function(e){
			this.element = $(e.target);
			this.element.hasClass('check') ? this.destroy() : this.request();
		}.bind(this));
	},
	
	request: function() {
		if(this.xhr == null) {
			this.xhr = new Request.JSON({
				url: '/ajax/memory/2/removableTopic',
				method: 'get',
				onRequest: function() {
					this.element.toggleClass('delete').toggleClass('load');
				}.bind(this),
				onSuccess: function(data){
					this.element.toggleClass('delete').toggleClass('load');
					data == true ? this.destroy() : new MemoGrowl({image: '/images/misc/growl/error.png', title: data.title, text: data.text});
					this.xhr = null;
				}.bind(this)
			}).send('topic=' + this.element.getParent().getLast().value + '&idMemory=' + this.element.getParent('div.float').getElement('span.hidden').get('text'));
		}
	},
	
	destroy: function() {
		this.element.getParent().destroy();
		new Reorder();
	}
});

var InputSortable = new Class({
	Implements: [Events],
	
	initialize: function(ul, handles) {
		new Sortables(ul, {
			clone: false,
			handle: handles,
			opacity: .3,
			onComplete: function() {
				new Reorder();
			}
		});
	}
	
});

var Reorder = new Class({
	
	initialize: function() {
		var i = 0;
		var ul = document.getElement('ul.sortable');
		ul.getChildren('li').each(function(item){
			item.getChildren('input').each(function(e){
				e.set('name', e.name.replace(/\d+/g, i));
			});
			if(ul.getChildren('li').length == 1) {
				item.getChildren('div').hide();
			}
			i++;
		});
	}
});