/**
 * Javascript framework for design patterns
 * 
 * @fileoverview Bootstrap to initalize eltype controllers
 *   
 * @author Internet Architects BVBA
 * @version 1.0RC
 * @copyight 2007
 */

/**
 * bootstrap
 * @class IA
 */
var IA = (function () {
	return {
		bootstrap: function() {
	      var nodes, node, i, j, eltype;
		  // find all nodes with attribute eltype
		  nodes = YAHOO.util.Dom.getElementsBy(function(el){ return el.getAttribute("eltype"); });
		  for(j=0;j<nodes.length;j++) {
				node = nodes[j];
				var eltype = node.getAttribute("eltype");
				var eltypeNs = eltype.match(/(.+)?:(.+)/);
				if (eltypeNs == null){
					controllerName = 'IAJS.CONTROLLER.' + eltype.capitalize().camelize();
				} else {
					controllerName = eltypeNs[1] + "." + eltypeNs[2].capitalize().camelize();
				}
				
				IAJS.log("Linking eltype: " + eltype + " to controller:" + controllerName, "info"); //ISDEBUG
				try {
					var controller = eval("new " + controllerName + "(node)");
					controller.init();
					IAJS.controllerCollection[controller.getControllerId()] = controller;
					controller.hookAfterInit();
					controller.initForm();
					
				} catch(ex) {
					IAJS.log(ex + " : error on controller init for " + eltype, "error");
				}
			}
			
			/*
			 * let controllers subscribe themself to master
			 * 
			 * From version 1.0 
			 *  
			 */
			 for(var i in IAJS.controllerCollection) {
			 //IAJS.Event.On("dropdownlist_a", "onChange", function(){IAJS.log("q  qqqqqqqqqqq q ","error")});
			 	IAJS.controllerCollection[i].addListeners();
			 }			 
			

		}
	}
})();

function setDebug() {
	if (IAJS.CONFIG.debug) {
		try {
			var logr = new YAHOO.widget.LogReader();
			if(!IAJS.CONFIG.showDebugCategory.error) logr.hideCategory("error");
			if(!IAJS.CONFIG.showDebugCategory.warn) logr.hideCategory("warn");
			if(!IAJS.CONFIG.showDebugCategory.time) logr.hideCategory("time");
			if(!IAJS.CONFIG.showDebugCategory.info) logr.hideCategory("info");
			if(!IAJS.CONFIG.showDebugCategory.window) logr.hideCategory("window");
			
		 }
		 catch(e) {
			alert("logging is set to true but LogReader can not be created (possible not loaded): " + e);
		 }
		 finally {
			var logr = false;
		 }
	}
}

// initiate bootstrap on window.onload. this function will start when document has been loaded, but will not wait untill images are loaded.

YAHOO.util.Event.onDOMReady(setDebug);
YAHOO.util.Event.onDOMReady(IA.bootstrap);
