var PxFileUpload = new Class({
	options: {},
	fieldUploadFieldSet: '',
	fieldId: '',
	itemsCount: 0,
	addEventSet: false,

	Implements: [Options],

	initialize: function(options, fieldId) {
		this.setOptions(options);
		this.fieldId = fieldId;
		this.fieldUploadFieldSet = $(fieldId);
		this.itemsCount = this.options.totalItems;

		this.getUploadedFiles();

		this.addFunction =  function() {
				this.createNewInputField();
		}.bind(this);

		if(this.options.maxItems > 1) {
			this.addButton = new Element('span', {'class': 'addButton', 'id': this.fieldId+'_addButton', 'html':  MooTools.lang.get('PxFileUpload', 'addfile')}).setStyle('cursor', 'pointer').injectInside(this.fieldUploadFieldSet);
			if(this.itemsCount < this.options.maxItems) {
				this.addAddEvent();
			} else {
				this.addButton.addClass('disabled');
			}
		}
	},

	addAddEvent: function() {
		if(this.addEventSet == false) {
			this.addEvent = this.addButton.addEvent('click', this.addFunction);
			this.addEventSet = true;
			this.addButton.removeClass('disabled');
		}
	},

	removeAddEvent: function() {
		if(this.addEventSet == true) {
			this.addButton.removeEvent('click', this.addFunction);
			this.addEventSet = false;
			this.addButton.addClass('disabled');
		}
	},

	getUploadedFiles: function() {
		var uploadedFiles = this.fieldUploadFieldSet.getElements('div.PxFileUploadUploadedItem');
		$A(uploadedFiles).each(function(item){
			this.insertDeleteButton(item);
		}, this);
	},

	insertDeleteButton: function(item) {
		var deleteButton = new Element('span', {'class': 'deleteButton', 'html': MooTools.lang.get('PxFileUpload', 'deletefile')}).setStyle('cursor', 'pointer').injectInside(item);
		deleteButton.addEvent('click', function(item) {
			this.deleteItem(item);
		}.pass(item, this));
	},

	deleteItem: function(item) {
		item.getParent().removeChild(item);

		this.itemsCount --;

		if(this.options.maxItems == 1 && this.itemsCount==0) {
			this.createNewInputField();
		} else if(this.options.maxItems > 1 && this.itemsCount < this.options.maxItems) {
			this.addAddEvent();
		}
	},

	createNewInputField: function(parentFiledId) {
		this.options.totalItems++;
		this.itemsCount ++;
		var fieldId = this.options.prefix+this.options.totalItems;

		var wrapDiv = new Element('div', {
			id: fieldId+'_fieldWrap',
			'class': 'form normal getInputFile'
		});

		var labelElement = new Element('label', {
			'for': fieldId
		});

		var inputElement = new Element('input', {
			type: 'file',
			name: this.options.fieldName,
			id: fieldId,
			'class': 'form input file'
		});

		labelElement.injectInside(wrapDiv);
		inputElement.injectInside(wrapDiv);


		if(this.options.maxItems > 1) {
			wrapDiv.inject(this.addButton, 'before');
			if(this.options.maxItems == this.itemsCount) {
				this.removeAddEvent();
			}
		} else {
			wrapDiv.injectInside(this.fieldUploadFieldSet);
		}

		new Element('div', {'class': 'clear', 'html': '&nbsp;'}).inject(wrapDiv, 'after');
	}
});

MooTools.lang.set('de-CH', 'PxFileUpload', {
	addfile: 'Weitere Datei hinzuf&uuml;gen',
	deletefile: 'Datei l&ouml;schen'
});

MooTools.lang.setLanguage('de-CH');
