
/**
  *  XMLHttpRequest object creator from xmlhttp.js
  *
  *  Author:	José Jeria
  *  Version:	1.0
  *  Date:	13-06-05
  */

// XMLHttpRequest object creator
function createXMLHTTP()
{
	if(window.XMLHttpRequest) return new XMLHttpRequest();
	
	var aProgID = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
	
	for(var i=0, len=aProgID.length; i<len; i++)
	{
		try
		{
			var oReq = new ActiveXObject(aProgID[i]);
			return oReq;
		}
		catch(oError){}
	}
	
	return null;
}

// HttpClient constructor
var HttpClient = new Object();

HttpClient.get = function(file, fCallback)
{
	try
	{
		var oReq = new createXMLHTTP();
		
		oReq.onreadystatechange = function()
		{
			if(oReq.readyState == 4)
			{
				switch(oReq.status)
				{
					case 404:
						alert("Fatal error:\nFile \"" + file + "\" is missing on server. Cannot proceed.");
						break;
					case 500:
						alert("Fatal error:\nInternal server error. Cannot proceed.");
						break;
					case 0:
						alert("Fatal error:\nHTTP request cannot be done locally. It must be run on a server.");
						break;
					default:
						fCallback(oReq.responseText);
				}
			}
		}
		oReq.open("GET", file, true);
		oReq.send(null);
	}
	catch(oError)
	{
		alert("You browser seems to be outdated, please try again with one of the following\n\n- Mozilla Firefox\n- Opera 8+\n- Safari 1.2+\n- Internet Explorer 5+");
	}
}

/**
  *  Error Display
  *
  *  Author:	José Jeria
  */

// Displays error with a fade effect
function ErrorDisplay(sId)
{
	this.errorNode = document.getElementById(sId);
	this.timer = null;
	this.errorMessage = "";
	this.error = false;

	this.hideError();
}

ErrorDisplay.prototype.showError = function(sError)
{
	this.errorNode.innerHTML = sError;
	this.error = true;

	this.fadeIn();
}

ErrorDisplay.prototype.fadeIn = function()
{
	// For browsers that don't support opacity
	this.errorNode.style.visibility = "visible";
	
	var oThis = this;
	var fOpacity = parseFloat(this.errorNode.style.opacity);
	
	if(fOpacity < 1)
	{
		this.setOpacity(fOpacity + 0.1);
		this.timer = window.setTimeout(function(){ oThis.fadeIn() },60);
	}
	else
	{
		window.clearTimeout(this.timer);
		this.timer = null;
	}
}

ErrorDisplay.prototype.setOpacity = function(fOpacity)
{		
	if( !(this.errorNode == null)){
		
		this.errorNode.style.opacity = fOpacity;
		this.errorNode.style.MozOpacity = fOpacity;
		this.errorNode.style.KhtmlOpacity = fOpacity;
		this.errorNode.style.filter= "alpha(opacity=" + (fOpacity * 100) + ")";
	}
}

ErrorDisplay.prototype.hideError = function()
{
	this.setOpacity(0);
	this.error = false;
	
	if(this.timer != null)
	{
		window.clearTimeout(this.timer);
	}
	
	if( !(this.errorNode == null)){	
		// For browsers that don't support opacity
		this.errorNode.style.visibility = "hidden";
	}
}


