// Global message 
var showUserIpMessage;

function showUserIP_onChange(){
  // The global message have to be used so we can use it to
  // get data back on the onChange listener 
  // Message consumer is left blank because
  // we don't need to apply result back to pag
  showUserIpMessage = Clean.createSimpleMessage("demos/events/showIP.php", "", null);
  // Here we override the default onChange
  showUserIpMessage.onChange = evalScript_onChange;
  // The result will not be cached !
  showUserIpMessage.cache = false;
  // We store the id
  showUserIpMessage.id = Clean.doGet(showUserIpMessage);  
} 	

function evalScript_onChange() {
  // We need to recover message wrapper from the queue
  // using the showUserIpMessage.id we stored
  wrapper = MessageQueue.messages[showUserIpMessage.id]; 
  if(!wrapper) return;
  try{
	 // We need to ensure the readyState and status
	if(wrapper.request.readyState == 4) 	  
	  if(wrapper.request.status == 200)
		  eval(wrapper.request.responseText);
  } catch(e){ alert("Error: " + e); }  	
}

function showUserIP_onComplete(){
  // We use a local message (more simple) 
  // Message consumer is left blank because
  // we don't need to apply result back to page 
  message = Clean.createSimpleMessage("demos/events/showIP.php", "", null);
  // Here we define the onComplete listener 
  // better than override onChange
  message.onComplete = evalScript_onComplete;
  // The result will not be cached !
  message.cache = false;
  // I don't care about the message id
  Clean.doGet(message);  
} 	

function evalScript_onComplete(xhr) {
  // We receive a XMLHttpRequest ready to use. 
  // The chances to make mistakes are reduced.
  try{
    if(!xhr) return;
    eval(xhr.responseText);
  } catch(e){ alert("Error: " + e); }  	
}