function EScript(){}
EScript.request_class='className';
EScript.request_package='pkgName';
EScript.show_status=false;
EScript.show_error=false;
EScript.show_loading=true;
//<%@page pageEncoding="GBK"%>
_importCSS=function(pkname){
	document.write("<" + "link href=\"escript.ess?type=resource&file="
		+ pkname + ".css\" rel=\"stylesheet\" type=\"text/css\">");
}

EScript.$getDocBase = function(){
	var base = "", src = "escript.ess", scripts = document.getElementsByTagName("script");
	for (var i=0; i<scripts.length; i++){
		if (scripts[i].src && scripts[i].src.indexOf(src) >= 0){
			var index = scripts[i].src.indexOf(src);
			base = scripts[i].src.substring(0, index);break;
		}
	}
	return base;
}
EScript.$parseCode = function(code){
//	var regExp_function = /(^|\s|;|})(\s*)(function)(\s+)((\w+)(\.\w+)*)(\s*)/g;
//	return code.replace(regExp_function, "$1\n$5=function");
	return code;
}
EScript.$Browser = function(){
	return (/msie/i.test(ua = navigator.userAgent)) ?
		"ie" : ((/gecko/i.test(ua)) ? "moz" :
		((/opera/i.test(ua)) ? "opera" : "other"));
}
EScript.$import = function(path){
	var docBase = EScript.$getDocBase();
	document.write("<" + "script src=\"" + docBase + path + "\"></" + "script>");
}
EScript.$initJSVM = function(){
	var myLoader = new EScript.ClassLoader();
	var jsvmCode = EScript.$parseCode(myLoader.loadClass('jsvm'));
	eval("(function(){" + jsvmCode + "})();");
	JSVM.loader.setClassLoader(myLoader);
	JSVM.loader.setCache(new function(){
			var _dict=[];
			this.get=function(_name){
				var code = _dict[_name];
				if(code != 'undefined' && code != null){
					return code;
				}else{
					return null;
				}
			};
			this.put=function(_name,_value){
				_dict[_name] = _value;
			};
			this.remove=function(_name){
				_dict[_name] == null;
			};
		});
	JSVM.loader.setClassLoader(myLoader);
	JSVM.loader.onloadstart=function(_classname){
		if(EScript.show_status)
			window.status="ESS: loading class [" + _classname + "]";
	};
	JSVM.loader.onload=function(_classname){
		if(EScript.show_status)
			window.status="ESS: class [" + _classname + "] loaded";
	};
}

EScript.XmlDocument = function() {} 
EScript.XmlDocument.create = function () {
	this.getDomDocumentPrefix = function(){
		if (this.prefix)
			return this.prefix;
		var prefixes = ["Microsoft", "MSXML3", "MSXML2", "MSXML"];
		var o;
		for (var i = 0; i < prefixes.length; i++) {
			try {
				o = new ActiveXObject(prefixes[i] + ".DomDocument");
				return this.prefix = prefixes[i];
			}
			catch (ex) {};
		}
		throw new Error("Could not find an installed XML parser");
	}
	try {
		if (document.implementation && document.implementation.createDocument) {
			var doc = document.implementation.createDocument("", "", null);
			if (doc.readyState == null) {
				doc.readyState = 1;
				doc.addEventListener("load", function () {
						doc.readyState = 4;
						if (typeof doc.onreadystatechange == "function")
							doc.onreadystatechange();
					}, false);
			}
			return doc;
		}
		if (window.ActiveXObject){
			return new ActiveXObject(this.getDomDocumentPrefix() + ".DomDocument");
		}
	} catch (ex) {}
	throw new Error("Could not find an installed XMLHttp object");
};

EScript.XmlHttp = function(){}
EScript.XmlHttp.create = function (){
	this.getXmlHttpPrefix = function(){
		if (this.prefix)
			return this.prefix;
		var prefixes = ["Microsoft", "MSXML3", "MSXML2", "MSXML"];
		for (var i = 0; i < prefixes.length; i++) {
			try {
				new ActiveXObject(prefixes[i] + ".XmlHttp");
				return this.prefix = prefixes[i];
			} catch (ex) {};
		}
		throw new Error("Could not find an installed XMLHttp object");
	}
	try {
		if (window.ActiveXObject) {// IE
			return new ActiveXObject(this.getXmlHttpPrefix() + ".XmlHttp");
		}
		if (window.XMLHttpRequest) {// NS&MOZ
			var req = new XMLHttpRequest();
			// some versions of Moz do not support the readyState property
			// and the onreadystate event so we patch it!
			if (req.readyState == null) {
				req.readyState = 1;
				req.addEventListener("load", function () {
					req.readyState = 4;
					if (typeof req.onreadystatechange == "function")
						req.onreadystatechange();
				}, false);
			}
			return req;
		}
	}catch (ex) {}
	throw new Error("Your browser does not support XmlHttp objects");
};

// JSVM's classloader
EScript.ClassLoader = function(){
	this.loadClass=function(_classname){
		var xmlHttp = EScript.XmlHttp.create();
			var _requestUrl = "escript.ess?type=scirpt&" + EScript.request_class + "=" + _classname;
			try{//alert(_requestUrl);
				xmlHttp.open("POST",_requestUrl,false);
				xmlHttp.send('');
				if(xmlHttp.status==200||xmlHttp.status==0){
//					if(_classname=="com.edu88.edupass.webapp.js.front.MainContainer") alert(xmlHttp.responseText);
//					if(_classname=="jsvm") alert(xmlHttp.responseText);
					return xmlHttp.responseText;
				}
			}catch(er){
			}
		alert("JSVM/classLoader.loadClass: couldn't load class [ "+_classname+".js ] resource. {HTTP-STATUS:"+xmlHttp.status+"}");
	};
	this.loadPackage=function(_packagename){
		var xmlHttp = EScript.XmlHttp.create();
		if(/\/$/.test(_packagename)==false) _packagename += '.';
		var _requestUrl = "escript.ess?type=scirpt&" + EScript.request_package + "=" + _packagename;
		try{//alert(_packagename);
			xmlHttp.open("POST",_requestUrl,false);
			xmlHttp.send();
			if(xmlHttp.status==200||xmlHttp.status==0){
				return xmlHttp.responseText;
			}
		}catch(er){
		}
		alert("JSVM/classLoader.loadPackage:couldn't load package [ "+_packagepath+" ] resource. {HTTP-STATUS:"+xmlHttp.status+"}");
	};
};
EScript.$initJSVM();
_import('js.lang.Object');
