/**
 * @author Robert
 */
var FbElement =  new Class({
	initialize: function(element, options) {
		this.plugin = '';
		this.strElement = element;
		this.setOptions(element, options);
	},

	setOptions: function(element, options) {
		if($(element)){
			this.element = $(element);
		}
		
		this.options = {
			element:  element,
			defaultVal: '',
			editable:false
		};
		Object.extend(this.options, options || {});
	},
	
	getElement: function()
	{
		//use this in mocha forms whose elements (such as database jons) arent loaded
		//when the class is ini'd
		if($type(this.element) === false){
			this.element = $(this.options.element); 
		}
	},
	
	//used for elements like checkboxes or radio buttons
	
	_getSubElements: function(){
		var ok = true;
		var optCounter = 0;
		var testId = ''; 	
		this.subElements = [];
		while(ok){
			testId = this.options.element + '_' + optCounter;
			if($(testId)){
				this.subElements.push($(testId));
				optCounter ++;
			}else{
				ok = false;
			} 
		}
	},
	
	addNewEvent: function( action, js ){
		if(action == 'load'){
			eval(js);
		}else{
			if(!this.element){
				this.element = $(this.strElement);
			}
			if(this.element){
				this.element.addEvent( action, function(e){
					eval(js);
					e = new Event(e);
					e.stop();
				} );
				
				this.element.addEvent('blur', function(e){
					this.validate();
				}.bind(this));
			}
		}
	},
	validate:function(){},
	
	//store new options created by user in hidden field
	addNewOption: function(val, label)
	{
		var added = $(this.options.element + '_additions').value;
		var json = {'val':val,'label':label};
		if(added !== ''){
			var a = Json.evaluate(added);
		}else{
			a = [];
		}
		a.push(json);
		var s = '[';
		for(var i=0;i<a.length;i++){
			s += Json.toString(a[i]) + ',';
		}
		s = s.substring(0, s.length-1) + ']';
		$(this.options.element + '_additions').value = s;
	},
	
	//below functions can override in plugin element classes
	
	update: function(val){
		if(this.element){
			if (this.options.editable) {
				this.element.value = val;
			}else{
				this.element.innerHTML = val;
			}
		}
	},
	
	getValue: function(){
		if(this.element){
			if (this.options.editable) {
				return this.element.value;
			}
		}
		return false;
	},
	
	reset: function()
	{
		this.update(this.options.defaultVal);
	},
	
	clear:function()
	{
		this.update('');
	},
	
	onsubmit: function(){
		return true;
	},
	
	cloned: function(){
		//run when the element is cloned in a repeat group
	}
});
