/*
 * MOD ax_call.js
 * Control y ejecutor de llamadas AJAX
 * @version 1.0a 12.2006
 * @author Ramon Aguado 
 */
    var http_request = false;
    var posts = '';   

	function ajax_error (text) {
		//div = document.getElementById('ajax_info');
		//div.innerHTML = '<blink><b>'+text+'</b></blink>';
	}
	function ajax_wait () {
		//div = document.getElementById('ajax_info');
		//div.innerHTML = '<blink><font size="1">WAIT...</font></b></blink>';
		//div.innerHTML = '<img src=classes/exec/html/images/ajax-loader.gif>';
	}
	function ajax_end () {
		//div = document.getElementById('ajax_info');
		//div.innerHTML = '<font size="1"><b>Ok!</b></font>';
		//div.innerHTML = '';
	}
   // STD Request 

	function createAjaxObj(){
		var httprequest=false;
		if (window.XMLHttpRequest){ // if Mozilla, Safari etc
			httprequest=new XMLHttpRequest();
			if (httprequest.overrideMimeType) httprequest.overrideMimeType('text/xml');
		}else if (window.ActiveXObject){ // if IE
				try {
						httprequest=new ActiveXObject("Msxml2.XMLHTTP");
					} 
				catch (e){
					try{
							httprequest=new ActiveXObject("Microsoft.XMLHTTP");
						}
					catch (e){}
				}
		}
		return httprequest;
	}

   function makePOSTRequest(url, parameters, id_dest) {
      http_request = createAjaxObj();
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
	  //set_request_func(id_dest);	
      http_request.open('POST',url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
      // ull test ?? abans fora de la funci? async?? 
      http_request.onreadystatechange = function(){ 
	         if ((http_request.status == 200) || (http_request.status == 0)) {
    	        result = http_request.responseText;
		        if (result.substring(0,7) == '**ERR**') {
    	    	    alert(result);
    	    	}else{
    	    		if(result != '') document.getElementById(id_dest).innerHTML = result;
    	    	}
	         } else {
    	        	alert(http_request.status + '-AJAX REQUEST PROBLEM.');
        	 }
        	 //ajax_end();
	    } 
   }
   // Montaje de la llamada a ajax
   // id_dest -> id elemento contenedor destino
   // process -> nombre del proceso PHP ? cualquier otro a ejecutar
   // params  -> parametros para el proceso a ejecutar (pasados mediante su id)
   // los parametros pueden ser elementos individuales o bloques, SearchChilds desgranar? 
   // los bloques hasta determinar todos los elementos individuales y componer la poststr
   function ax_call(){
   		var argv    = ax_call.arguments;
   		var argc    = argv.length;
		var id_dest = argv[0];
  		var process = argv[1];
 		//ajax_wait();
  		
  		// crear posible envio de un tag entero p.ej FORM
 	    var poststr = '';
 	    if ( argc > 2){
	   		for (var numvar = 2; numvar <= argc-1; numvar++){
   				posts = '';
 	  			var obj = document.getElementById(argv[numvar]);
				search_Childs(obj);
				//alert('posts:'+posts);
  				if(poststr == ''){
					poststr = posts;
				}else{
					poststr = poststr + '&' + posts;
  				}
		  	}
		}
		//alert('poststr:'+poststr);
      	makePOSTRequest(process , poststr, id_dest);
   }

   function search_Childs(node){
	    if(node.childNodes.length > 1){
			for (var i=0;i<node.childNodes.length;i++){
				if(node.childNodes[i].nodeName == 'TABLE' || node.childNodes[i].nodeName == 'table'){
					childs_InTable(node.childNodes[i]);
				}else{
					if(node.childNodes[i].nodeName == 'SELECT' || node.childNodes[i].nodeName == 'select'){
						childs_InSelect(node.childNodes[i]);
					}else{
						search_Childs(node.childNodes[i]);
					}
				}
			}
		}else{
  			//alert( node.name + '.=' + node.value );
			if(node.nodeType == 1 && node.name && node.value && node.id != '' ){
				add_posts(node.name,node.value);
	   		}
		}
   }   
   function childs_InTable(theTable){
   		var tdref=new Array(); 
		for( var z = 0; z < theTable.tBodies.length; z++ ) {
			for( var x = 0; x < theTable.tBodies[z].rows.length; x++ ) {
				var k = theTable.tBodies[z].rows[x];
				for (var i=0; i < theTable.tBodies[z].rows[x].cells.length; i++){
					var cellNode = theTable.tBodies[z].rows[x].cells[i].childNodes[0];
					if(cellNode.nodeType == 1 && cellNode.name && cellNode.value && cellNode.id != '' ){
						add_posts(cellNode.name,cellNode.value);
			   		}
				}
			}
		}
	}
   function childs_InSelect(theSelect){
   		selected = new Array();
		for (var i = 0; i < theSelect.length; i++){
		   	if (theSelect[i].selected){
			    //selected.push(theSelect[i].value);   
				add_posts(theSelect.name,theSelect[i].value);
			}
		}
	}

   function add_posts(name,value){
		if(posts == ''){
			posts = encodeURI( name +'='+ value );
		}else{
			posts = posts + '&' + encodeURI( name + '=' + value );
		}
   }