
AF_Var['numJSfiles'] = 0;
AF_Var['JSfiles'] = Array();

function AF_addJSfile(src) {
	
	// check if was added before
	var i;
	var wasAdded = false;
	for(i = 0; i < AF_Var['numJSfiles']; i++) {
		if (AF_Var['JSfiles'][i] == src) {
			wasAdded = true;
			break;
		}
	}
	
	if (wasAdded == false) {
		var jsfile = document.createElement('script');
		jsfile.setAttribute("type","text/javascript");
		jsfile.setAttribute("src", src);
		document.getElementsByTagName("head")[0].appendChild(jsfile);
		AF_Var['JSfiles'][AF_Var['numJSfiles']] = src;
		AF_Var['numJSfiles']++;
	}	

};


AF_Var['numCSSfiles'] = 0;
AF_Var['CSSfiles'] = Array();

function AF_addCSSfile(href) {
	
	// check if was added before
	var i;
	var wasAdded = false;
	for(i = 0; i < AF_Var['numCSSfiles']; i++) {
		if (AF_Var['CSSfiles'][i] == href) {
			wasAdded = true;
			break;
		}
	}
	
	if (wasAdded == false) {
		var cssfile=document.createElement("link");
		cssfile.setAttribute("rel", "stylesheet");
		cssfile.setAttribute("type", "text/css");
		cssfile.setAttribute("href", href);
		document.getElementsByTagName("head")[0].appendChild(cssfile);
		AF_Var['CSSfiles'][AF_Var['numCSSfiles']] = href;
		AF_Var['numCSSfiles']++;
	}

};

function AF_preloadImage(image) {
	im = new Image;
	im.src = image;	
}

function AF_createHttpRequest() {
	
	var httpRequest;
	if (window.XMLHttpRequest)
	{
		// The browser implements native interface
		httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
        }
    } 
	else if (window.ActiveXObject)
	{
		// The browser allows create ActiveX objects
		try {
			httpRequest = new ActiveXObject("MSXML2.XMLHTTP");
		} catch (e) {
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!httpRequest)
	{
		// the instance was not created
		return null;
	} else {
		return httpRequest;
	}

}

function AF_HideElement(element) {
	var divElement = document.getElementById(element);
	divElement.style.visibility = 'hidden';
	divElement.style.width = '0px';
	divElement.style.height = '0px';
	divElement.style.overflow = 'hidden';
	divElement.style.display = 'none';
};

function AF_ShowElement(element) {
	var divElement = document.getElementById(element);
	divElement.style.visibility = 'inherit';
	divElement.style.width = 'auto';
	divElement.style.height = '100%';
	divElement.style.overflow = 'inherit';
	divElement.style.display = 'inline';
};


function AF_LoadLayout (idLayout, classLayout, getParams, postParams, pathLayout) {

	// check all the parameters passed
	
	if (AF_LoadLayout.arguments.length < 2) {
		classLayout = idLayout;
	}

	if (AF_LoadLayout.arguments.length < 3) {
		getParams = AF_Var['Get'];
	}

	if (AF_LoadLayout.arguments.length < 4) {
		postParams = AF_Var['Post'];
	}
	
	if (AF_LoadLayout.arguments.length < 5) {
		pathLayout = '';
	}
	
	var _request;

	_request = AF_createHttpRequest();
		
	if (_request != null) {
		_request.open('POST', AF_Var['Path'] + 'controller/AF_RequestDispatcher.php5?' + encodeURI(getParams));
		_request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
		var request = _request;

		// define generic function to manage data received
		var genericGetData = function() {
			if ((request.readyState == 4) && (request.status == 200)) {

				var xmlResponse = request.responseXML;
				var xmlRoot = xmlResponse.documentElement;

				for (var iNode = 0; iNode < xmlRoot.childNodes.length; iNode++) {
					 var node = xmlRoot.childNodes.item(iNode);
					 var value = "";
					 if (node.firstChild != null) {
						 value = node.firstChild.nodeValue;
					 }
					 switch(node.nodeName) {
						case 'JSCODE':
							eval(value);
							break;
								
						case 'CSSFILE':
							AF_addCSSfile(value);
							break;
								
						case 'JSFILE':
							AF_addJSfile(value);
							break;
								
						case 'CLEARLAYOUT':
							document.getElementById(idLayout).innerHTML = "";
							break;

						case 'HTMLCODE':
							var divBlock = document.createElement('DIV'); 
							var divParent = document.getElementById(idLayout);
							divParent.appendChild(divBlock);
							divBlock.innerHTML = value;
							break;
								
						case 'EMPTYLAYOUT':
							var divBlock = document.createElement('DIV'); 
							divBlock.setAttribute('id', value);
							var divParent = document.getElementById(idLayout);
							divParent.appendChild(divBlock);
							break;

						case 'INLINELAYOUT':
							var name = node.childNodes.item(0).firstChild.nodeValue;
							var html = node.childNodes.item(1).firstChild.nodeValue; 
							divBlock = document.createElement('DIV'); 
							divBlock.setAttribute('id', name);
							divBlock.innerHTML = html;
							divParent = document.getElementById(idLayout);
							divParent.appendChild(divBlock);
							break;

						case 'LAYOUT':
							var name = node.childNodes.item(0).firstChild.nodeValue;
							var element = 1;
							var nextElement = node.childNodes.item(element); 
							
							var classDiv = "";
							var extraParams = "";
							var path="";
							
							while (nextElement != null) {

								switch (nextElement.nodeName) {
								
								case 'CLASS':
									classDiv = nextElement.firstChild.nodeValue;
									element++;
									nextElement = node.childNodes.item(element);
									break;

								case 'PARAMS':
									extraParams = nextElement.firstChild.nodeValue;
									element++;
									nextElement = node.childNodes.item(element);
									break;
									
								case 'PATH':
									path = nextElement.firstChild.nodeValue;
									element++;
									nextElement = node.childNodes.item(element);
									break;
								
								}
							}
							
							var params = postParams + '&' + extraParams;
							if (params == '&') { params = ""; }

							divBlock = document.createElement('DIV'); 
							divBlock.setAttribute('id', name);
							divParent = document.getElementById(idLayout);
							divParent.appendChild(divBlock);
							
							AF_LoadLayout(name, classDiv, getParams, params, path);
							break;
					 }
				}
					
			}
		};

		_request.onreadystatechange = genericGetData;
			
		// create the post parameters chain 
		if (postParams == undefined) {
			postParams="";
		}
		var params = postParams;
		if (params != "") {
			params = params + '&';
		}
		params = params + 'sessionName=' + AF_Var['SessionName'] +'&';
		params = params + 'pathLayout=' + pathLayout +'&';
		params = params + 'classLayout=' + classLayout +'&';
		params = params + 'idLayout=' + idLayout;
		_request.send(params);
	}

};


function AF_Run() {

	AF_LoadLayout(AF_Var['RootLayout'], AF_Var['RootLayout'], AF_Var['Get'], AF_Var['Post'],'');

};
