var Fieldset = new Class ({

	options:{
		 'openFieldset' : '',
		 'isLoading' : false,
		 'loadedItems' : {},
		 'maxItems' : {}
	},

	initialize: function(options){
		this.hidden = false;
		this.setOptions(options);
	},

	createNew: function(id, fieldName, maxItems){
		if(this.options.isLoading) {
			return false;
		}

		this.options.isLoading = true;
		this.updateId = id+'_container';
		this.options.loadedItems[id] ++;

		myForm.collapseFieldset();

		this.createSpinner();

		this.doJSONRequest(fieldName, id);

		if(this.options.maxItems[id] != 0 && this.options.maxItems[id] == this.options.loadedItems[id]) {
			$(id+'-createNew').addClass('hidden');
		}

		return false;
	},

	collapseFieldset : function() {
		if(this.options.openFieldset) {
			$(this.options.openFieldset).setStyle('display', 'none');
			if(this.options.labelFieldId && this.options.titleFieldId && $(this.options.labelFieldId).value) $(this.options.titleFieldId).innerHTML = $(this.options.labelFieldId).value;
		}

		return false;
	},

	toggle : function(id, labelFieldId, titleFieldId) {
		if($(labelFieldId).value) $(titleFieldId).innerHTML = $(labelFieldId).value;
		this.collapseFieldset();

		$(id).setStyle('display', 'block');

		this.options.openFieldset = id;
		this.options.labelFieldId = labelFieldId;
		this.options.titleFieldId = titleFieldId;

		return false;
	},

	deleteItem : function(id, parentId) {
		$(parentId+'_container').removeChild($(id+'_container'));

		this.options.loadedItems[parentId] --;
		if(this.options.maxItems[parentId] != 0 && this.options.maxItems[parentId] > this.options.loadedItems[parentId]) {
			$(parentId+'-createNew').removeClass('hidden');
		}

		if(this.options.openFieldset == id)	{
			this.options.openFieldset = '';
			this.options.labelFieldId = '';
			this.options.titleFieldId = '';
		}

		return false;
	},

	doJSONRequest : function(fieldName, parentId) {
		var request = new Request.JSON({
			'url' : '/index.php',
			'data' : {
				'type' : ajaxType,
				'id' : actualPageId,
				'fieldName' : fieldName,
				'parentId' : parentId,
				'no_cache' : 1,
				'L' : sys_language_uid
			},
			onComplete: function(jsonObj) {
				this.completeRequest(jsonObj);
			}.bind(this),
			onFailure : function(jsonObj) {
			}
		}).send();
	},

	completeRequest : function(response) {
		this.removeSpinner();

		if(response && response.html && response.id) {
			container = new Element('div', {'html': response.html, 'id': response.id+'_container', 'class': 'fieldsetContainer'});
			container.inject(this.updateId);
			this.options.openFieldset = response.id;
			this.options.labelFieldId = response.labelFieldId;
			this.options.titleFieldId = response.titleFieldId;
		}
		this.options.isLoading = false;
	},

	createSpinner : function()	{
		spinner = new Element('div', {'id': 'spinner'});
		spinner.inject(this.updateId);
	},

	removeSpinner : function()	{
		$(this.updateId).removeChild($('spinner'));
	},

	doJSONRequestFiles : function(fieldName) {
		var request = new Request.JSON({
			'url' : '/index.php',
			'data' : {
				'type' : ajaxType,
				'id' : actualPageId,
				'fieldName' : fieldName,
				'no_cache' : 1,
				'L' : sys_language_uid
			},
			onComplete: function(jsonObj) {
				myForm.completeRequestFiles(jsonObj);
			},
			onFailure : function(jsonObj) {
			}
		}).send();
	},

	completeRequestFiles : function(response) {
		this.removeSpinner();
		if(response && response.html && response.id) {
			$(this.updateId).innerHTML = response.html;
		}
		this.options.isLoading = false;
	},

	deleteFile : function(id, fieldName) {
		this.updateId = id+'_fieldWrap';
		$(this.updateId).innerHTML = '';
		this.createSpinner();
		this.options.isLoading = true;

		this.doJSONRequestFiles(fieldName);

		return false;
	}

});

Fieldset.implement(new Options);


var myForm = new Fieldset({});

var inputTextCheck = new Class ({
	registerEventsForField : function(idCheck, idText) {
		$(idCheck).addEvent('change', this.checkboxChange);

		$(idText).addEvent('blur', this.textChanged);
	},

	textChanged : function(e) {
		//if textfield is empty at this point, make sure that the checkbox is also unchecked, else check the checkbox
		if(e.target.value.trim() == '') {
			$(e.target.id+'_check').checked = false;
		} else {
			$(e.target.id+'_check').checked = true;
		}
	},

	checkboxChange : function(e) {
		var textField = $(e.target.id.substring(0, e.target.id.indexOf('_check')));
		if(e.target.checked) {
			textField.value = '0'
			textField.focus();
		} else {
			textField.value = '';
		}
	}

});

var inputTypeCheckHandler = new inputTextCheck({});
