/** 
* @fileoverview e104js-loader
*
* @author fu.xiang
* @version 0.1
*/

e104.provides = {
	'e104.util.Cookie': null,
	'e104.util.FlashUpload': null,
	
	'e104.form.Input': null,
	'e104.form.InputUpload': null,
	'e104.form.Validator': null,
	'e104.form.Tip': ['scriptaculous.effect'],
	
	'e104.widget.ColumnCopy': null,
	'e104.widget.AutoSuggest': null,
	'e104.widget.Calendar': ['scriptaculous.effect'],
	'e104.widget.DragDrop': null,
	'e104.widget.Menu': null,
	'e104.widget.Slider': null,
	'e104.widget.Slider2': null,
	'e104.widget.TreeObject': null,
	'e104.widget.TreeObject1': null,
	'e104.widget.SeparatePage': ['e104.form.Input'],
	'e104.widget.TableSort': null,
	'e104.widget.TableSort2': null,
	'e104.widget.DhtmlTip': null,
	'e104.widget.DhtmlWindow': ['scriptaculous.effect'],
	'e104.widget.AnimatedCollapse': null,
	'e104.widget.UFO': null,
	
	
	//third party lib
	'scriptaculous.effect': null,
	'scriptaculous.builder': null,
	'stickmanlabs.lightwindow': ['scriptaculous.effect']
};
/*********************************************************************************************/
var __baseScripts = '<script src="' + e104.JS_DIR + 'prototype.js"> </script><script src="' + e104.JS_DIR + 'e104.props.jsp" type="text/javascript"> </script><script src="' + e104.JS_DIR + 'coreAPI.js"> </script>';
document.write(__baseScripts);

/*********************************************************************************************/
var __storejs = [];

function __setjs(cls) {
	var storejs = [];
	function contain(str) {
		for(var i=0, len = __storejs.length; i < len; i++) {
			if(__storejs[i] == str) {
				return true;
			}
		}
		__storejs.push(str);
		return false;
	}
	if(cls.indexOf('schema') == -1) {
		needs = e104.provides[cls];
		if(needs === undefined) {
			throw new Error('$import error!! unknow class: ' + cls);
			return false;
		}
		if(needs !== null) {
			for(var i=0, len = needs.length; i < len; i++) {
				if(!contain(needs[i])) {
					storejs.push(e104.JS_DIR + needs[i]);
				}
			}
		}
		if(!contain(cls)) {
			storejs.push(e104.JS_DIR + cls);
		}
	}
	else if(!contain(cls)) {
		storejs.push(e104.SCHEMA_DIR + cls);
	}
	return storejs;
}

var $import = function(src) {
	var scripts = '';
	var storejs = __setjs(src);
	if(!storejs) {
		return;
	}
	for(var i=0, len=storejs.length; i < len; i++) {
    	scripts += '<script src="' + storejs[i]  + '.js"> </' + 'script>';
	}
	
	if(scripts) {
		document.write(scripts);
	}
}

var $js = function(src) {
    var script = '<script src="' + src + '"> </' + 'script>';
	document.write(script);
}
