function ajax_create_request_object()
{
	var ro;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer")
	{
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		ro = new XMLHttpRequest();
	}
	return ro;
}

var ajax_http_obj = ajax_create_request_object();

function ajax_send_grequest(p_module_id,p_module_function,p_data_to_send)
{
	//alert('index.php?async_mode=1&'+p_module_id+'='+p_module_function+"&"+p_data_to_send);
	ajax_http_obj.open('get', 'index.php?async_mode=1&'+p_module_id+'='+p_module_function+"&"+p_data_to_send);
	ajax_http_obj.setRequestHeader("connection", "close");
	ajax_http_obj.onreadystatechange = ajax_handle_response;
	ajax_http_obj.send(null);
}

function ajax_send_prequest(p_module_id,p_module_function,p_data_to_send)
{

	ajax_http_obj.open('post', 'index.php?async_mode=1&'+p_module_id+'='+p_module_function);
	ajax_http_obj.setRequestHeader("content-type", "application/x-www-form-urlencoded");
	ajax_http_obj.setRequestHeader("connection", "close");
	ajax_http_obj.onreadystatechange = ajax_handle_response;
	ajax_http_obj.send(p_data_to_send);
}

function getquerystring(formname) {
    var form = document.forms[formname];
	var qstr = "";

    function GetElemValue(name, value) {
        qstr += (qstr.length > 0 ? "&" : "")
            + escape(name).replace(/\+/g, "%2B") + "="
            + escape(value ? value : "").replace(/\+/g, "%2B");
			//+ escape(value ? value : "").replace(/\n/g, "%0D");
    }
	
	var elemArray = form.elements;
    for (var i = 0; i < elemArray.length; i++) {
        var element = elemArray[i];
        //alert (element.type);
        if (element.type!="")
        {
        var elemType = element.type;
        var elemName = element.name;
        if (elemName) {
            if (elemType == "text"
                    || elemType == "textarea"
                    || elemType == "password"
					|| elemType == "button"
					|| elemType == "reset"
					|| elemType == "submit"
					|| elemType == "file"
					|| elemType == "image"
                    || elemType == "hidden")
                GetElemValue(elemName, element.value);
            else if (elemType == "checkbox" && element.checked)
                GetElemValue(elemName, 
                    element.value ? element.value : "On");
            else if (elemType == "radio" && element.checked)
                GetElemValue(elemName, element.value);
            else if (elemType.indexOf("select") != -1)
                for (var j = 0; j < element.options.length; j++) {
                    var option = element.options[j];
                    if (option.selected)
                        GetElemValue(elemName,
                            option.value ? option.value : option.text);
                }
        }
        }
    }
    return qstr;
}


function ajax_post_form(p_module_id,p_module_function,p_form_name,p_data_to_send)
{
	var l_form=document.getElementById(p_form_name);
	var l_element;
	var l_string="";
	

	
	//alert ("test");

	//alert (p_module_id+p_module_function+p_form_name+p_data_to_send);
	/*
	for (var i=0;i<l_form.length;i++)
	{
		l_element=l_form.elements[i];
		//Aggiungere altri tipi quando necessario
		alert ("test"+l_element.type);
		switch(l_element.type)
		{
			case "submit":
				//if (l_element.pressed==true)
				{
					if (l_string!="") l_string=l_string+"&";
						l_string=l_string+l_element.id+"="+l_element.value;
				}
			break;
			case "text": case "password": case "select-one":
					if (l_string!="") l_string=l_string+"&";
						l_string=l_string+l_element.id+"="+l_element.value;
			break;
			case "select-multiple":
				for (var j=0;j<l_element.length;j++)
					if (l_element[j].selected==true)
					{
						if (l_string!="") l_string=l_string+"&";
						l_string=l_string+l_element.id+"[]="+l_element[j].value;
					}	
			break;
		}
		
	}
	*/
	l_string=getquerystring(p_form_name);
	
	//alert (l_string);
	ajax_http_obj.open('post', 'index.php?async_mode=1&'+p_module_id+'='+p_module_function+'&'+p_data_to_send);
	ajax_http_obj.setRequestHeader("content-type", "application/x-www-form-urlencoded");
	ajax_http_obj.setRequestHeader("connection", "close");
	ajax_http_obj.onreadystatechange = ajax_handle_response;
	ajax_http_obj.send(l_string);
}

function ajax_show_wait()
{
	var l_dom_control=document.getElementById("msgbox");
	l_dom_control.innerHTML="<b>Please wait</b>";
	
}

function ajax_handle_response()
{
	
	if(ajax_http_obj.readyState == 4)
	{
		
		if (ajax_http_obj.responseText!="")
		{
			//document.getElementById(ajax_quadrant).innerHTML = ajax_http_obj.responseText;
			
			var response = ajax_http_obj.responseText;

			//alert (response);
			i=0;
			l_mode=0;
			l_next_mode=0;
			l_start=0;
			l_end=0;
			l_timeout=0;
			l_add=0;
			do
			{
				i=response.indexOf('ajax_quadrant',l_start);
				j=response.indexOf('ajax_control',l_start);
				k=response.indexOf('ajax_content',l_start);
				l=response.indexOf('ajax_remove',l_start);
				l_next_mode=-1;
				if      (i!=-1 && (i<j || j==-1) && (i<k || k==-1) && (i<l || l==-1)) { l_end=i; l_next_mode=1; l_add=13;}
				else if (j!=-1 && (j<i || i==-1) && (j<k || k==-1) && (j<l || l==-1)) { l_end=j; l_next_mode=2; l_add=12;}
				else if (k!=-1 && (k<j || j==-1) && (k<i || i==-1) && (k<l || l==-1)) { l_end=k; l_next_mode=3; l_add=12;}
				else if (l!=-1 && (l<j || j==-1) && (l<i || i==-1) && (l<k || k==-1)) { l_end=l; l_next_mode=4; l_add=11;}
				else 
					{
					l_end=response.length;
					//alert("mode:"+l_mode);
				}
				//alert ("MODE:"+l_mode+" i:"+i+" j:"+j+" k:"+k+" end:"+l_end);
				switch(l_mode)
				{

					case -1:
						l_timeout=100;
					break;
					case 1://Acquisisco il quadrante
						l_quadrant=response.substring(l_start,l_end);
					break;
					case 2://Acquisisco il controllo
						l_control=response.substring(l_start,l_end);
					break;
					case 3://Acquisisco il contenuto
						l_content=response.substring(l_start,l_end);

						//alert ("QUADRANTE: "+l_quadrant+" CONTROLLO: "+l_control+" CONTENUTO: "+l_content);

					   var l_dom_control=document.getElementById(l_control);
					   if (l_dom_control) //Replacing an existing element
					   {
					    	l_remove_start=l_content.indexOf(">")+1;
					    	l_remove_end=l_content.lastIndexOf("<");
					    	l_dom_control.innerHTML=l_content.substring(l_remove_start,l_remove_end);
						}
						else //Creating a new element
						{ 							
						   var l_dom_quadrant=document.getElementById(l_quadrant);
						   if (!l_dom_quadrant)
						   {
						    	var l_dom_quadrant = document.createElement('div');
								l_dom_quadrant.setAttribute("id",l_quadrant);
								document.body.appendChild(l_dom_quadrant);
							}	
							
							var l_new_dom_control=document.createElement("div");
							l_new_dom_control.setAttribute("id",l_control);
							l_new_dom_control.innerHTML=l_content;							
							l_dom_quadrant.appendChild(l_new_dom_control);
						}
						
					break;
					case 4://Removing an element
						l_element=response.substring(l_start,l_end);
						var l_dom_control=document.getElementById(l_element);
						if (l_dom_control)
					   {
					   	l_dom_control.parentNode.removeChild(l_dom_control);
					   }
					break;					

				}		

				l_start=l_end+l_add;
				l_mode=l_next_mode;
				l_timeout++;	
			} while (l_end<response.length && l_timeout<100)
			
			//alert(response);
			/*if(response.indexOf('ajax_quadrant') != -1)
			{
				quadrants = response.split('ajax_quadrant');
				
				
				
				for (i in quadrants)
				{
					if (quadrants[i]!="")
					{
						l_quadrant_content=quadrants[i].split('ajax_quadrant_end');
						l_quadrant_id=l_quadrant_content[0];
						controls = l_quadrant_content[1].split('ajax_control_start');
						
						for (i in controls)
						{
							if (controls[i]!="")
							{
								l_control_content=controls[i].split('ajax_control_end');
								l_control_id=l_control_content[0];
								
								content = controls[i].split('ajax_content');
								
								alert(content2[0]);
								alert(content2[1]);
								//alert ("test");
								//alert (document.getElementById(content2[0]).innerHTML);
								//document.getElementById(content2[0]).outerHTML = content2[1];
								
								//Al posto di outerhtml utilizzo l'alternativa DOM+innerhtml poichè con firefox e opera non funziona
							    var oldElement=document.getElementById(content2[0])
							    var newElement=document.createElement(content2[0]);
							    newElement.innerHTML=content2[1];
							    oldElement.parentNode.replaceChild(newElement,oldElement);
					   	}
						}
						
					}
					//document.getElementById(update[0]).innerHTML = update[1];
				}
			}				
		
		*/
		}

	}
}

//For a strange reason if I call this function:"ajax_remove_element" it won't work!
function ajax_delete_element(p_element_id)
{
	var l_dom_control=document.getElementById(p_element_id);
	if (l_dom_control)
   {
   	l_dom_control.parentNode.removeChild(l_dom_control);
   }
}

