var ScriptLoader = Class.create({
	
	initialize: function(filenames, classnames, filenamesAlreadyAdded, callback, paramsForCallback) {
		this._classnames = classnames;
		this._callback = callback;
		this._paramsForCallback = paramsForCallback;
		
		var loadingStatusObject = new Object();
		for (var i=0; i<classnames.length; i++) {
			loadingStatusObject[classnames[i]] = 1;
		}
		this._loadingStatus = $H(loadingStatusObject);
		this._nbToLoad = this._loadingStatus.keys().length;
		
		var headElement = document.getElementsByTagName("head")[0];
		var newScript;
		for (var i=0; i<filenames.length; i++) {
			var found = false;
			for (var j=0; j<filenamesAlreadyAdded.length; j++) {
				if (filenamesAlreadyAdded[j] == filenames[i]) {
					found = true;
					break;
				}
			}
			if (!found) {
				newScript = document.createElement('script');
				newScript.setAttribute('src', filenames[i]);
				newScript.setAttribute('type', 'text/javascript');
				headElement.appendChild(newScript);
				filenamesAlreadyAdded.push(filenames[i]);
			}
		}
		window.setTimeout(this._testIfLoaded.bindAsEventListener(this), 50);
	}, 
	
	_testIfLoaded: function() {
		var keys = this._loadingStatus.keys();
		var cpt = 0;
		for (var i=0; i<keys.length; i++) {
			if (this._loadingStatus.get(keys[i]) == 1) {				
				if (eval('window.'+keys[i]) != null) {
					this._loadingStatus.set(keys[i], 0);
					this._nbToLoad--;
				}
			}
		}
		if (this._nbToLoad > 0) {
			window.setTimeout(this._testIfLoaded.bindAsEventListener(this), 50);
		}
		else {
			if (this._paramsForCallback != null) {
				this._callback(this._paramsForCallback);
			}
			else {
				this._callback();
			}
		}
	}
	
});