/**
	Cross-browser Behavior-like implementation
	Events registered by selector
	Supports multicast!
	
	version 1.2
*/


/**
	Events - window-level, static manager object; manages all events for this window/frame
*/

// uses window prefix just to emphasize "This is for the entire window, and just this window" - can be used without prefix
window.Events = new Array();

Events.get = function (sSelector, sDomEvent) {
	for(
		var i = Events.length - 1;
		i >= 0 && !(
			Events[i].selector == sSelector
			&& Events[i].domEvent == sDomEvent
		);
		i--
	)
	{}
	
	if(i >= 0)
		return Events[i];
	
	//does not exist; create
	return Events.create(sSelector, sDomEvent);
}

Events.create = function (sSelector, sDomEvent) {
	var iIndex = this.length;
	var event = new Event(sSelector, sDomEvent, iIndex);
	this.push(event);
	return event;
}

Events.createMany = function () {
	for(var iArg = 0; iArg < arguments.length; iArg++) {
		var arg = arguments[iArg];
		this.create(arg[0], arg[1], arg[2]);
	}
}

Events.getList = function () {
	var sEvents = '';
	
	for(var iEvent = 0; iEvent < Events.length; iEvent++) {
		var event = Events[iEvent];
		sEvents += '|' + event.getString();
	}
	
	return sEvents;
}


/* Includes
	would place in separate .js file, but purpose is to import js files
*/
function include(sJsFile) {
	document.writeln('<script src="' + sJsFile + '"></script>');
}
function includes() {
	for(var iInc = 0; iInc < arguments.length; iInc++) {
		include(arguments[iInc]);
	}
}

includes(
	sRoot + '/common/js/array.js',

	sRoot + '/common/onload.js',
	sRoot + '/common/countlog.js',

	sRoot + '/common/dom/simpleselector.js',
	sRoot + '/common/dom/selector.js',
	sRoot + '/common/dom/tag.js',

	sRoot + '/common/event/event.js',
	sRoot + '/common/event/binding.js'
);