/*
    Admin CORE - CMS and API
    Copyright (C) 2006-2007 Hogne Titlestad
    CopyRight (c) 2006-2007 eAdmin
    
    Email: hogga@sub-ether.org
    Telephone: (+0047) 51 69 09 17
*/

var _cajaxlist = new Array ( );

cAjax = function ( pObject )
{
	var obj;
	var user, pass;
	var isopen;
	var lastError;
	var parentObject;
	
	if ( pObject )
		this.parentObject = pObject;
    else this.parentObject = false;  
    this.index = _cajaxlist.length;
    _cajaxlist[ this.index ] = this;    
	
	if ( navigator.appName == "Microsoft Internet Explorer" )
	{
		this.obj = new ActiveXObject ( "Microsoft.XMLHTTP" );
	}
	else
	{
		this.obj = new XMLHttpRequest ( );
	}				
	
	this.lastError = "";
	this.isopen = false;
	var thisObject = this;
	
	this.obj.onreadystatechange = function ( )
	{			
		if ( thisObject.obj.readyState == 4 )
		{				
			if ( thisObject.obj.status == 200 )
			{					
				if ( typeof ( thisObject.onload ) != "undefined" )
					thisObject.onload ( );
				else
					thisObject.lastError = "My onload function doesn't exist...";
				// Clean up data
				var out = new Array ( );
				for ( var a = 0; a < _cajaxlist.length; a++ )
				{
					if ( a != this.index )
					{
						out[ out.length ] = _cajaxlist.length;
						out[ out.length - 1 ].index = out.length - 1;
					}
				}
				_cajaxlist = out;
				delete this;
			}
			else
			{					
				thisObject.lastError = thisObject.obj.status;
			}
			thisObject.isopen = false;
		}			
	}
}

cAjax.prototype.isOpen = function ( )
{
	return this.isopen;
}

cAjax.prototype.setUsername = function ( varUser )
{
	if ( varUser )
		this.user = varUser;
}

cAjax.prototype.getUsername = function ( )
{
	if ( this.user )
		return this.user;
	return false;
}

cAjax.prototype.setPassword = function ( varPass )
{
	if ( varPass )
		this.pass = varPass;
}

cAjax.prototype.getPassword = function ( )
{
	if ( this.pass )
		return this.pass;
	return false;
}	
	
cAjax.prototype.open = function ( meth, url, async )
{
	if ( !async )
		async = true;
    this.method = meth;    
    this.url = url;
	if ( this.user && this.pass )
	{
		this.obj.open ( meth, url, async, this.user, this.pass );			
		this.isopen = true;
		return true;
	}
	else
	{
		this.obj.open ( meth, url, async );
		this.isopen = true;
		return true;
	}
	return false;
}

cAjax.prototype.addVar = function ( key, val )
{
	if ( !this.vars ) this.vars = new Array ( );
	this.vars[ this.vars.length ] = key + '=' + encodeURIComponent ( val );
}

cAjax.prototype.send = function ( vardata )
{	
	if ( !vardata ) vardata = false;
	
	if ( this.method.toLowerCase ( ) == 'post' )
	{
		this.obj.setRequestHeader ( 'Method', 'POST ' + this.url + ' HTTP/1.1' );
		this.obj.setRequestHeader ( 'Content-Type', 'application/x-www-form-urlencoded' ); 
	}
	
	if ( vardata )
		this.obj.send ( vardata );
	else if ( this.vars )
		this.obj.send ( this.vars.join ( '&' ) );
	else
	{
		try
		{
			this.obj.send ( null );
		}
		catch ( e )
		{
			this.obj.send ( NULL );
		}
	}
}

cAjax.prototype.responseText = function ( )
{
	if ( !this.lastError )
		return this.obj.responseText;
	return false;
}

cAjax.prototype.responseXML = function ( )
{
	if ( !this.lastError )
		return this.obj.responseXML;
	return false;
}
	

