/*
* SimpleAJAX
*
* Klasi sem útfærir AJAX virkni, með því að búa til tilvik af
* Microsoft.XMLHTTP eða XMLHttpRequest eftir því hvaða vafri er notaður.
* Inniheldur föll til að gera GET og POST köll á vefslóð og skilar gögnum
* sem fengust úr HTTP-kallinu.
*
* Skrifað í miklum fljótheitum þann 24. nóvember - engin ábyrgð tekin á villum
* sem kunna að leynast í kóðanum.  Lagfæringar/ábendingar má senda á (hagur hjá mmedia.is)
*
* Dæmi um notkun:
*
*    var url = '/file.aspx?get=whatever';
*    var Ajax = new SimpleAJAX(url); 
*    if (Ajax.get())
*    {
*       alert(Ajax.getResponse());
*    }
*    else
*    {
*       alert('Villa kom upp við að sækja síðu!\n\nVilluboð: ' + Ajax.getError());
*    }
*
* Öllum er heimil notkun á þessum klasa.
* Haukur H. Þórsson, 24.11.2005
*/

function SimpleAJAX(url)
{
	var _url = url;
	var _xmlhttp;
	var _responseText = "";
	var _lastError = "";
	var _postParams = "";
	
	/* Reynum að búa til tilvik af XMLHTTP hlutnum ... */
	try
	{
		/* Reynum að búa hann til eins og IE gerir ... */
		_xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
	} 
	catch (e)
	{
		/* Það hefur ekki gengið upp ... */
		try
		{
			/* ... Þá reynum við að gera það með annari IE aðferð ... */
			_xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (E)
		{
			/* Ekki gekk það heldur ... :S */
			_xmlhttp = false;
		}
	}
	
	/* Ef ekki hefur gengið að smíða hlutinn, þá reynum við það eins og "alvöru" vafrar gera! */
	if (!_xmlhttp && typeof XMLHttpRequest!='undefined') {
		_xmlhttp = new XMLHttpRequest();
	}
	
	/* Ef enn hefur ekki tekist að búa til hlutinn, þá erum við í vondum málum! */
	if (_xmlhttp == null)
	{
		alert('Ekki tókst að búa til XMLHttpRequest hlut!');
	}
	
	/* Þetta public fall gerir GET request ... */
	this.get = function()
	{
		return makeRequest('GET');
	}
	
	/* Þetta public fall gerir POST request ... */
	this.post = function()
	{
		return makeRequest('POST');
	}

	/* Þetta public fall er notað til að stilla hvaða url
	   Skal nota, ef það hefur ekki verið gefið upp í constructor ... */
	this.setUrl = function(url)
	{
		_url = url;
	}

	/* Þetta public fall er notað til að stilla hvaða URL parametra
	   skal senda með POST kallinu.  Þeir eru einfaldlega á sama formi
	   og query-string breytur, þ.e param1=value1&param2=value2 o.sv.frv. */
	this.setParams = function(params)
	{
		_postParams = params;
	}
	
	/* Þetta public fall skilar til baka gögnum úr síðasta HTTP kalli ... */
	this.getResponse = function()
	{
		return _responseText;
	}
	
	/* Þetta public fall skilar til baka síðustu villuskilaboðum ... */
	this.getError = function()
	{
		return _lastError;
	}
	
	/* Þetta private fall framkvæmir sjálf HTTP köllin.  Ekki er hægt
	   að kalla í það beint, notast skal við get() og post() */
	function makeRequest(method)
	{	
		var success = true;
		try
		{
			if (method == 'GET')
			{
				_xmlhttp.open('GET', _url,false);
				_xmlhttp.send(null);
			}
			else
			{
				_xmlhttp.open('POST', _url,false);
				_xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				_xmlhttp.send(_postParams);
			}
		}
		catch (E)
		{
			success = false;
			_lastError = E.message;
		}
		_responseText = _xmlhttp.responseText;
		
		return success;
	}
}
