var enableAssertion=true;
var enableLog=true;

function JsInit(){
	this._modules=null;
	this._rootDir=null;
	this._conf=null;
	
}

JsInit.prototype=new Object();


JsInit.FIRST_IMPORTS=new Array(
	"lang.String",
	"util.Function",
	"util.StringBuffer",
	"util.Map", 
	"xml.XmlDom",
	"xml.xPath",
	"util.Properties",
	"event.EventUtil",
	"event.Actions",
	"event.Listener",
	"component.DragAndDropUtil",
	"util.element.htmlElement",
	"util.element.jsriaElement"

);

JsInit.prototype._firstImport=function(){
	/*this.imp("lang.String");
	this.imp("util.Function");
	this.imp("util.StringBuffer");
	this.imp("util.Map"); 
	this.imp("xml.XmlDom");
	this.imp("util.Properties");
	this.imp("event.EventUtil");
	this.imp("event.Actions");
	this.imp("event.Listener");
	this.imp("component.DragAndDropUtil");
	this.imp("util.element.htmlElement");
	this.imp("util.element.jsriaElement");*/
	
	for(var i in JsInit.FIRST_IMPORTS){
		this.imp(JsInit.FIRST_IMPORTS[i]);
	}
}

JsInit.prototype.getRootDir=function(){
	return this._rootDir;	
}


JsInit.prototype._setRootDir=function(rootDir){
	this._rootDir=rootDir;
	this._firstImport();
}

JsInit.prototype._loadConf=function(configurationURL){
	var properties=new Properties();
	properties.loadFromXml(this.getAbsoluteDir(configurationURL));
	this._conf=properties;
}

JsInit.prototype._getConf=function(){
	if(this._conf==null) this._loadConf("jsria/conf/jsria-conf.xml");
	return this._conf;
}


JsInit.prototype.getFromConf=function(key){
	return this._getConf().get(key);
}
JsInit.prototype.addToConf=function(key,value){
	this._getConf().put(key,value);
}
	
JsInit.prototype.setBase=function(baseurl){
	this._setRootDir(baseurl);
}
JsInit.prototype.init=function(rootDir,context){
	alert("JsInit.init is deprecated use JsInit.setBase");
}
 
JsInit.prototype.getAbsoluteDir=function(relative){
	if(this.getRootDir()==null) alert("Le chemin de base n'est pas d?fini, use JsInit.setBase");
	else return this.getRootDir()+"/"+relative;
}


/* Permet d'importer un fichier javascript*/
JsInit.prototype.imp=function(package_){
	if(this.getRootDir()==null) alert("Le chemin de base n'est pas d?fini, use JsInit.setBase");
	else{
	try{
		document.write("<script id=\""+package_+"\" src=\""+this.getAbsoluteDir("jsria/src/")+package_.split(".").join("/")+".js"+"\" ></script>");
	}catch(e2){
		alert(package_+" ERREUR ! ! ! !"+e2);
	}
	}
}
JsInit.prototype.impFromModule=function(module_,package_){
	document.write("<script src=\""+this.getAbsoluteDir(this._getModules().get(module_).get("src.path"))+"/"+package_.split(".").join("/")+".js"+"\" ></script>");
	
}
JsInit.prototype.getHost=function(){
	return location.protocol+"//"+location.host+"/";
}


JsInit.prototype._getModules=function(){
	
	if(this._modules!=null) return this._modules;
	this._modules=new Map();
	return this._modules;
}

JsInit.prototype._addModule=function(name,properties){
	var modules=this._getModules();
	modules.put(name,properties);
}

JsInit.prototype.addModule=function(name,configurationURL){
	if(name=="jsria") alert("DEPRECATED JsInit.prototype.addModule('jsria',...) ");
	var properties=new Properties();
	properties.loadFromXml(this.getAbsoluteDir(configurationURL));
	this._addModule(name,properties);
	
}
JsInit.prototype.getModuleConfiguration=function(name){
	if(name=="jsria") alert("DEPRECATED JsInit.prototype.getModuleConfiguration('jsria',...) ");
	var modules=this._getModules();
	return modules.get(name);
}
JsInit._instance=new JsInit();
/* Singleton */
JsInit.getInstance=function(){
		return JsInit._instance;
}