	

fbElement =  new Class({

	initialize: function(element, options) {

		this.setOptions(element, options);

	},

	

	setOptions: function(element, options) {

		options.ro = false;

		if($(element)){

			this.element = $(element);

			if(this.element.hasClass('readonly')){

				options.ro = true;

			}

		}

		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){

		if(this.options.ro){

			this.element.setHTML(val);

		}else{

			this.element.value = val;

		}

	}

})



fbField = fbElement.extend({

	initialize: function(element, options) {

		this.setOptions(element, options);

	}

});



fbDropdown = fbElement.extend({

	update: function(val, record){

		if(this.options.ro){

			this.element.setHTML(val);

		}else{

		val = val.split(',');

		this.element.getChildren().each(function(opt){

			if(val.indexOf(opt.value) != -1){

				opt.selected = 'selected';

			}else{

				opt.selected = '';	

			}

		});

		}

	}

});



fbDatabaseJoin = fbElement.extend({

	update: function(val, record){

		if(this.options.ro){

			this.element.setHTML(val);

		}else{

			val = record[this.element.id + '___value'];

		this.element.getChildren().each(function(opt){

			if(val == opt.value){

				opt.selected = 'selected';

			}else{

				opt.selected = '';	

			}

		});

		}

	}

});



fbRadio = fbElement.extend({



	initialize: function(element, options) {

		this.elementtype_id = 'fabrikRadiobutton';

		this.setOptions(element, options);

	},



	setOptions: function( element, options ) {

		options.ro = false;

		this.baseName = element;

		if($(element)){

			this.element = $(element);

			if(this.element.hasClass('readonly')){

				options.ro = true;

			}

		}else{

			this.element = $(element + '_0');

			if(this.element.hasClass('readonly')){

				options.ro = true;

			}

		}

		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){

		if(this.options.ro){

			this.element.setHTML(val);

		}else{

			this.subElements.each( function(el){

				if(el.value == val){

					el.checked = 'checked';

				}else{

					el.checked = false;

				}

			});

		}

	}

});



fbCheckBox = fbElement.extend({



	initialize: function(element, options) {

		this.elementtype_id = 'fabrikCheckbox';

		this.setOptions(element, options);

	},



	setOptions: function( element, options ) {



		options.ro = false;

		if($(element)){

			this.element = $(element);

			if(this.element.hasClass('readonly')){

				options.ro = true;

			}

		}

		

		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;

			} 

		}

		},

		

		update: function(val, record){

			if(this.options.ro){

				this.element.setHTML(val);

			}else{

				val = val.split(',');

				this.subElements.each( function(el){

					if(val.indexOf(el.value) != -1){

						el.checked = 'checked';

					}else{

						el.checked = false;

					}

				});

			}

		

	},



	addNewEvent: function( action, js ){

		if(action == 'load'){

			eval(js);

		}else{

			this.subElements.each( function(el){

				(el).addEvent( action, function(e){

					eval(js);

				} );

			});

		}

	}

});



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 ){

				if(this.folderDir.options.length != 0){

					this.selectedFolder = (this.folderDir).getValue();

				}else{

					this.selectedFolder = '';

				}

			}else{

				this.selectedFolder = this.folderDir.value;

			}

		}

		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, options ) {

		options.ro = false;

		if($(element)){

			this.element = $(element);

			if(this.element.hasClass('readonly')){

				options.ro = true;

			}

		}

		

		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({

	initialize: function(element, options) {

		this.elementtype_id = 'fabrikDisplayText';

		if($(element + '_counter')){

			this.warningFX = $(element + '_counter').effects({duration: 1000, transition: Fx.Transitions.Quart.easeOut});

			var origCol = $(element + '_counter').getStyle('color');

			$(element).addEvent('keydown', function(e){

				var charsLeft =  this.options.max - ($(element).value.length + 1);

				if(charsLeft < 0){

					$(element).value = $(element).value.substring(0,this.options.max);

					charsLeft = 0;

					this.warningFX.start({'opacity':0, 'color':'#FF0000'}).chain(function(){

						this.start({'opacity':1, 'color':'#FF0000'}).chain(function(){

						this.start( {'opacity':0,'color':origCol}).chain(function(){

							this.start({'opacity':1})

						})

					})

				});

				}

				$(element + '_counter').setHTML(charsLeft);

			}.bind(this))

		}

		this.setOptions(element, options);

	}

});
