
var HURLANT = window.HURLANT || {};

HURLANT.donkey = (function(){
	var escIsReady;
	var flo;
	
	function es4eval(s) {
		if (escIsReady) {
			flo.eval(s);
		} else {
			alert("es4eval: ESC is not ready yet.");
		}
	}
	
	// lifted from http://en.wikipedia.org/wiki/XMLHttpRequest. yes, I am *that* lazy.
	function ajax(url, callbackFunction) {
	  var request = window.XMLHttpRequest ?
	      new XMLHttpRequest() :
	      new ActiveXObject("MSXML2.XMLHTTP.3.0");
	  request.open("GET", url, true);
	  request.onreadystatechange = function() {
	    if (request.readyState == 4 && (request.status == 200 || request.status == 0)) {
	      if (request.responseText) {
	          callbackFunction(request.responseText);
	      }
	    }
	  };
	  request.send(null);
	}

	function loadScriptNodes() {
		var scripts = document.getElementsByTagName("script");
		var waitForLoads=0;
		for (var i=0;i<scripts.length;i++) {
			var script = scripts[i];
			var type = script.type;
			if ({"application/ecmascript;version=4":1,"application/javascript;version=2":1}[type]) {
				if (!script.escLoaded) {
					if (script.src) {
						// do an XHR call to fetch external script. hope crossdomain rules allow for it. :-/
						// this behaves as if a "defer" attribute was set on the script tag on IE.
						try {
							waitForLoads++;
							ajax(script.src, function(index, src) {
								return function(s){
									script.escLoaded = true;
									flo.enqueueScript(s, index, src.split('/').slice(3).join('/'));
									waitForLoads--;
									if (waitForLoads==0) {
										flo.runQueue();
									}
									//es4eval(s);
								}
							}(i,script.src));
						} catch (e) {
							// on IE, local XHR fetch fail horribly. ignore silently.
							alert("ajax error: "+e); // or not.
						}
					} else {
						try {
							flo.enqueueScript(script.innerHTML, i, location.pathname.slice(1));
							//es4eval(script.innerHTML);
						} catch (e) {
							alert("error: "+e.description+"\n\n"+script.innerHTML+" \n flo="+flo);
						}
						script.escLoaded = true;
					}
				}
			}
		}
		if (waitForLoads==0) {
			flo.runQueue();
		}
	}
	
	function escReady() {
	    if (escIsReady) return;
		escIsReady = true;
		flo = document.getElementById("ScreamingDonkey");
		loadScriptNodes();
	}
	
	function loadESC() {
		var div = document.createElement("div");
		div.id = "ScreamingDonkey";
		document.body.appendChild(div);
		swfobject.embedSWF("../ScreamingDonkey.swf", "ScreamingDonkey", "1", "1", "9.0.0", "../expressInstall.swf");
	}

	// initialization code
	swfobject.addDomLoadEvent(loadESC)
	HURLANT_donkey_escReady = escReady;
		
	return {
		eval: es4eval
	};
})();
