function AssetLoader(assets, onCompleteFunc) {
	this.assets = assets;
	this.numAssetsToBeLoaded = 0;
	this.eventLoaded = document.createEvent("Events");
	this.eventLoaded.initEvent('assetsLoaded', true, true);
	this.onCompleteFunc = onCompleteFunc;
	document.addEventListener('assets');
	
	for (item in assets) {
		this.numAssetsToBeLoaded += this.assets[item].length;
	}
}

AssetLoader.prototype.decreaseNumberOfAssetsToBeLoaded = function(evt) {
	this.numAssetsToBeLoaded--;
	document.removeEventListener('assetsLoaded', arguments.callee, false);
	if (this.numAssetsToBeLoaded == 0) {
		document.dispatchEvent(this.eventLoaded);
		this.cleanUpLoadingEventListeners();
		this.onCompleteFunc.call();
	}
}

AssetLoader.prototype.cleanUpLoadingEventListeners = function() {
	for (image in this.assets['images']) {
		this.assets['images'][image].removeEventListener('load', this.decreaseNumberOfAssetsToBeLoaded);
	}
	for (sound in this.assets['sounds']) {
		this.assets['sounds'][sound].removeEventListener('progress', this.decreaseNumberOfAssetsToBeLoaded);
	}
	for (music in this.assets['music']) {
		this.assets['music'][music].removeEventListener('progress', this.decreaseNumberOfAssetsToBeLoaded);
	}
}

AssetLoader.prototype.loadAssets = function() {
	var self = this;
	console.log("Initializing: loading images...");
	var images = {};
	for (var i = 0; i < this.assets['images'].length; i++) {
		var name = this.assets['images'][i]['name'];
		images[name] = new Image();
		images[name].addEventListener('load', function(evt) { self.decreaseNumberOfAssetsToBeLoaded(evt, this); }, false);
		images[name].src = this.assets['images'][i]['src'];
	}
	this.assets['images'] = images;
	
	console.log("Initializing: loading sounds...");
	var sounds = {};
	for (var i = 0; i < this.assets['sounds'].length; i++) {
		var name = this.assets['sounds'][i]['name'];
		sounds[name] = new Audio();
		sounds[name].addEventListener('progress', function(evt) { self.decreaseNumberOfAssetsToBeLoaded(evt); }, false);
		sounds[name].src = this.assets['sounds'][i]['src'];
		sounds[name].load();
	}
	this.assets['sounds'] = sounds;
	
	console.log("Initializing: loading music...");
	var music = {};
	for (var i = 0; i < this.assets['music'].length; i++) {
		var name = this.assets['music'][i]['name'];
		music[name] = new Audio();
		music[name].addEventListener('progress', function(evt) { self.decreaseNumberOfAssetsToBeLoaded(evt); }, false);
		music[name].src = this.assets['music'][i]['src'];
		music[name].loop = true;
		music[name].load();
	}
	this.assets['music'] = music;
}
