/******************************************************************************
  Constants
 ******************************************************************************/

var TYPE_ACTIVATION_STATE_NOT_ACTIVATED = 'N';
var TYPE_ACTIVATION_STATE_ACTIVATED     = 'A';

/******************************************************************************
  Definitions
 ******************************************************************************/

/******************************************************************************
  TYPE_ForwardCodeList c'tor

    Exceptions:
        TYPE_EX_FailedParsingForwardCodeList
 ******************************************************************************/
function TYPE_ForwardCodeList( xmlDOMElement )
{
    this.m_forwardCodeList = new Array( );

    this.fromXML( xmlDOMElement );
}
TYPE_ForwardCodeList.prototype =
{

    asXML:function( )
    {
        var content = '';

        for ( var i = 0; i < this.m_forwardCodeList.length; i++ )
        {
            content = content + this.m_forwardCodeList[i].asXML( );
        }

        // Get as XML but do not escape the content string
        return UTILS_getAsXmlElementString( "fwdCodes", content, true );
    },
    fromXML:function( xmlDOMElement )
    {
        try
        {
            if ( xmlDOMElement.nodeName == 'fwdCodes' )
            {
                if ( ! xmlDOMElement.hasChildNodes( ) )
                {
                    return;
                }

                var fwdCodeGroups = xmlDOMElement.getElementsByTagName( 'fwdCode' );

                for ( var codeGroupIndex = 0; codeGroupIndex < fwdCodeGroups.length; codeGroupIndex++ )
                {
                    this.m_forwardCodeList[ codeGroupIndex ] = new TYPE_ForwardCode( fwdCodeGroups.item( codeGroupIndex ) );
                }
            }
        }
        catch ( e )
        {
            throw new TYPE_EX_FailedParsingForwardCodeList( e );
        }
    }
}


/******************************************************************************
  TYPE_ForwardCode c'tor

    Exceptions:
        TYPE_EX_FailedParsingForwardCode
 ******************************************************************************/
function TYPE_ForwardCode( xmlDOMElement )
{
    try
    {
        this.m_id       = 0;
        this.m_actStr   = '';
        this.m_deactStr = '';

        XML_InitializeMembersFromXMLElement( xmlDOMElement, this, "fwdCode" );

        this.m_id = parseInt( this.m_id );
    }
    catch ( e )
    {
        throw new TYPE_EX_FailedParsingForwardCode( e );
    }
}
TYPE_ForwardCode.prototype =
{
    asXML:function() { return UTILS.propertiesAsXml( this, ['id', 'actStr', 'deactStr'], 'fwdCode' ); }
}


/******************************************************************************
  TYPE_CarrierList c'tor

    Exceptions:
        TYPE_EX_FailedParsingCarrierList
 ******************************************************************************/
function TYPE_CarrierList( xmlDOMElement )
{
    this.m_carriers  = new Array( );

    this.fromXML( xmlDOMElement );
}
TYPE_CarrierList.prototype =
{
    asXML:function( )
    {
        var content = '';

        for ( var i = 0; i < this.m_carriers.length; i++ )
        {
            content = content + this.m_carriers[i].asXML( );
        }

        // Get as XML but do not escape the content string
        return UTILS_getAsXmlElementString( "carriers", content, true );
    },
    fromXML:function( xmlDOMElement )
    {
        try
        {
            if ( xmlDOMElement.nodeName == 'carriers' )
            {
                if ( ! xmlDOMElement.hasChildNodes( ) )
                {
                    return;
                }

                var carriers = xmlDOMElement.getElementsByTagName( 'carrier' );

                for ( var carrierIndex = 0; carrierIndex < carriers.length; carrierIndex++ )
                {
                    this.m_carriers[ carrierIndex ] = new TYPE_Carrier( carriers.item( carrierIndex ) );
                }
            }
        }
        catch ( e )
        {
            throw new TYPE_EX_FailedParsingCarrierList( e );
        }
    }
}


/******************************************************************************
  TYPE_Carrier c'tor

    Exceptions:
        TYPE_EX_FailedParsingCarrier
 ******************************************************************************/
function TYPE_Carrier( xmlDOMElement )
{
    try
    {
        this.m_id          = 0;
        this.m_name        = '';
        this.m_fwdCodeId   = 0;
        this.m_shortlist   = false;

        XML_InitializeMembersFromXMLElement( xmlDOMElement, this, "carrier" );

        // make typed values their type
        this.m_id          = parseInt( this.m_id );
        this.m_fwdCodeId   = parseInt( this.m_fwdCodeId );
        this.m_shortlist   = (this.m_shortlist == '1' || this.m_shortlist == 'true'); // '1' from server, 'true' for UT's since it means changing only this line of code
    }
    catch ( e )
    {
        throw new TYPE_EX_FailedParsingCarrier( e );
    }
}
TYPE_Carrier.prototype =
{
    asXML:function(){ return UTILS.propertiesAsXml( this, 
						    [ "id", "name", "fwdCodeId", "shortlist" ], 
						    "carrier" ); }
}
