﻿/*

TALK - Tiny Ajax Loading Kit

author	: #Matt

*/

var XMLHttpObject = null;

var user_state_receiver = null;
var user_response_handler = null;
var user_response_type = null;
var user_method = null

/*
	Function TALK
	
	url					: url to server script
	params				: params to send to script
	method				: 'GET' or 'POST' (default : 'POST')
	return_type			: 'Text' or 'XML' (default : 'Text')
	state_receiver		: DOM element to display TALK state
	response_handler	: function to send result to
*/

//--------------------------------------------------------------------------------
function TALK(url, params, method, response_type, state_receiver, response_handler)
//--------------------------------------------------------------------------------
{
	user_state_receiver = state_receiver;
	user_response_handler = response_handler;
	user_response_type = response_type == 'Text' || response_type == 'XML' ? response_type : 'Text';
	user_method = method == 'GET' || method == 'POST' ? method : 'POST';

	XMLHttpObject = getXMLHttpObject();

	if (XMLHttpObject != null)
	{
	 	try
		{
		 	XMLHttpObject.open(user_method, url, true);
			XMLHttpObject.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		 	XMLHttpObject.onreadystatechange = onXMLHttpObjectChange;
		 	XMLHttpObject.send(params);
		}
		catch(e)
		{
			showState('Request failed.');
		}
	}
	else
		showState('Connection failed.');
}

//--------------------------------------------------------------------------------
function getXMLHttpObject()
//--------------------------------------------------------------------------------
{
	return XMLHttpObject == null
		? (window.XMLHttpRequest
		   	? new XMLHttpRequest() 
			: new ActiveXObject('Microsoft.XMLHTTP'))
		: XMLHttpObject;
}

//--------------------------------------------------------------------------------
function onXMLHttpObjectChange()
//--------------------------------------------------------------------------------
{
	switch (XMLHttpObject.readyState)
	{
		case 0 : 	showState('Initialisation...'); break;
		case 1 : 	showState('Connection établie...'); break;
		case 2 : 	showState('Réception de la requête...'); break;
		case 3 : 	showState('Chargement du contenu...'); break;
		case 4 : 	switch (XMLHttpObject.status)
					{
						case 200 :	
									showState('Chargement terminé.');
									if (user_response_handler)
									//	eval(user_response_handler + '(\'' + escape(eval('XMLHttpObject.response' + user_response_type)) + '\');');
										document.getElementById(user_state_receiver).innerHTML = XMLHttpObject.responseText;
									break;
						case 404 :	showState('La page demandée n\'existe pas.'); break;
						default	 :	showState('Erreur de chargement.'); break;
					}
	}
}

//--------------------------------------------------------------------------------
function showState(state)
//--------------------------------------------------------------------------------
{
	if (user_state_receiver != null)
		document.getElementById(user_state_receiver).innerHTML = '<span class="xhr_response">' + state + '</span>';
}
