/*
 * -- Tewonder code description start --
 * Name: se.tewonder.Global.GlobalObjects.ClassManager.ClassManager
 * Type: Class
 * Version: 0.0.01
 *
 * Edited by: 
 * Updates: 
 *
 * Notes: 
 * Todo: 
 * -- Tewonder code description end --
 */

function gTewonderLocalScopeFunction() {
	//alert("gTewonderLocalScopeFunction::ClassManager");
	
	var theClass = function() {
		//alert("se.tewonder.Global.GlobalObjects.ClassManager.ClassManager");
		
		this.setClassInheritance = (function(aClass, aBaseClass) {
			theClass.staticSetClassInheritance(aClass, aBaseClass);
		});
		
		this.createClassObjectRecursive = (function(aClass) {
			//alert("se.tewonder.Global.GlobalObjects.ClassManager.ClassManager::createClassObjectRecursive");
			var currentArray = theClass.inheritanceArray;
			var thePrototype = null;
			for(var i = -1; ++i < currentArray.length;) {
				var currentObject = currentArray[i];
				if(currentObject.theClass == aClass) {
					thePrototype = this.createClassObjectRecursive(currentObject.baseClass);
				}
			}
			if(thePrototype != null) {
				aClass.prototype = thePrototype;
			}
			var returnObject = new aClass();
			return returnObject;
		});
		
		this.createClassObject = (function(aClass) {
			//alert("se.tewonder.Global.GlobalObjects.ClassManager.ClassManager::createClassObject");
			var returnObject = this.createClassObjectRecursive(aClass);
			return returnObject;
		});
		
		this.getClassByPath = (function(aClassPath) {
			var pathArray = aClassPath.split(".");
			var currentObject = gTewonderClasses;
			for(var i = -1; ++i < pathArray.length;) {
				if(currentObject[pathArray[i]] == undefined) {
					//METODO: error message
					return null;
				}
				currentObject = currentObject[pathArray[i]];
			}
			return currentObject;
		});
		
		this.createClassObjectByPath = (function(aClassPath) {
			var theClass = this.getClassByPath(aClassPath);
			if(theClass == null) {
				//METODO: error message
				return null;
			}
			var returnObject = this.createClassObject(theClass);
			return returnObject;
		});
	}
	
	theClass.inheritanceArray = new Array();
	
	theClass.staticSetClassInheritance = (function(aClass, aBaseClass) {
		theClass.inheritanceArray.push({theClass: aClass, baseClass: aBaseClass});
	});
	
	gTewonderGlobalFunctions.addClass("se.tewonder.Global.GlobalObjects.ClassManager.ClassManager", theClass);
	if(!gTewonderGlobalFunctions.globalObjectExists("classManager")) {
		gTewonderGlobalFunctions.addGlobalObject("classManager", (new theClass()));
	}
}

gTewonderLocalScopeFunction();

