
function XMLHttpRequest_Object () {

	var XHR = null, User_Browser = navigator.userAgent.toUpperCase ();

	if ( typeof ( XMLHttpRequest ) === "function" || typeof ( XMLHttpRequest ) === "object" )
		XHR = new XMLHttpRequest ();
	else if ( window.ActiveXObject && User_Browser.indexOf("MSIE 4") < 0 ) {

		if( User_Browser.indexOf("MSIE 5") < 0 )
			XHR = new ActiveXObject("Msxml2.XMLHTTP");
		else
			XHR = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return XHR;
};


////////////////

if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){
	HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode)
	{
		switch (where){
		case 'beforeBegin':
			this.parentNode.insertBefore(parsedNode,this)
			break;
		case 'afterBegin':
			this.insertBefore(parsedNode,this.firstChild);
			break;
		case 'beforeEnd':
			this.appendChild(parsedNode);
			break;
		case 'afterEnd':
			if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
			else this.parentNode.appendChild(parsedNode);
			break;
		}
	}

	HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr)
	{
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
	}


	HTMLElement.prototype.insertAdjacentText = function (where,txtStr)
	{
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	}

  insertHTML = function (thenode, htmlStr) {
    var r = thenode.ownerDocument.createRange();
    r.setStartBefore(thenode);
    var parsedHTML = r.createContextualFragment(htmlStr);
  //remove all children, add the new one.
    for (var i = 0; i < thenode.childNodes.length; i++) {
      thenode.removeChild(thenode.childNodes[i]);
    }
    thenode.appendChild(parsedHTML);
  }

} else {
  insertHTML = function (thenode, htmlStr) {
    thenode.insertAdjacentHTML('beforeEnd', htmlStr);
  //remove all children except for the new one.
    for (var i = 0; i < thenode.childNodes.length-1; i++) {
      thenode.removeChild(thenode.childNodes[i]);
    }
  }
}
//END prototyping stuff for stinking IE compatibility!!!



function Change_Page ( Div_Name, link, data ) {
	
	ajax = XMLHttpRequest_Object ();
		
	var Page = Get_Element_By_ID ( Div_Name );
	
	if ( ajax.readyState === readyState.INACTIVE ) {
		Page.style.visibility='visible';
		Page.style.display='block';
		var Last_Height = Page.offsetHeight;
		var Last_Width = Page.offsetWidth;
		
		
		if ( Last_Height < 50 )
			Last_Height = 50;
			
			
		if ( Page.offsetHeight + Page.offsetWidth > 350 ) 
			Page.innerHTML = "<div style='text-align:center; height: "+
				Last_Height+"px;position:relative;'><img src='/img/ajax_loader/ajax_loader.gif' style='position: absolute; left:"+
				(Last_Width/2-16)+"px; top: "+(Last_Height/2-16)+"px'/></div>";
		else
			Page.innerHTML = "<div style='text-align:center; height: "+
				Last_Height+"px;position:relative;'><img src='/img/ajax_loader/ajax_loader_small.gif' style='position: absolute; left:"+
				(Last_Width/2-8)+"px; top: "+(Last_Height/2-8)+"px'/></p>";
			
		ajax.open ( "post", link, true );
		ajax.setRequestHeader ( "connection", "close" );
		ajax.setRequestHeader ( 'content-type', 'application/x-www-form-urlencoded' );
		ajax.onreadystatechange = function () {
			if ( ajax.readyState === readyState.COMPLETED ) {
				if ( statusText[ajax.status] === "OK" ) {
					Page.innerHTML = ajax.responseText;
				}
				else
					Page.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />" +
											"Errore riscontrato: " + statusText[ajax.status];
			}
		};
		ajax.send( data );
	}
	return !ajax;
}


function Send_Table_Data ( Entry_ID, from, to, Vars, Checked_Name, link ) {

	ajax = XMLHttpRequest_Object ();
					
	if ( ajax.readyState === 0 ) {
		Image_Div = Get_Element_By_ID ( Entry_ID + '_Image' );
		Image_Div.innerHTML = "<img src='/img/ajax_loader/ajax_loader_small.gif' />";
		
		ajax.open ( 'post', link, true );
		ajax.setRequestHeader ( 'content-type', 'application/x-www-form-urlencoded' );
		ajax.setRequestHeader ( 'connection', 'close' );
		ajax.onreadystatechange = function () {
			if ( ajax.readyState === 4 ) {
				if ( statusText[ajax.status] === 'OK' ) {
					response = ajax.responseText;
					if ( response == 1 ) {
						Image_Div.innerHTML = "<img src='/img/icons/ok.png' />";
					}
					else {
						alert ( response );
					}
				}
			}
		};
		
		for ( i = from; i <= to; i++ ) {
			if ( Get_Element_By_ID(Entry_ID+'_'+i).checked == true ) {
				Vars [Checked_Name] = i;
				break;
			}
		}
		
		ajax.send( Concatenate_Vars ( Vars ) );
	}
}



function Concatenate_Vars ( Vars ) {
	conc = new String ( '' );
	
	for ( name in Vars ) {
		conc += (name+'='+Vars[name]+'&');
	}
	return conc;
}


var readyState = {
	INACTIVE: 0,
	INITIALIZED: 1,
	REQUEST: 2,
	RESPONSE: 3,
	COMPLETED: 4
};


var statusText = new Array();
statusText[100] = "Continue";
statusText[101] = "Switching Protocols";
statusText[200] = "OK";
statusText[201] = "Created";
statusText[202] = "Accepted";
statusText[203] = "Non-Authoritative Information";
statusText[204] = "No Content";
statusText[205] = "Reset Content";
statusText[206] = "Partial Content";
statusText[300] = "Multiple Choices";
statusText[301] = "Moved Permanently";
statusText[302] = "Found";
statusText[303] = "See Other";
statusText[304] = "Not Modified";
statusText[305] = "Use Proxy";
statusText[306] = "(unused, but reserved)";
statusText[307] = "Temporary Redirect";
statusText[400] = "Bad Request";
statusText[401] = "Unauthorized";
statusText[402] = "Payment Required";
statusText[403] = "Forbidden";
statusText[404] = "Not Found";
statusText[405] = "Method Not Allowed";
statusText[406] = "Not Acceptable";
statusText[407] = "Proxy Authentication Required";
statusText[408] = "Request Timeout";
statusText[409] = "Conflict";
statusText[410] = "Gone";
statusText[411] = "Length Required";
statusText[412] = "Precondition Failed";
statusText[413] = "Request Entity Too Large";
statusText[414] = "Request-URI Too Long";
statusText[415] = "Unsupported Media Type";
statusText[416] = "Requested Range Not Satisfiable";
statusText[417] = "Expectation Failed";
statusText[500] = "Internal Server Error";
statusText[501] = "Not Implemented";
statusText[502] = "Bad Gateway";
statusText[503] = "Service Unavailable";
statusText[504] = "Gateway Timeout";
statusText[505] = "HTTP Version Not Supported";
statusText[509] = "Bandwidth Limit Exceeded";
