	
fbElement =  new Class({
	initialize: function(element, options) {
		this.setOptions(element, options);
	},
	setOptions: function(element, options) {
		if($(element)){
			this.element = $(element);
		}
		this.options = {
  				element:       'default',
			defaultVal: ''
		}
	Object.extend(this.options, options || {});
	},
	
	addNewEvent: function( action, js ){
		if(this.element){
			if(action == 'load'){
				eval(js);
			}else{
				(this.element).addEvent( action, function(e){
					eval(js);
				} );
			}
		}
	},
	
	//can override in plugin element classes
	
	update: function(val){
		this.element.value = val;
	}
})

fbField = fbElement.extend({
	initialize: function(element, options) {
		this.setOptions(element, options);
	}
});

fbRadio = fbElement.extend({

	initialize: function(element, options) {
		this.elementtype_id = 'fabrikRadiobutton';
		this.setOptions(element, options);
	},

	setOptions: function( element ) {
		this.element = $(element);

		var d = new Array();
		this.options = Object.extend({
			element:       'default',
			defaultVal: d
		}, arguments[1] || {});
		var ok = true;
		this.subElements = new Array();
		var optCounter = 0;
		var testId = ''; 	
		while(ok){
			testId = element + '_' + optCounter;
			if($(testId)){
				this.subElements.push($(testId));
				optCounter ++;
			}else{
				ok = false;
			} 
		}
	},

	addNewEvent: function( action, js ){
		if(action == 'load'){
			eval(js);
		}else{
			this.subElements.each( function(el){
				(el).addEvent( action, function(e){
					eval(js);
				} );
			});
		}
	},

	update: function(val){
		var r = this.baseName + '_' + val;
		if($(r)){
			r.checked = 'checked';
		}else{
		}
	}

});

fbCheckBox = fbElement.extend({

	initialize: function(element, options) {
		this.elementtype_id = 'fabrikCheckbox';
		this.setOptions(element, options);
	},

	setOptions: function( element ) {
		this.element = $(element);

		var d = new Array();
		this.options = Object.extend({
			element:       'default',
			defaultVal: d
		}, arguments[1] || {});
		var ok = true;
		this.subElements = new Array();
		var optCounter = 0;
		var testId = ''; 	
		while(ok){
			testId = element + '_' + optCounter;
			if($(testId)){
				this.subElements.push($(testId));
				optCounter ++;
			}else{
				ok = false;
			} 
		}
	},

	addNewEvent: function( action, js ){
		if(action == 'load'){
			eval(js);
		}else{
			this.subElements.each( function(el){
				(el).addEvent( action, function(e){
					eval(js);
				} );
			});
		}
	},

	update: function(val){
		var r = this.baseName + '_' + val;
		if($(r)){
			r.checked = 'checked';
		}else{
		}
	}

});


fbImage = fbElement.extend({
	initialize: function(element, options) {
		this.setOptions(element, options);
		this.options.rootDir = options.rootDir;
    	this.folderDir = $(element + '_folder');
		this.imageDir = $(element + '_dd');
		this.hiddenField = $(element);
		this.image = $(element + '_img');
		this.imageLink = $(element + '_imglink');
		this.imageFolderList = new Array();
		this.selectedFolder = '';
		if(this.folderDir){
			if(this.folderDir.options.length != 0){
				this.selectedFolder = (this.folderDir).getValue();
			}else{
				this.selectedFolder = '';
			}
		}
        if (this.imageDir){
			if(this.imageDir.options.length != 0){
				this.selectedImage = (this.imageDir).getValue();
			}else{
				this.selectedImage = '';
			}
        }
		this.aChangeFolder = this.changeFolder.bindAsEventListener(this);
		this.aShowImage = this.showImage.bindAsEventListener(this);
		
		this.subElements = [$(this.folderDir), $(this.imageDir)];
		if (this.folderDir) {
			$(this.folderDir).addEvent( 'change', this.aChangeFolder);
		}
		if (this.imageDir) {
			$(this.imageDir).addEvent( 'change', this.aShowImage);
			this.showImage();
		}
	},
	
	addNewEvent: function( action, js ){
		if(action == 'load'){
			eval(js);
		}else{
			this.subElements.each( function(el){
				(el).addEvent( action, function(e){
					eval(js);
				} );
			});
		}
	},
	
	addImageListOption: function(folder, files){
		if(!this.imageOptionExists( folder )){
			var o = {
				'folder': folder,
				'files': files
				}
			this.imageFolderList.push(o);
		}
	},
				
	imageOptionExists: function( folder ){
		var found = this.imageFolderList.find( function (o){
			return (o.folder == folder);
		})
		if(found){
			return true;
		}else{
			return false;
		}
	},
  	
	changeFolder: function( e ){
		var event = new Event(e);
		var el = event.target;
		var folder =$( el.id.replace('_folder', '_dd'));
		this.selectedFolder = (el).getValue();
		folder.innerHTML = '';
		var url = 'index2.php?option=com_fabrik&no_html=1&Itemid=' + this.options.Itemid + '&task=elementPluginAjax&method=ajax_GetImages&element_id=' + this.options.id + '&f=' + encodeURIComponent(this.selectedFolder);
		var myAjax = new Ajax(url, { method:'post', 
		onComplete: function(r){
			var newImages = eval(r);
			newImages.each(function(i){
				var opt = new Element('option', {'value':i}).appendText(i);
				opt.injectInside(folder);
			});
			this.showImage();
			//this.element.value = this.selectedImage;
		}.bind(this)}).request();
	},
	
	showImage: function( e ){
		if(e){
			var event = new Event(e);
			var el = event.target;
		}else{
			var el = this.imageDir;
		}
		if(el.options.length == 0){
			this.image.src = '';
			this.selectedImage = '';
		}else{
			this.selectedImage = el.getValue();
			this.image.src = this.options.rootDir + this.selectedFolder + this.selectedImage;
		}
		this.hiddenField.value = this.selectedFolder +  this.selectedImage;
	}	
});

fbLink = fbElement.extend({

	initialize: function(element, options) {
		this.elementtype_id = 'fabrikLink';
		this.setOptions(element, options);
	},

	setOptions: function( element ) {
		this.element = $(element);
		var d = new Array();
		this.options = Object.extend({
			element:       'default',
			defaultVal: d
		}, arguments[1] || {});
		var ok = true;
		this.linkField = $(element + '_link');
		
		this.subElements = [this.element, this.linkField];
	},

	addNewEvent: function( action, js ){
		if(action == 'load'){
			eval(js);
		}else{
			this.subElements.each( function(el){
				(el).addEvent( action, function(e){
					eval(js);
				} );
			});
		}
	}

});

fbDisplayText = fbElement.extend({});
