function Status( oXML )
{
	if ( typeof oXML != "undefined" )
		this.init( oXML );
}

Status.prototype.init = function( oXML )
{
	this.parseStatusResult( oXML.getData() );
};

Status.prototype.getNodeValue = function( oNode )
{
	if ( oNode )
	{
		//   textnode               cdata
		if ( oNode.nodeType == 3 || oNode.nodeType == 4 )
			return oNode.nodeValue;
		return arguments.callee( oNode.firstChild );
	}
	return false;
};

Status.prototype.getSiblingByName = function ( oNode, sName )
{
	if ( oNode )
	{
		while ( ( oNode.nodeType != 1 || ( oNode.nodeName && oNode.nodeName.toLowerCase() != sName.toLowerCase() ) ) && oNode.nextSibling )
			oNode = oNode.nextSibling;

		if ( oNode.nodeType == 1 && ( oNode.nodeName && oNode.nodeName.toLowerCase() == sName.toLowerCase() ) )
			return oNode;
	}
	return false;
};

Status.prototype.parseStatusResult = function( oDataXML )
{
	if ( oDataXML )
	{
		var oReply = this.getSiblingByName( oDataXML.firstChild, "reply" );
		if ( oReply )
		{
			var sStatus = "error";
			if ( typeof oReply.attributes[ 0 ] != "undefined" && oReply.attributes[ 0 ].name.toLowerCase() == "status" )
				sStatus = oReply.attributes[ 0 ].value;
			this.success = sStatus == "OK";
			this.status  = sStatus;
			this.message = unescape( this.trim( this.getNodeValue( this.getSiblingByName( oReply.firstChild, "message" ) ) ) );
			this.content = this.xmlToObject( this.getSiblingByName( oReply.firstChild, "content" ) );
			return true;
		}
	}	
	return false;
};

Status.prototype.trim = function( s )
{
	if ( typeof s == "string" )
	{
		for ( var i = 0; i < s.length; ++i )
			if ( s.charCodeAt( i ) > 32 )
				break;
		for ( var j = s.length - 1; j >= 0 ; --j )
			if ( s.charCodeAt( j ) > 32 )
				break;
		return s.substr( i, ( j + 1 ) - i );
	}
	return s;
};

Status.prototype.xmlToObject = function( oXML )
{
	var oReturn = false;
	if ( oXML.childNodes && oXML.childNodes.length > 0 )
	{
		oReturn = new Object();
		for ( var i = 0; i < oXML.childNodes.length; ++i )
			if ( oXML.childNodes[ i ].nodeType == 3 || oXML.childNodes[ i ].nodeType == 4 )
			{
				return unescape( oXML.childNodes[ i ].nodeValue );
			}
			else
			{
				oReturn[ oXML.childNodes[ i ].nodeName ] = arguments.callee( oXML.childNodes[ i ] );
				if ( typeof oReturn.child == "undefined" )
					oReturn.child = new Array();
				oReturn.child[ oReturn.child.length ] = oReturn[ oXML.childNodes[ i ].nodeName ];
			}
	}
	return oReturn;
};
