function addMyEvent(obj, evt, f) {
	var success;
	if (obj.addEventListener) {
		obj.addEventListener(evt, f, false);
		success = true;
	} else if (obj.attachEvent) {
		obj.attachEvent('on' + evt, f);
		success = true;
	} else {
		success = false;
	}
	return success;
}

function addOnload(f) {
	return addMyEvent(window, 'load', f);
}

function EventManager() {
	this.registeredEvents = new Array();

	this.registerEvent = function(eventName, target, f) {
		f = f.replace('~', 'target');
		this.registeredEvents.push(new Array(eventName, target, f));
	}

	this.callEvent = function(eventName, target) {
		var fs = new Array();
		for (var i = 0, length = this.registeredEvents.length; i < length; i++) {
			var event = this.registeredEvents[i];
			if ((event[0] == eventName) && (event[1] == target)) {
				fs.push(event[2]);
			}
		}
		for (var i = 0, length = fs.length; i < length; i++) {
			var f = fs[i];
			eval(f);
		}
	}
}

function ControlManager() {
	this.controls = new Array();

	this.registerControl = function(item, control) {
		this.controls.push(new Array(item, control));
	}

	this.getControl = function(item) {
		var controlFound = false;
		for (var i = 0, length = this.controls.length; i < length; i++) {
			var control = this.controls[i];
			if (control[0] == item) {
				controlFound = control[1];
				i = length;
			}
		}
		return controlFound;
	}
}

var eventManager = new EventManager();
var controlManager = new ControlManager();

function EventManagedControl() {
	this.registerEvent = function(eventName, f) {
		eventManager.registerEvent(eventName, this, f);
	}

	this.callEvent = function(eventName) {
		eventManager.callEvent(eventName, this);
	}

	this.registerOnchange = function(f) {
		this.registerEvent('onchange', f);
	}

	this.callOnchange = function() {
		this.callEvent('onchange', this);
	}
}


