function TItem(name, value)
{
	 this.name = name;
	 this.value = value;
}

function TParameters()
{
	this.Elements = new Array();
	
	this.Add = function(paramItem)
	{
	this.Elements[this.Elements.length] = paramItem;
	}
	
	this.AddWithValue = function(paramName, paramValue)
	{
	paramItem = new TItem(paramName, paramValue);
	this.Elements[this.Elements.length] = paramItem;
	}
	
	this.Clear = function()
	{
	this.Elements.length = 0;
	}
}

function AjaxStatus()
{
	this.ID = null;
	this.Text = null;
	this.getMessage = function()
		{
		return "Error " + this.ID + ": " + this.Text;
		}
}

function AjaxResponse()
{
	this.Text = null;
	this.XML = null;
	this.Body = null;
	this.URL = null;
	this.JSON = null;
	this.Parameters = new TParameters();
	this.Status = new AjaxStatus();
	this.JSONDecode = function()
	{
		try
		{
			return eval("(" + this.Text + ")");
		}
		catch(e)
		{
			return null;
		}
	}
}

function AjaxRequest()
{
	this.ContentType = "application/x-www-form-urlencoded";
	this.Parameters = new TParameters();
	this.URL = null;
	this.Method = "POST";
	
	this.AjaxObject = function()
	{
		var objetoAjax=false;
		try 
		{
		  /*Para navegadores distintos a internet explorer*/
			objetoAjax = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
		  try 
			{
				   /*Para explorer*/
			  objetoAjax = new ActiveXObject("Microsoft.XMLHTTP");
			}
		  catch (E) 
			{
			  objetoAjax = false;
			}
		}

		if (!objetoAjax && typeof XMLHttpRequest!='undefined') 
		{
		  objetoAjax = new XMLHttpRequest();
		}
		return objetoAjax;
	}
		
	this.stringParams = function()
	{
	var result = "";
	if(this.Parameters.Elements.length > 0)
		{
		for(i = 0; i < this.Parameters.Elements.length; i++)
			{
			result += "&" + this.Parameters.Elements[i].name + "=" + this.Parameters.Elements[i].value;
			}
		return result.substring(1,result.length);
		}
	else return result;
	}
	
	this.execPOSTRequest = function(event)
	{
		Response = new AjaxResponse();
		Args = this.stringParams();
		var_ajax = this.AjaxObject();
		Response.Parameters = this.Parameters;
		Response.URL = this.URL;
		
		if(!var_ajax)
		{
			alert("This browser cannot support Ajax.");
			return false;
		}
		
		var_ajax.open ('POST', this.URL, true);
		var_ajax.onreadystatechange = function() 
		{
		if (var_ajax.readyState==1) 
			{
			event.OnProcess(Response, Args);
			}
		else if (var_ajax.readyState==4)
			{
			Response.Status.ID = var_ajax.status;
			Response.Status.Text = var_ajax.statusText;
			Response.Text = var_ajax.responseText;
			Response.XML = var_ajax.responseXML;
			Response.Body = var_ajax.responseBody;
				if(Response.Status.ID==200)
					{
					event.OnSucceeded(Response, Args);
					}
				else
					{
					event.OnError(Response, Args);
					}
			}
		}
		var_ajax.setRequestHeader("Content-Type", this.ContentType);
		var_ajax.send(Args);
	}
	
	this.execGETRequest = function(event)
	{
		Response = new AjaxResponse();
		Args = this.stringParams();
		var var_ajax = this.AjaxObject();
		Response.Parameters = this.Parameters;
		Response.URL = this.URL;
		var Url = this.URL + "?" + Args;
		
		if(!var_ajax)
		{
			alert("This browser cannot support Ajax.");
			return false;
		}
		
		var_ajax.open ("GET", Url, true);
		var_ajax.onreadystatechange = function() 
		{
		if (var_ajax.readyState==1) 
			{
			event.OnProcess(Response, Args);
			}
		else if (var_ajax.readyState==4)
			{
			Response.Status.ID = var_ajax.status;
			Response.Status.Text = var_ajax.statusText;
			Response.Text = var_ajax.responseText;
			Response.XML = var_ajax.responseXML;
			Response.Body = var_ajax.responseBody;
			Response.JSON_Decode(var_ajax.statusText);
			if(Response.Status.ID==200)
				{
				Response.Text = var_ajax.responseText;
				Response.XML = var_ajax.responseXML;
				Response.Body = var_ajax.responseBody;
				event.OnSucceeded(Response, Args);
				}
			else
				event.OnError(Response, Args);
			}
		}
		var_ajax.setRequestHeader("Content-Type", this.ContentType);
		var_ajax.send(null);
	}
	
	this.Abort = function()
	{
		var_ajax = this.AjaxObject();
		var_ajax.abort();
	}
	
	this.Send = function(event)
	{
		if(this.Method.toUpperCase() == 'GET')
			{
			this.execGETRequest(event); 
			return true;
			}
		else if(this.Method.toUpperCase() == 'POST')
			{
			this.execPOSTRequest(event);
			return true;
			}
		else
			{
			alert("Error: Request method '" + this.Method + "' is unrecognized.");
			return false;
			}
	}
}

function Ajax()
{
	this.Request = new AjaxRequest();
	
	this.OnProcess = function(response, args)
	{
	}
	
	this.OnSucceeded = function(response, args)
	{
	}
	
	this.OnError = function(response, args)
	{
	}
	
	this.Send = function()
	{
	this.Request.Send(this);
	}
}

function $addHandler(obj,evt,fnc,useCapture)
{
    if (!useCapture) useCapture=false;
    if (obj.addEventListener){
        obj.addEventListener(evt,fnc,useCapture);
        return true;
    } else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
    else{
        MyAttachEvent(obj,evt,fnc);
        obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
    }
}

function objCheckParent(target, parent)
{
    while(target.parentNode)
    {
        if(target == parent)
        {
        return false;
        }
    target = target.parentNode
    }
    return true;
}

function getParentByTagName(target, tagName)
{
    while(target.parentNode)
    {
        if(target.tagName == tagName)
        {
        return target;
        }
    target = target.parentNode
    }
    return null;
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function $get(obj)
{
	return document.getElementById(obj);
}

function getTarget(sender)
{
    return (sender && sender.target) || (event && event.srcElement);
}

function getExtension(file)
{
	result = file.split('.');
	return '.' + result[result.length - 1];
}
