	
	eval(liligo.namespace);
	window.hpLoader = new Singleton(Observable, {
		
		delayed: false,
		elapsed: false,
		downloaded: false,
		
		afterLoaded: function() {
			this._fireEvent("afterLoaded");
		},
		
		init: function() {
			if (!liligo.pausableCall) {
				liligo.extend({
					pausableCall: function(callback) {
						callback();
					}
				});
			}
		},
		
		load: function() {
			if (this.loaded) {
				if (window.hpUserManager && hpUserManager.initialized) {
					Style.addClass(document.body, "with-bottom");
				}
				return;
			}
			Style.addClass(document.body, "hp-bottom-loading");
			this.loaded = true;
			var script = document.createElement("script");
			script.src = "/homepage/js/full.jsp?r="+hpconfig.release;
			script.type = "text/javascript";
			$$("head")[0].appendChild(script);
		},
		
		onDownloaded: function() {
			this._fireEvent("downloaded");
			this.downloaded = true;
			if (!this.delayed) return hp.init();
			if (this.downloaded && this.elapsed) liligo.pausableCall(bind(hp.init, hp));
		},
		
		onElapsed: function() {
			this.elapsed = true;
			if (this.downloaded && this.elapsed) liligo.pausableCall(bind(hp.init, hp));
		},
		
		delayOnIE: function(ms) {
			IE ? this.delay(ms) : this.load();
		},
		
		delay: function(ms) {
			ms = ms || 500;
			this.delayed = true;
			this.elapsed = false;
			this.downloaded = false;
			this.load();
			setTimeout(bind(this.onElapsed, this), ms);
		}
		
	});
