###############################################################################
# DTD.py
#
# WBXML document type description for Airsync. The reverse mapping is
# generated at initialization time and the actual DTD fed to the codecs is
# a tuple of the (forward,reverse) mappings. Only the forward mapping need
# be explicitly listed
#
###############################################################################


AirsyncDTD_Forward = {

    'codes' : {
        0 : {
            0x05 : 'Sync',
            0x06 : 'Responses',
            0x07 : 'Add',
            0x08 : 'Change',
            0x09 : 'Delete',
            0x0a : 'Fetch',
            0x0b : 'SyncKey',
            0x0c : 'ClientId',
            0x0d : 'ServerId',
            0x0e : 'Status',
            0x0f : 'Collection',
            0x10 : 'Class',
            0x11 : 'Version',
            0x12 : 'CollectionId',
            0x13 : 'GetChanges',
            0x14 : 'MoreAvailable',
            0x15 : 'WindowSize',
            0x16 : 'Commands',
            0x17 : 'Options',
            0x18 : 'FilterType',
            0x19 : 'Truncation',
            0x1a : 'RtfTruncation',
            0x1b : 'Conflict',
            0x1c : 'Collections',
            0x1d : 'ApplicationData',
            0x1e : 'DeletesAsMoves',
            0x1f : 'NotifyGUID',
            0x20 : 'Supported',
            0x21 : 'SoftDelete',
            0x22 : 'MIMESupport',
            0x23 : 'MIMETruncation',
        }, 1 : {
            0x05 : 'Anniversary',
            0x06 : 'AssistantName',
            0x07 : 'AssistnamePhoneNumber',
            0x08 : 'Birthday',
            0x09 : 'Body',
            0x0a : 'BodySize',
            0x0b : 'BodyTruncated',
            0x0c : 'Business2PhoneNumber',
            0x0d : 'BusinessCity',
            0x0e : 'BusinessCountry',
            0x0f : 'BusinessPostalCode',
            0x10 : 'BusinessState',
            0x11 : 'BusinessStreet',
            0x12 : 'BusinessFaxNumber',
            0x13 : 'BusinessPhoneNumber',
            0x14 : 'CarPhoneNumber',
            0x15 : 'Categories',
            0x16 : 'Category',
            0x17 : 'Children',
            0x18 : 'Child',
            0x19 : 'CompanyName',
            0x1a : 'Department',
            0x1b : 'Email1Address',
            0x1c : 'Email2Address',
            0x1d : 'Email3Address',
            0x1e : 'FileAs',
            0x1f : 'FirstName',
            0x20 : 'Home2PhoneNumber',
            0x21 : 'HomeCity',
            0x22 : 'HomeCountry',
            0x23 : 'HomePostalCode',
            0x24 : 'HomeState',
            0x25 : 'HomeStreet',
            0x26 : 'HomeFaxNumber',
            0x27 : 'HomePhoneNumber',
            0x28 : 'JobTitle',
            0x29 : 'LastName',
            0x2a : 'MiddleName',
            0x2b : 'MobilePhoneNumber',
            0x2c : 'OfficeLocation',
            0x2d : 'OtherCity',
            0x2e : 'OtherCountry',
            0x2f : 'OtherPostalCode',
            0x30 : 'OtherState',
            0x31 : 'OtherStreet',
            0x32 : 'PagerNumber',
            0x33 : 'RadioPhoneNumber',
            0x34 : 'Spouse',
            0x35 : 'Suffix',
            0x36 : 'Title',
            0x37 : 'WebPage',
            0x38 : 'YomiCompanyName',
            0x39 : 'YomiFirstName',
            0x3a : 'YomiLastName',
            0x3b : 'Rtf',
            0x3c : 'Picture',
        }, 2 : {
            0x05 : 'Attachment',
            0x06 : 'Attachments',
            0x07 : 'AttName',
            0x08 : 'AttSize',
            0x09 : 'AttOid',
            0x0a : 'AttMethod',
            0x0b : 'AttRemoved',
            0x0c : 'Body',
            0x0d : 'BodySize',
            0x0e : 'BodyTruncated',
            0x0f : 'DateReceived', 
            0x10 : 'DisplayName',
            0x11 : 'DisplayTo',
            0x12 : 'Importance',
            0x13 : 'MessageClass',
            0x14 : 'Subject',
            0x15 : 'Read',
            0x16 : 'To',
            0x17 : 'Cc',
            0x18 : 'From',
            0x19 : 'Reply-To',
            0x1a : 'AllDayEvent',
            0x1b : 'Categories',
            0x1c : 'Category',
            0x1d : 'DtStamp',
            0x1e : 'EndTime',
            0x1f : 'InstanceType',
            0x20 : 'BusyStatus',
            0x21 : 'Location',
            0x22 : 'MeetingRequest',
            0x23 : 'Organizer',
            0x24 : 'RecurrenceId',
            0x25 : 'Reminder',
            0x26 : 'ResponseRequested',
            0x27 : 'Recurrences',
            0x28 : 'Recurrence',
            0x29 : 'Type',
            0x2a : 'Until',
            0x2b : 'Occurrences',
            0x2c : 'Interval',
            0x2d : 'DayOfWeek',
            0x2e : 'DayOfMonth',
            0x2f : 'WeekOfMonth',
            0x30 : 'MonthOfYear',
            0x31 : 'StartTime',
            0x32 : 'Sensitivity',
            0x33 : 'TimeZone',
            0x34 : 'GlobalObjId',
            0x35 : 'ThreadTopic',
            0x36 : 'MIMEData',
            0x37 : 'MIMETruncated',
            0x38 : 'MIMESize',
            0x39 : 'InternetCPID',
        }, 3 : {
            0x05 : 'Notify',
            0x06 : 'Notification',
            0x07 : 'Version',
            0x08 : 'Lifetime',
            0x09 : 'DeviceInfo',
            0x0a : 'Enable',
            0x0b : 'Folder',
            0x0c : 'ServerId',
            0x0d : 'DeviceAddress',
            0x0e : 'ValidCarrierProfiles',
            0x0f : 'CarrierProfile',
            0x10 : 'Status',
            0x11 : 'Responses',
#            0x05 : 'Version='1.1'',
            0x12 : 'Devices',
            0x13 : 'Device',
            0x14 : 'Id',
            0x15 : 'Expiry',
            0x16 : 'NotifyGUID',
        }, 4 : {
            0x05 : 'Timezone',
            0x06 : 'AllDayEvent',
            0x07 : 'Attendees',
            0x08 : 'Attendee',
            0x09 : 'Email',
            0x0a : 'Name',
            0x0b : 'Body',
            0x0c : 'BodyTruncated',
            0x0d : 'BusyStatus',
            0x0e : 'Categories',
            0x0f : 'Category',
            0x10 : 'Rtf',
            0x11 : 'DtStamp',
            0x12 : 'EndTime',
            0x13 : 'Exception',
            0x14 : 'Exceptions',
            0x15 : 'Deleted',
            0x16 : 'ExceptionStartTime',
            0x17 : 'Location',
            0x18 : 'MeetingStatus',
            0x19 : 'OrganizerEmail',
            0x1a : 'OrganizerName',
            0x1b : 'Recurrence',
            0x1c : 'Type',
            0x1d : 'Until',
            0x1e : 'Occurrences',
            0x1f : 'Interval',
            0x20 : 'DayOfWeek',
            0x21 : 'DayOfMonth',
            0x22 : 'WeekOfMonth',
            0x23 : 'MonthOfYear',
            0x24 : 'Reminder',
            0x25 : 'Sensitivity',
            0x26 : 'Subject',
            0x27 : 'StartTime',
            0x28 : 'UID',
        }, 5 : {
            0x05 : 'Moves',
            0x06 : 'Move',
            0x07 : 'SrcMsgId',
            0x08 : 'SrcFldId',
            0x09 : 'DstFldId',
            0x0a : 'Response',
            0x0b : 'Status',
            0x0c : 'DstMsgId',
        }, 6 : {
            0x05 : 'GetItemEstimate',
            0x06 : 'Version',
            0x07 : 'Collections',
            0x08 : 'Collection',
            0x09 : 'Class',
            0x0a : 'CollectionId',
            0x0b : 'DateTime',
            0x0c : 'Estimate',
            0x0d : 'Response',
            0x0e : 'Status',
        }, 7 : {
            0x05 : 'Folders',
            0x06 : 'Folder',
            0x07 : 'DisplayName',
            0x08 : 'ServerId',
            0x09 : 'ParentId',
            0x0a : 'Type',
            0x0b : 'Response',
            0x0c : 'Status',
            0x0d : 'ContentClass',
            0x0e : 'Changes',
            0x0f : 'Add',
            0x10 : 'Delete',
            0x11 : 'Update',
            0x12 : 'SyncKey',
            0x13 : 'FolderCreate',
            0x14 : 'FolderDelete',
            0x15 : 'FolderUpdate',
            0x16 : 'FolderSync',
            0x17 : 'Count',
            0x18 : 'Version',
        }, 8 : {
            0x05 : 'CalendarId',
            0x06 : 'CollectionId',
            0x07 : 'MeetingResponse',
            0x08 : 'RequestId',
            0x09 : 'Request',
            0x0a : 'Result',
            0x0b : 'Status',
            0x0c : 'UserResponse',
            0x0d : 'Version',
        }, 9 : {
            0x05 : 'Body',
            0x06 : 'BodySize',
            0x07 : 'BodyTruncated',
            0x08 : 'Categories',
            0x09 : 'Category',
            0x0a : 'Complete',
            0x0b : 'DateCompleted',
            0x0c : 'DueDate',
            0x0d : 'UtcDueDate',
            0x0e : 'Importance',
            0x0f : 'Recurrence',
            0x10 : 'Type',
            0x11 : 'Start',
            0x12 : 'Until',
            0x13 : 'Occurrences',
            0x14 : 'Interval',
            0x16 : 'DayOfWeek',
            0x15 : 'DayOfMonth',
            0x17 : 'WeekOfMonth',
            0x18 : 'MonthOfYear',
            0x19 : 'Regenerate',
            0x1a : 'DeadOccur',
            0x1b : 'ReminderSet',
            0x1c : 'ReminderTime',
            0x1d : 'Sensitivity',
            0x1e : 'StartDate',
            0x1f : 'UtcStartDate',
            0x20 : 'Subject',
            0x21 : 'Rtf',
        }, 0xa : {
            0x05 : 'ResolveRecipients',
            0x06 : 'Response',
            0x07 : 'Status',
            0x08 : 'Type',
            0x09 : 'Recipient',
            0x0a : 'DisplayName',
            0x0b : 'EmailAddress',
            0x0c : 'Certificates',
            0x0d : 'Certificate',
            0x0e : 'MiniCertificate',
            0x0f : 'Options',
            0x10 : 'To',
            0x11 : 'CertificateRetrieval',
            0x12 : 'RecipientCount',
            0x13 : 'MaxCertificates',
            0x14 : 'MaxAmbiguousRecipients',
            0x15 : 'CertificateCount',
        }, 0xb : {
            0x05 : 'ValidateCert',
            0x06 : 'Certificates',
            0x07 : 'Certificate',
            0x08 : 'CertificateChain',
            0x09 : 'CheckCRL',
            0x0a : 'Status',
        }, 0xc : {
            0x05 : 'CustomerId',
            0x06 : 'GovernmentId',
            0x07 : 'IMAddress',
            0x08 : 'IMAddress2',
            0x09 : 'IMAddress3',
            0x0a : 'ManagerName',
            0x0b : 'CompanyMainPhone',
            0x0c : 'AccountName',
            0x0d : 'NickName',
            0x0e : 'MMS',
        }, 0xd : {
            0x05 : 'Ping',
            0x07 : 'PingStatus',
            0x08 : 'HeartbeatInterval',
            0x09 : 'PingFolders',
            0x0a : 'PingFolderId',
            0x0b : 'Id',
            0x0c : 'Class',
        }
    }, 'namespaces' : {
    	0 : 'http://synce.org/formats/airsync_wm5/airsync',
        1 : 'http://synce.org/formats/airsync_wm5/contacts',
        2 : 'http://synce.org/formats/airsync_wm5/mail',
        3 : 'http://synce.org/formats/airsync_wm5/airnotify',
        4 : 'http://synce.org/formats/airsync_wm5/calendar',
        5 : 'http://synce.org/formats/airsync_wm5/move',
        6 : 'http://synce.org/formats/airsync_wm5/getitemestimate',
        7 : 'http://synce.org/formats/airsync_wm5/folderhierarchy',
        8 : 'http://synce.org/formats/airsync_wm5/meetingresponse',
        9 : 'http://synce.org/formats/airsync_wm5/tasks',
        0xA : 'http://synce.org/formats/airsync_wm5/resolverecipients',
        0xB : 'http://synce.org/formats/airsync_wm5/validatecert',
        0xC : 'http://synce.org/formats/airsync_wm5/contacts2',
        0xD : 'http://synce.org/formats/airsync_wm5/ping',
    }
}

AirsyncDTD_Reverse =  {'namespaces' : {}, 'codes' : {} }
AirsyncDTD = []

###############################################################################
# InitializeDTD
#
# Populate and initialize

def InitializeDTD():

        for (nsid, nsname) in AirsyncDTD_Forward['namespaces'].items():
            AirsyncDTD_Reverse['namespaces'][nsname] = nsid

        for (cp, value) in AirsyncDTD_Forward['codes'].items():
            AirsyncDTD_Reverse['codes'][cp] = {}
            for (tagid, tagname) in AirsyncDTD_Forward['codes'][cp].items():
                AirsyncDTD_Reverse['codes'][cp][tagname] = tagid
	
	AirsyncDTD.append(AirsyncDTD_Forward)
	AirsyncDTD.append(AirsyncDTD_Reverse)




