function $(id) {
  if (document.getElementById) {
    return document.getElementById(id);
  } else if (document.all) {
    return window.document.all[id];
  } else if (document.layers) {
    return window.document.layers[id];
  } else {
    return false;
  }
}

function functionGroup() {
  var _functionGroup = this;
  _functionGroup.functions = [];
  _functionGroup.add = function(fun) {
    _functionGroup.functions[_functionGroup.functions.length] = fun;
  }
  _functionGroup.exec = function() {
	for (i = 0; i < _functionGroup.functions.length; i++) {
	  _functionGroup.functions[i]();
	}
  }
  _functionGroup.getLength = function() {
    return _functionGroup.functions.length;
  }
}




function events() {
  var _events = this;
  _events.arr = [];
  
  _events.add = function(addObject, addEvent, addFunction) {
    
	if (addObject.id) {
	  addObjectId = addObject.id;
	} else {
	  addObjectId = addObject;
	}
	
	if (typeof _events.arr[addObjectId] != 'object') {
	  _events.arr[addObjectId] = [];
	}
	
	if (typeof _events.arr[addObjectId][addEvent] != 'object') {
	  //alert('new functionGroup created : ' + addObject + '-' + addEvent + '-' + addFunction + '!');
	  _events.arr[addObjectId][addEvent] = new functionGroup();
	}

	
	_events.arr[addObjectId][addEvent].add(addFunction);
	
	if (_events.arr[addObjectId][addEvent].getLength() <= 1) {
	  switch(addEvent) {
	    case 'load':
		  addObject.onload = _events.arr[addObjectId][addEvent].exec;
		  break;
	    case 'click':
		  addObject.onclick = _events.arr[addObjectId][addEvent].exec;
		  break;
	    default:
	      break;
	    }
	  }
  }
}


var ev = new events();
