/**
 * Observer - Observe formelements for changes
 *
 * @version		1.0rc1
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
var Observer = new Class({

	options: {
		periodical: false,
		delay: 1000
	},

	initialize: function(el, type, onFired, options){
		
		this.setOptions(options);
		this.addEvent('onFired', onFired);
		this.element = $(el);
		this.listener = this.fired.bind(this);
		this.listener2 = this.fired2.bind(this);
		this.value = this.element.getValue();
		if (this.options.periodical) this.timer = this.listener.periodical(this.options.periodical);
		switch (type) {
			case 'input' :
				this.element.addEvent('keyup', this.listener); //alert(type);
			break
			case 'select' :
				this.element.addEvent('change', this.listener); //alert(type);
			break
			case 'checkbox' :
			
				//this.element.addEvent('click', this.listener); //alert(type);
				this.element.addEvent('click', this.listener2); //alert(type);
			break
			case 'radio' :
				this.element.addEvent('click', this.listener); //alert(type);
			break
		}
	},

	fired: function() {
		var value = this.element.getValue();
		//alert('value '+value);
		if (this.value == value) return;
		this.clear();
		this.value = value;
		this.timeout = this.fireEvent.delay(this.options.delay, this, ['onFired', [value]]);
	},
	
	fired2: function() {
		
		var value = this.element.checked;
		//alert('value '+value);
		if(this.element.name=='belong_to_network'){
			if (value){
				$('my_network').setStyle('display','block');
				$('sourcing_system').setStyle('display','block');
			}
			else{
				$('my_network').setStyle('display','none');
				$('sourcing_system').setStyle('display','none');	
			}
			return;
		}
		else{
			var value = this.element.getValue();
			if (this.value == value) return;
		}	
		this.clear();
		
		this.timeout = this.fireEvent.delay(this.options.delay, this, ['onFired', [value]]);
	},
	
	clear: function() {
		$clear(this.timeout);
		return this;
	}
});

Observer.implement(new Options);
Observer.implement(new Events);