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 = new Object();
    if ( oXML.childNodes && oXML.childNodes.length > 0 )
        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 ] );
    return oReturn;
};

