/**
 * @fileoverview Importuje podany plik.
 *
 * @Used IE, FF, Opera
 *
 * @example
 *		Import('myLib/data/Vector.js');
 *		lub
 * 		Import('myLib.data.Vector');
 *		lub
 *		Import.script('http://wap.samozycie.pl/_lib_js/myLib/util/Service.js');
 *
 * @version: 1.01 2005/06/07
 */

/**
 * @constructor
 * @param	String
 */
function Import(file){
	file = Import.getScriptPath(file);
	Import.script(Import.getPath() + file);
};

/**
 * Zwraca odpowiedni format sciezki do pliku klasy.
 * @public
 * @param	String
 * @return	String
 */
Import.getScriptPath = function(file){
	if(file.indexOf('/') >= 0)
		return file;
	else
		return file.split('.').join('/') + '.js';
};

/**
 * Zawiera sciezki do biblioteki.
 * @public
 * @type	String
 */
//Import.getPath() = Config.path.IMPORT;

Import.getPath = function(){
	return Config.getPathToJS(); //Config.PATH + Config.path.JS;
};

/**
 * Zawiera sciezki do uslug sieciowych.
 * @public
 * @type	String
 *
 */
//Import.getPathWebSerwices = 'http://wap.samozycie.pl/_webServices/';

/**
 * Zawiera liste zaladowanych klas.
 * @type	Array
 * @private
 */
Import.scripts = new Array();

/**
 * Pozwala zaladowac plik klasy.
 * @public
 * @param	String	�cie�ka do pliku wraz z jego nazw�.
 * @return	void
 */
Import.script = function(file){
	if(!Import.isImport(file)){
		document.write('<script src="' + file + '"></script>');
		Import.scripts[Import.scripts.length] = file;
	}
};

/**
 * Pozwala zaladowac plik klasy.
 * @public
 * @param	String	�cie�ka do pliku wraz z jego nazw�.
 * @return	void
 */
Import.isImport = function(file){
	for(var i = 0; i < Import.scripts.length; i++){
		if(Import.scripts[i] == file){
			return true;
		}
	}
	return false
};

/**
 * Pozwala skrocic odwolanie do klas.
 * Np.: 'new SelectText() zamiast new myWidget.SelectText()'.
 * @public
 * @param	String	Nazwa pakietu.
 * @return	Boolean
 */
Import.namespace = function(name){
    if(typeof(name) == 'undefined'){
        alert('Należy podać nazwę pakietu.');
        return false;
    }
    name = name.replace('.', '/');
    if(name.substr(name.length - 1, 1) != '/'){
        name += '/';
    }
    //alert(name);
    var result = false;
    var scripts = document.getElementsByTagName('script');
    for(var i = 0; i < scripts.length; i++){
        if(scripts[i].src != ''){
            var tmp = scripts[i].src.replace(Import.getPath(), '');
            if(tmp.substr(0, name.length) == name){
                tmp = tmp.replace('.js', '');
                var className = tmp.replace(name, '');
                var classFullName = tmp.replace('/', '.');
                //alert(className + ' = ' + classFullName)
                eval(className + ' = ' + classFullName);
                //window[className] = window[classFullName];
                result = true;
                //document.write('<li>' + tmp + '</li>');
            }
        }
    }
    return result;
};

/**
 * Pozwala zaladowac plik stylow (css).
 * @public
 * @param	String	�cie�ka do pliku wraz z jego nazw�.
 * @return	void
 */
Import.style = function(file){
	document.write('<link href="' + Import.getPath() + file
	+ '" rel="stylesheet" type="text/css" />');
};

/**
 * Zwraca pelna sciezke do zasobow.
 * @public
 * @return	String
 */
Import.getFullPath = function(file){
	var path = Import.getPath();
	if(typeof(file) != 'undefined'){
		path += file;
	}
	return path;
};

/**
 * Wyswitla liste zaladowanych klas.
 * @public
 * @return	void
 */
Import.scriptList = function(){
	var content = '<ul>';
	for(var i = 0; i < Import.scripts.length; i++){
		content += '<li>' + Import.scripts[i] + '</li>';
	}
	content += '</ul>';
	document.write(content);
};

/**
 * Tworzy strukture pakietow pozwalajac na wywolywanie klas
 * wraz z nazwami pakietow - katalogow (na wzor Javy).
 * @public
 * @return	void
 */
Import.load = function(){
    var obj, tmp;
    for(var j = 0; j < Import.scripts.length; j++){
        //var t = j.split(/[.\/]/);
        var script = Import.scripts[j];
        var m = script.substring(0, script.lastIndexOf('.'));
        var t = m.split('/');
        //alert(m);
        for(var i = 0; i < t.length; i++){
            obj = t[i];
            if(i == 0){
                if(!window[obj]){
                    window[obj] = new Object();
                }
                tmp = window[obj];
                //tmp = window[obj] = new Object();
            }
            else if(i < t.length-1){
                if(!tmp[obj]){
                    tmp[obj] = new Object;
                }
                tmp = tmp[obj];
                //tmp = tmp[obj] = new Object;
            }
            else{
                tmp[obj] = window[obj];
            }
        }
    }
};

Import.clone = function(src, desc){
	if(typeof(desc) != 'object'){
		var desc = {};
	}
	for(var i in src){
		if(typeof(src[i]) == 'object')
			Import.clone(src[i], desc[i]);
		else
			desc[i] = src[i];
	}
	return desc;
};

/*
var neo = {};
var neo.lib = {
	contents:	{};
	data:		{};
	effects:	{};
	events:		{};
	form:		{};
	html:		{};
	http:		{};
};
*/

Import('myLib/System.js');
