Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Split frmContactEditor-Load.cpp into 24 files to make it more manageable.
authorSteve Brokenshire <sbrokenshire@xestia.co.uk>
Fri, 9 Oct 2015 09:09:58 +0000 (10:09 +0100)
committerSteve Brokenshire <sbrokenshire@xestia.co.uk>
Fri, 9 Oct 2015 09:09:58 +0000 (10:09 +0100)
25 files changed:
source/contacteditor/frmContactEditor-Load.cpp
source/contacteditor/frmContactEditor-LoadAddress.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadBADays.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadCalendar.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadCategory.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadEmail.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadGender.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadGeo.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadGroup.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadIM.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadKey.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadLanguage.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadLogo.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadName.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadNickname.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadNote.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadOrg.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadPhoto.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadRelated.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadRole.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadSound.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadTelephone.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadTimeZone.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadTitle.cpp [new file with mode: 0644]
source/contacteditor/frmContactEditor-LoadURL.cpp [new file with mode: 0644]

index a13a7de..1ef92c4 100644 (file)
@@ -199,6885 +199,178 @@ bool frmContactEditor::LoadContact(wxString Filename){
                // Add the data into the contact editor depending on what it is.                                
                
                if (wxSProperty == wxT("KIND") && KindProcessed == FALSE){
-
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
                
-                       if (wxSPropertySeg2 == wxT("individual")){
-                       
-                               cmbType->SetSelection(1);
-                       
-                       } else if (wxSPropertySeg2 == wxT("group")){
-                       
-                               cmbType->SetSelection(2);
-                               IsGroup = TRUE;
-                       
-                       } else if (wxSPropertySeg2 == wxT("org")){
-                       
-                               cmbType->SetSelection(3);
-                       
-                       } else if (wxSPropertySeg2 == wxT("location")){
-                       
-                               cmbType->SetSelection(4);
-                       
-                       } else {
-                       
-                               cmbType->SetSelection(0);
-                       
-                       }
-                       
-                       wxCommandEvent nullevent;
-                       
-                       UpdateMembersTab(nullevent);
+                       // See frmContactEditor-LoadGroup.cpp
+               
+                       LoadKind(wxSPropertySeg2);
                
                } else if (wxSProperty == wxT("MEMBER")){
 
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-               
-                       // Go through the list of contacts for the account and find the matching UID.
-                       // If contact with UID doesn't match then say (unknown contact).
-                       
-                       wxString AccountDirFinal = GetAccountDir(wxSContactAccount, FALSE);
+                       // See frmContactEditor-LoadGroup.cpp
 
-                       //wxString vcardfilenamewxs;
-                       wxString vCardFilename;
-                       wxString vCardFilenameFull;
-                       wxString vCardDataString;
-                       //wxStringTokenizer vcardfileline;
-                       wxString lwxs;
-                       wxString setname, setvalue;
-                       //vCardNames = new std::map<wxString, wxString, std::greater<wxString>>;
-                       std::multimap<wxString, wxString, std::greater<wxString>> vCardNamesAsc;
-                       std::multimap<wxString, wxString, std::less<wxString>> vCardNamesDsc;
-    
-                       wxDir vcardaccdir(AccountDirFinal);
-    
-                       bool ProcFiles = vcardaccdir.GetFirst(&vCardFilename, wxEmptyString, wxDIR_FILES);
-                       while(ProcFiles){
-    
-                               if (vCardFilename.Right(4) == wxT(".vcf") || 
-                                   vCardFilename.Right(4) == wxT(".VCF") || 
-                                   vCardFilename.Right(5) == wxT(".vcard") || 
-                                   vCardFilename.Right(5) == wxT(".VCARD")){
-       
-                                   vCard Person;
+                       LoadMember(wxSPropertySeg2, &GroupCount);               
                
-                                   vCardFilenameFull.Append(AccountDirFinal);
-                                   vCardFilenameFull.Append(wxT("/"));
-                                   vCardFilenameFull.Append(vCardFilename);
+               } else if (wxSProperty == wxT("FN")){
                
-                                   Person.LoadFile(vCardFilenameFull);
+                       // See frmContactEditor-LoadName.cpp
                
-                                   if (wxSPropertySeg2.Left(9) == wxT("urn:uuid:")){
+                       LoadFN(wxSPropertySeg1, wxSPropertySeg2, &FNCount, &FNProcessed, &ContactData);
                
-                                       wxString NewPropValue;
-                                       NewPropValue = wxSPropertySeg2.Mid(9, wxString::npos);
-                                       wxSPropertySeg2 = NewPropValue;
-
-                                   }
+               } else if (wxSProperty == wxT("N") && NameProcessed == FALSE){
                
-                                   if (Person.MeetBaseSpecification()){
-       
-                                       wxString KindStatus = Person.Get(wxT("KIND"));
+                       // See frmContactEditor-LoadName.cpp
                
-                                       if (KindStatus == wxT("group")){
+                       LoadN(wxSPropertySeg1, wxSPropertySeg2, &NameProcessed, &ContactData);
                
-                                               vCardFilename.Clear();
-                                               vCardFilenameFull.Clear();
-                                               vCardDataString.Clear();
-                                               ProcFiles = vcardaccdir.GetNext(&vCardFilename);
-                                               continue;
+               } else if (wxSProperty == wxT("NICKNAME")){
+                       
+                       // See frmContactEditor-LoadNickname.cpp
+                       
+                       LoadNickname(wxSPropertySeg1, wxSPropertySeg2, &NicknameCount, &ContactData);
+                       
+               } else if (wxSProperty == wxT("GENDER") && GenderProcessed == FALSE){
                
-                                       }
+                       // See frmContactEditor-LoadGender.cpp
                
-                                       wxString PersonName = Person.Get(wxT("N"));
-                                       wxString PersonUID = Person.Get(wxT("UID"));
-                                       wxString PersonFilename = vCardFilenameFull;
-                                       
-                                       if (PersonUID != wxSPropertySeg2){
-                                       
-                                               vCardFilename.Clear();
-                                               vCardFilenameFull.Clear();
-                                               vCardDataString.Clear();
-                                               ProcFiles = vcardaccdir.GetNext(&vCardFilename);
-                                               continue;
-                                       
-                                       }
+                       LoadGender(wxSPropertySeg1, wxSPropertySeg2, &GenderProcessed, &ContactData);
                
-                                       //ContactsNames.insert(std::make_pair(PersonName, ContactIndex));
-                                       //ContactsUIDs.insert(std::make_pair(ContactIndex, PersonUID));
-       
-                                       if (XVMData.SortMode == 1){
+               } else if (wxSProperty == wxT("BDAY") && BirthdayProcessed == FALSE){
 
-                                           // Split the name into sections.
-                       
-                                           vCardDataString = Person.Get(wxT("N"));
+                       // See frmContactEditor-LoadBADays.cpp
 
-                                           vCardName NameData = Person.GetName();
-                   
-                                           vCardDataString = NameData.Forename + wxT(" ") + NameData.Surname;
-                   
-                                       } else if (XVMData.SortMode == 2){
-                   
-                                           // Split the name into sections.
-                   
-                                           vCardName NameData = Person.GetName();    
-                   
-                                           vCardDataString = NameData.Surname + wxT(", ") + NameData.Forename;
-                   
-                                       } else if (XVMData.SortMode == 3){
-                   
-                                           // Check and make sure that the top most nickname is used.
-                   
-                                           vCardDataString = Person.Get(wxT("NICKNAME"));
-                   
-                                           if (vCardDataString.IsEmpty()){
-                       
-                                               vCardDataString = wxT("(no nickname)");
-                       
-                                           }
-                   
-                                       } else if (XVMData.SortMode == 4){
-                   
-                                           vCardDataString = Person.Get(wxT("FN"));
-                   
-                                       }
-       
-                                       if (XVMData.AscendingMode == TRUE){
-                                           vCardNamesAsc.insert(std::make_pair(vCardDataString, PersonUID));
-                                       } else {
-                                           vCardNamesDsc.insert(std::make_pair(vCardDataString, PersonUID));
-                                       }
+                       LoadBDay(wxSPropertySeg1, wxSPropertySeg2, &BirthdayProcessed);
                
-                                   } else {
-       
-                                   }
-           
-           
-       
-                               }
-       
-                               vCardFilename.Clear();
-                               vCardFilenameFull.Clear();
-                               vCardDataString.Clear();
-                               ProcFiles = vcardaccdir.GetNext(&vCardFilename);
-       
-                           }
-    
-                           if (XVMData.AscendingMode == TRUE){
-            
-                               for (std::map<wxString,wxString>::iterator iter = vCardNamesAsc.begin(); 
-                               iter != vCardNamesAsc.end(); ++iter){
-
-                                       wxListItem ItemData;
-                                       
-                                       ItemData.SetId(0);
-                                       ItemData.SetText(iter->first);
+               } else if (wxSProperty == wxT("ANNIVERSARY") && AnniversaryProcessed == FALSE){
                        
-                                       lboGroups->InsertItem(ItemData);
-                                       
-                                       GroupsList.insert(std::make_pair(intValueSeek, iter->second));
+                       // See frmContactEditor-LoadBADays.cpp
                        
-                               }
+                       LoadAnniversary(wxSPropertySeg1, wxSPropertySeg2, &AnniversaryProcessed);
                
+               } else if (wxSProperty == wxT("TZ")){
                
-                           } else {
+                       // See frmContactEditor-LoadTimeZone.cpp
                
-                               for (std::map<wxString,wxString>::iterator iter = vCardNamesDsc.begin(); 
-                               iter != vCardNamesDsc.end(); ++iter){
-
-                                       wxListItem ItemData;
-                                       
-                                       ItemData.SetId(0);
-                                       ItemData.SetText(iter->first);
-                       
-                                       lboGroups->InsertItem(ItemData);
-
-                                       GroupsList.insert(std::make_pair(intValueSeek, iter->second));
-
-                               }
-
-                           }
+                       LoadTimeZone(wxSPropertySeg1, wxSPropertySeg2, &TZCount);       
+               
+               } else if (wxSProperty == wxT("ADR")){
                        
-                       GroupCount++;
-                       intValueSeek++;
+                       // See frmContactEditor-LoadAddress.cpp
                
-               } else if (wxSProperty == wxT("FN")){
+                       LoadADR(wxSPropertySeg1, wxSPropertySeg2, &ADRCount);
                
-                       /*
+               } else if (wxSProperty == wxT("EMAIL")){
                
-                       NameDisplayAs = wxSPropertySeg2;
-                       cmbDisplayAs->SetValue(ContactData.Convert(wxSPropertySeg2, TRUE));
-                       
-                       */
-                       
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;                 
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 4;
-                       int intPref = 0;                        
-                       int intType = 0;
+                       // See frmContactEditor-LoadEmail.cpp
                        
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 3;
+                       LoadEmail(wxSPropertySeg1, wxSPropertySeg2, &EmailCount);       
+               
+               } else if (wxSProperty == wxT("IMPP")){
+               
+                       // See frmContactEditor-LoadIM.cpp
+               
+                       LoadIM(wxSPropertySeg1, wxSPropertySeg2, &IMPPCount);
+               
+               } else if (wxSProperty == wxT("TEL")){
+               
+                       // See frmContactEditor-LoadTelephone.cpp
+               
+                       LoadTelephone(wxSPropertySeg1, wxSPropertySeg2, &TelCount);
+               
+               } else if (wxSProperty == wxT("LANG")){
+               
+                       // See frmContactEditor-LoadLanguage.cpp
                        
-                       // Look for type before continuing.             
+                       LoadLanguage(wxSPropertySeg1, wxSPropertySeg2, &LangCount);
+               
+               } else if (wxSProperty == wxT("GEO")){
+               
+                       // See frmContactEditor-LoadGeo.cpp
                        
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
+                       LoadGeo(wxSPropertySeg1, wxSPropertySeg2, &GeoCount);   
+               
+               } else if (wxSProperty == wxT("RELATED")){
                        
-                               SLiter = SplitLength.find(intiter->first);
+                       // See fromContactEditor-LoadRelated.cpp
                        
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
+                       LoadRelated(wxSPropertySeg1, wxSPropertySeg2, &RelatedCount);           
+               
+               } else if (wxSProperty == wxT("URL")){
 
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
+                       // See frmContactEditor-LoadURL.cpp
+               
+                       LoadURL(wxSPropertySeg1, wxSPropertySeg2, &URLCount);
+               
+               } else if (wxSProperty == wxT("TITLE")) {
+               
+                       // See frmContactEditor-LoadTitle.cpp
                        
-                       }
+                       LoadTitle(wxSPropertySeg1, wxSPropertySeg2, &TitleCount);
                        
-                       // Setup blank lines for later on.
+               } else if (wxSProperty == wxT("ROLE")) {
 
-                       FullNamesList.insert(std::make_pair(intValueSeek, wxT("")));
-                       FullNamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       FullNamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       FullNamesListPref.insert(std::make_pair(intValueSeek, 0));
-                       FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       FullNamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-                       FullNamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));              
-                       
-                       intPrevValue = 3;
+                       // See frmContactEditor-LoadRole.cpp
+               
+                       LoadRole(wxSPropertySeg1, wxSPropertySeg2, &RoleCount);
                        
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
+               } else if (wxSProperty == wxT("ORG")) {
+               
+                       // See frmContactEditor-LoadOrg.cpp
                        
-                               SLiter = SplitLength.find(intiter->first);
+                       LoadOrg(wxSPropertySeg1, wxSPropertySeg2, &OrgCount);
                        
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       FullNamesListAltID.erase(intValueSeek); FullNamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PID")){
+               } else if (wxSProperty == wxT("NOTE")) {
 
-                                       FullNamesListPID.erase(intValueSeek); FullNamesListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                                       
-                                       if (intPref > 0 && intPref < 101){
-                               
-                                               FullNamesListPref.erase(intValueSeek); FullNamesListPref.insert(std::make_pair(intValueSeek, intPref));
-                                               
-                                       }
-                               
-                               } else if (PropertyName == wxT("LANG")){
+                       // See frmContactEditor-LoadNote.cpp
 
-                                       FullNamesListLanguage.erase(intValueSeek); FullNamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Split the address.           
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
+                       LoadNote(wxSPropertySeg1, wxSPropertySeg2, &NoteCount); 
                        
-                       for (int i = 0; i <= intPropertyLen; i++){
+               } else if (wxSProperty == wxT("CATEGORIES")) {
                
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 1){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
+                       // See frmContactEditor-LoadCategory.cpp
                
-                       }                       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       /*
+                       LoadCategory(wxSPropertySeg1, wxSPropertySeg2, &CategoryCount); 
                        
-                       wxListItem coldata;
+               } else if (wxSProperty == wxT("PHOTO")) {
                
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(IMPPType);
-                       
-                       */
-                       
-                       //ProcessCaptureStrings(wxsPropertySeg2);
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       FullNamesList.erase(intValueSeek);
-                       FullNamesListType.erase(intValueSeek);
-                       FullNamesListTokens.erase(intValueSeek);
-                       FullNamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                       FullNamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       if (intType == 0){
-                       
-                               FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 1){
-                       
-                               FullNamesListType.insert(std::make_pair(intValueSeek, wxT("home")));                    
-                       
-                       } else if (intType == 2){
-                       
-                               FullNamesListType.insert(std::make_pair(intValueSeek, wxT("work")));                    
-                       
-                       }
-                       
-                       if (FNProcessed == FALSE){
-                       
-                               NameDisplayAs = wxSPropertySeg2;
-                               cmbDisplayAs->SetValue(ContactData.Convert(wxSPropertySeg2, TRUE));
-                               FNProcessed = TRUE;
-                               
-                       }
+                       // See frmContactEditor-LoadPhoto.cpp
                        
-                       /*if (intType == 0){
-                       
-                               ListCtrlIndex = lboIM->InsertItem(coldata);
-                               
-                               lboIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }                               
-                               
-                               GeneralIMList.erase(intValueSeek);
-                               GeneralIMListType.erase(intValueSeek);
-                               GeneralIMListTokens.erase(intValueSeek);
-                               GeneralIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralIMListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeIM->InsertItem(coldata);
-
-                               lboHomeIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeIMList.erase(intValueSeek);
-                               HomeIMListType.erase(intValueSeek);
-                               HomeIMListTokens.erase(intValueSeek);                           
-                               HomeIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeIMListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessIM->InsertItem(coldata);
+                       LoadPhoto(wxSPropertySeg1, wxSPropertySeg2, &PhotoCount);
 
-                               lboBusinessIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessIMList.erase(intValueSeek);
-                               BusinessIMListType.erase(intValueSeek);
-                               BusinessIMListTokens.erase(intValueSeek);                               
-                               BusinessIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessIMListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                              
-                       
-                       }*/
-                       
-                       FNCount++;
-                       intValueSeek++;                         
+               } else if (wxSProperty == wxT("LOGO")) {
                
-               } else if (wxSProperty == wxT("N") && NameProcessed == FALSE){
+                       // See frmContactEditor-LoadLogo.cpp
                
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;                 
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 3;
-                       int intSplitSeek = 0;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       // Look for type before continuing.             
-                       
-                       intPrevValue = 2;                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                       
-                       }
-                       
-                       intPrevValue = 2;
+                       LoadLogo(wxSPropertySeg1, wxSPropertySeg2, &LogoCount);
                        
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
+               } else if (wxSProperty == wxT("SOUND")) {
+               
+                       // See frmContactEditor-LoadSound.cpp
                        
-                               SLiter = SplitLength.find(intiter->first);
+                       LoadSound(wxSPropertySeg1, wxSPropertySeg2, &SoundCount);
                        
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       NameAltID = PropertyValue;
-                               
-                               } else if (PropertyName == wxT("LANG")){
+               } else if (wxSProperty == wxT("CALURI")){
 
-                                       NameLanguage = PropertyValue;
-                               
-                               } else if (PropertyName == wxT("SORT-AS")){
-                               
-                                       NameDisplayAs = PropertyValue;
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
+                       // See frmContactEditor-LoadCalendar.cpp
                        
-                       }
-                       
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitSeek = 0;               
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;                                       
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
+                       LoadCalURI(wxSPropertySeg1, wxSPropertySeg2, &CalAdrCount);
                
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 4){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       } else {
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                       
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
+               } else if (wxSProperty == wxT("CALADRURI")){
+
+                       // See frmContactEditor-LoadCalendar.cpp
                        
-                               }
+                       LoadCalAdrURI(wxSPropertySeg1, wxSPropertySeg2, &CalReqAdrCount);
                
-                       }
-                       
-                       // Split the data into several parts.
-                                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               if (intiter->first == 1){
-                               
-                                       // Deal with family name.
-                                       
-                                       SLiter = SplitLength.find(1);
-                                                                               
-                                       txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-                                       
-                                       intPrevValue = intiter->second;
-                                       NameSurname = wxSPropertySeg2.Mid(0, SLiter->second);                                   
-                               
-                               } else if (intiter->first == 2){
-                               
-                                       // Deal with given names.
-                                       
-                                       SLiter = SplitLength.find(2);
-                                                                               
-                                       txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                                       NameForename = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                               
-                               } else if (intiter->first == 3){
-                               
-                                       // Deal with additional names.
-                                       
-                                       SLiter = SplitLength.find(3);
-                                                                               
-                                       txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                                       NameOtherNames = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                               
-                               } else if (intiter->first == 4){
-                               
-                                       // Deal with honorifix prefixes and suffixes.
+               } else if (wxSProperty == wxT("FBURL")){
 
-                                       SLiter = SplitLength.find(4);
-                                                                               
-                                       txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                                       NameTitle = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                               
-                                       txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-                                       NameSuffix = wxSPropertySeg2.Mid(intPrevValue);
-                               
-                               }
-                       
-                       }
-                       
-                       NameTokens = PropertyTokens;
-                       NameProcessed = TRUE;
+                       // See frmContactEditor-LoadCalendar.cpp
+
+                       LoadCalFreeBusy(wxSPropertySeg1, wxSPropertySeg2, &FreeBusyCount);
+
+               } else if (wxSProperty == wxT("KEY")){
                
-               } else if (wxSProperty == wxT("NICKNAME")){
+                       // See frmContactEditor-LoadKey.cpp
                        
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 10;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-
-                       intPrevValue = 9;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                                
-                       
-                       } else if (intType == 2){
-
-                               BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                            
-                       
-                       }
-                       
-                       intPrevValue = 9;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralNicknamesListAltID.erase(intValueSeek); GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeNicknamesListAltID.erase(intValueSeek); HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessNicknamesListAltID.erase(intValueSeek); BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralNicknamesListPID.erase(intValueSeek); GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeNicknamesListPID.erase(intValueSeek); HomeNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessNicknamesListPID.erase(intValueSeek); BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ GeneralNicknamesListPref.erase(intValueSeek); GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ HomeNicknamesListPref.erase(intValueSeek); HomeNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ BusinessNicknamesListPref.erase(intValueSeek); BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("LANGUAGE")){
-                               
-                                       if (intType == 0){ GeneralNicknamesListLanguage.erase(intValueSeek); GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeNicknamesListLanguage.erase(intValueSeek); HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessNicknamesListLanguage.erase(intValueSeek); BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboNicknames->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralNicknamesList.erase(intValueSeek);
-                               GeneralNicknamesListType.erase(intValueSeek);
-                               GeneralNicknamesListTokens.erase(intValueSeek);
-                               GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralNicknamesListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeNicknames->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeNicknamesList.erase(intValueSeek);
-                               HomeNicknamesListType.erase(intValueSeek);
-                               HomeNicknamesListTokens.erase(intValueSeek);                            
-                               HomeNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeNicknamesListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessNicknames->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessNicknamesList.erase(intValueSeek);
-                               BusinessNicknamesListType.erase(intValueSeek);
-                               BusinessNicknamesListTokens.erase(intValueSeek);                                
-                               BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessNicknamesListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                               
-                       
-                       }
-               
-                       NicknameCount++;
-                       intValueSeek++; 
-                       
-               } else if (wxSProperty == wxT("GENDER") && GenderProcessed == FALSE){
-               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;;
-                       int intPrevValue = 8;
-               
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 7;                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-               
-                                       if (FirstToken == TRUE){
-                       
-                                               PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                               FirstToken = FALSE;
-                       
-                                       } else {
-                       
-                                               PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                       
-                                       }
-               
-                               }
-                       
-                       }       
-               
-                       wxStringTokenizer GenderDetails (wxSPropertySeg2, wxT(";"));
-                       
-                       wxString GenderComponent;
-                       wxString GenderIdentity;
-                       
-                       if (GenderDetails.CountTokens() >= 2){
-                       
-                               GenderComponent = GenderDetails.GetNextToken();
-                               GenderIdentity = GenderDetails.GetString();
-                       
-                               ProcessCaptureStrings(&GenderIdentity);
-                       
-                               txtGenderDescription->SetValue(ContactData.Convert(GenderIdentity, TRUE));
-                                                               
-                       } else {
-                       
-                               GenderComponent = GenderDetails.GetNextToken();
-                       
-                       }
-                               
-                       if (GenderComponent == wxT("M")){
-                               
-                               // Gender is Male.
-                                       
-                               cmbGender->SetSelection(1);
-                               
-                       } else if (GenderComponent == wxT("F")){
-                               
-                               // Gender is Female.
-                                       
-                               cmbGender->SetSelection(2);                                     
-                               
-                       } else if (GenderComponent == wxT("O")){
-                               
-                               // Gender is Other.
-                                       
-                               cmbGender->SetSelection(3);
-                               
-                       } else if (GenderComponent == wxT("N")){
-                               
-                               // Gender is None/Not Applicable.
-                               
-                               cmbGender->SetSelection(4);                                     
-                               
-                       } else if (GenderComponent == wxT("U")){
-                               
-                               // Gender is Unknown.
-                                       
-                               cmbGender->SetSelection(5);                                     
-                               
-                       }
-                       
-                       GenderTokens = PropertyTokens;
-                       GenderProcessed = TRUE;
-               
-               } else if (wxSProperty == wxT("BDAY") && BirthdayProcessed == FALSE){
-
-                       // Process date. Preserve the remainder in the string.
-                               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool BirthdayText = FALSE;
-                       int intPrevValue = 6;
-               
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-               
-                       intPrevValue = 5;
-               
-                       // Look for type before continuing.
-               
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-               
-                               SLiter = SplitLength.find(intiter->first);
-               
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-                       
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                       
-                               intPrevValue = intiter->second;
-                       
-                               if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && BirthdayText == FALSE){
-                       
-                                       ProcessCaptureStrings(&wxSPropertySeg2);
-                                       txtBirthday->SetValue(wxSPropertySeg2);
-                                       Birthday = wxSPropertySeg2;
-                                       BirthdayText = TRUE;
-                       
-                               }
-               
-                       }
-               
-                       // Setup blank lines for later on.
-                       
-                       intPrevValue = 5;
-               
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-               
-                               SLiter = SplitLength.find(intiter->first);
-               
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-                       
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                       
-                               intPrevValue = intiter->second;
-                       
-                               // Process properties.
-                       
-                               ProcessCaptureStrings(&PropertyValue);
-                       
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                       
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                               
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                               
-                               }                               
-                       
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                               
-                                       PropertyValue.Remove(0, 1);
-                               
-                               }                               
-                       
-                               if (PropertyName == wxT("ALTID")){
-
-                                       BirthdayAltID = PropertyValue;
-                       
-                               } else if (PropertyName == wxT("CALSCALE")){
-                       
-                                       BirthdayCalScale = PropertyValue;
-                       
-                               } else if (PropertyName != wxT("VALUE")) {
-                       
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-                               
-                                               PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                       }
-                                       
-                               }
-               
-                       }       
-               
-                       // Add the data to the variables and form.
-                       
-                       if (BirthdayText == FALSE){
-                       
-                               Birthday = wxSPropertySeg2;
-                               int DateYear = 0;
-                               wxDateTime::Month DateMonth;
-                               unsigned int DateDay;
-                               
-                               wxString wxSData;
-                               
-                               if (Birthday.Mid(0, 2) == wxT("--")){
-                               
-                                       // Skip year.
-                               
-                               } else {
-                               
-                                       DateYear = wxAtoi(Birthday.Mid(0,4));
-                               
-                               }
-                               
-                               DateMonth = (wxDateTime::Month)(wxAtoi(Birthday.Mid(4,2)) - 1);
-                               DateDay = wxAtoi(Birthday.Mid(6,2));
-                       
-                               wxDateTime BDayDate(DateDay,DateMonth,DateYear);
-                       
-                               /*BDayDate.SetDay(DateDay);
-                               BDayDate.SetMonth(wxDateTime::Month::Jan);
-                               BDayDate.SetYear(DateYear);*/
-                       
-                               dapBirthday->SetValue(BDayDate);                                
-                       
-                       }
-                       
-                       BirthdayTokens = PropertyTokens;
-                       
-                       BirthdayProcessed = TRUE;
-               
-               } else if (wxSProperty == wxT("ANNIVERSARY") && AnniversaryProcessed == FALSE){
-                       
-                       // Process date. Preserve the remainder in the string.
-                               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool AnniversaryText = FALSE;
-                       int intPrevValue = 13;
-               
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-               
-                       intPrevValue = 12;
-               
-                       // Look for type before continuing.
-               
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-               
-                               SLiter = SplitLength.find(intiter->first);
-               
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-                       
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                       
-                               intPrevValue = intiter->second;
-                       
-                               if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && AnniversaryText == FALSE){
-                       
-                                       ProcessCaptureStrings(&wxSPropertySeg2);
-                                       txtAnniversary->SetValue(wxSPropertySeg2);
-                                       Anniversary = wxSPropertySeg2;
-                                       AnniversaryText = TRUE;
-                       
-                               }
-               
-                       }
-               
-                       // Setup blank lines for later on.
-               
-                       intPrevValue = 12;
-               
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-               
-                               SLiter = SplitLength.find(intiter->first);
-               
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-                       
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                       
-                               intPrevValue = intiter->second;
-                       
-                               // Process properties.
-                       
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                       
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                               
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                               
-                               }                               
-                       
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                               
-                                       PropertyValue.Remove(0, 1);
-                               
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);          
-                       
-                               if (PropertyName == wxT("ALTID")){
-
-                                       AnniversaryAltID = PropertyValue;
-                       
-                               } else if (PropertyName == wxT("CALSCALE")){
-                       
-                                       AnniversaryCalScale = PropertyValue;
-                       
-                               } else if (PropertyName != wxT("VALUE")) {
-                       
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-                               
-                                               PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                       }
-                       
-                               }
-               
-                       }       
-               
-                       // Add the data to the variables and form.
-                       
-                       if (AnniversaryText == FALSE){
-                       
-                               Anniversary = wxSPropertySeg2;
-                               int DateYear = 0;
-                               wxDateTime::Month DateMonth;
-                               int DateDay;
-                               
-                               wxString wxSData;
-                               
-                               if (Anniversary.Mid(0, 2) == wxT("--")){
-                               
-                                       // Skip year.
-                               
-                               } else {
-                               
-                                       DateYear = wxAtoi(Anniversary.Mid(0,4));
-                               
-                               }
-                               
-                               DateMonth = (wxDateTime::Month)(wxAtoi(Anniversary.Mid(4,2)) - 1);
-                               DateDay = wxAtoi(Anniversary.Mid(6,2));                                 
-                       
-                               wxDateTime ADayDate(DateDay,DateMonth,DateYear);
-                       
-                               dapAnniversary->SetValue(ADayDate);
-                       
-                       }
-                       
-                       AnniversaryTokens = PropertyTokens;
-                       
-                       AnniversaryProcessed = TRUE;
-               
-               } else if (wxSProperty == wxT("TZ")){
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;                 
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 4;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 3;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralTZList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTZListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeTZList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTZListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));                              
-                               HomeTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessTZList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTZListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));                          
-                               BusinessTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 3;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               // Process properties.
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralTZListAltID.erase(intValueSeek); GeneralTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTZListAltID.erase(intValueSeek); HomeTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTZListAltID.erase(intValueSeek); BusinessTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralTZListPID.erase(intValueSeek); GeneralTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTZListPID.erase(intValueSeek); HomeTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTZListPID.erase(intValueSeek); BusinessTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       if (intType == 0){ GeneralTZListMediatype.erase(intValueSeek); GeneralTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTZListMediatype.erase(intValueSeek); HomeTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTZListMediatype.erase(intValueSeek); BusinessTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intPref > 0 && intPref < 101){
-                               
-                                               if (intType == 0){ GeneralTZListPref.erase(intValueSeek); GeneralTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 1){ HomeTZListPref.erase(intValueSeek); HomeTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 2){ BusinessTZListPref.erase(intValueSeek); BusinessTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       
-                                       }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Split the address. 
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 6){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       } else {
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                       
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);                        
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboTimezones->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralTZList.erase(intValueSeek);
-                               GeneralTZListType.erase(intValueSeek);
-                               GeneralTZListTokens.erase(intValueSeek);
-                               GeneralTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralTZListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeTZList.erase(intValueSeek);
-                               HomeTZListType.erase(intValueSeek);
-                               HomeTZListTokens.erase(intValueSeek);                           
-                               HomeTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeTZListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessTZList.erase(intValueSeek);
-                               BusinessTZListType.erase(intValueSeek);
-                               BusinessTZListTokens.erase(intValueSeek);                               
-                               BusinessTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessTZListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                              
-                       
-                       }
-               
-                       TZCount++;
-                       intValueSeek++;         
-               
-               } else if (wxSProperty == wxT("ADR")){
-                       
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       wxString AddressLabel;
-                       wxString AddressLang;
-                       wxString AddressAltID;
-                       wxString AddressPID;
-                       wxString AddressTokens;
-                       wxString AddressGeo;
-                       wxString AddressTimezone;
-                       wxString AddressType;
-                       wxString AddressMediatype;
-                       wxString AddressPOBox;
-                       wxString AddressExtended;
-                       wxString AddressStreet;
-                       wxString AddressLocality;
-                       wxString AddressCity;
-                       wxString AddressRegion;
-                       wxString AddressPostalCode;
-                       wxString AddressCountry;
-                       bool FirstToken = TRUE;                 
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 5;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 4;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralAddressList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeAddressList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeAddressListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessAddressList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessAddressListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 4;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               // Process properties.
-                               
-                               if (PropertyName == wxT("LABEL")){
-                               
-                                       if (intType == 0){ GeneralAddressListLabel.erase(intValueSeek); GeneralAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeAddressListLabel.erase(intValueSeek); HomeAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessAddressListLabel.erase(intValueSeek); BusinessAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue));}
-                               
-                               } else if (PropertyName == wxT("LANGUAGE")){
-                               
-                                       if (intType == 0){ GeneralAddressListLang.erase(intValueSeek); GeneralAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeAddressListLang.erase(intValueSeek); HomeAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessAddressListLang.erase(intValueSeek); BusinessAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }                             
-                               
-                               } else if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralAddressListAltID.erase(intValueSeek); GeneralAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeAddressListAltID.erase(intValueSeek); HomeAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessAddressListAltID.erase(intValueSeek); BusinessAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralAddressListPID.erase(intValueSeek); GeneralAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeAddressListPID.erase(intValueSeek); HomeAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessAddressListPID.erase(intValueSeek); BusinessAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("GEO")){
-                               
-                                       if (intType == 0){ GeneralAddressListGeo.erase(intValueSeek); GeneralAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeAddressListGeo.erase(intValueSeek); HomeAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessAddressListGeo.erase(intValueSeek); BusinessAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("TZ")){
-
-                                       if (intType == 0){ GeneralAddressListTimezone.erase(intValueSeek); GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeAddressListTimezone.erase(intValueSeek); HomeAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessAddressListTimezone.erase(intValueSeek); BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-
-                                       if (intType == 0){ GeneralAddressListMediatype.erase(intValueSeek); GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeAddressListMediatype.erase(intValueSeek); HomeAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessAddressListMediatype.erase(intValueSeek); BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                                       
-                                       if (intPref > 0 && intPref < 101){
-                                                               
-                                               if (intType == 0){ GeneralAddressListPref.erase(intValueSeek); GeneralAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 1){ HomeAddressListPref.erase(intValueSeek); HomeAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 2){ BusinessAddressListPref.erase(intValueSeek); BusinessAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               
-                                       }
-                               
-                               } else {
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Split the address. 
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 6){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       } else {
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                       
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }
-                       
-                       // Split the data into several parts.                   
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                                       
-                               if (intiter->first == 1){
-                               
-                                       // Deal with PO Box.
-                                       
-                                       SLiter = SplitLength.find(1);
-                                                                               
-                                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-                                       AddressPOBox = wxSPropertySeg2.Mid(0, SLiter->second);
-                                       intPrevValue = intiter->second;
-                               
-                               } else if (intiter->first == 2){
-                               
-                                       // Deal with extended address.
-                                       
-                                       SLiter = SplitLength.find(2);
-                                       
-                                       AddressExtended = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                                       //txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                               
-                               } else if (intiter->first == 3){
-                               
-                                       // Deal with street address.
-                                       
-                                       SLiter = SplitLength.find(3);
-                                                                               
-                                       AddressStreet = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                                       //txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                               
-                               } else if (intiter->first == 4){
-                               
-                                       // Deal with locality
-
-                                       SLiter = SplitLength.find(4);
-                                       
-                                       AddressLocality = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                                       
-                                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-                               
-                               } else if (intiter->first == 5){
-                               
-                                       // Deal with region.
-
-                                       SLiter = SplitLength.find(5);
-                                       
-                                       AddressRegion = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                                       
-                                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-                               
-                               } else if (intiter->first == 6){
-                               
-                                       // Deal with post code.
-
-                                       SLiter = SplitLength.find(6);
-                                       
-                                       AddressPostalCode = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-                                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-                                       intPrevValue = intiter->second;
-                                       
-                                       // Deal with country.
-                                       
-                                       AddressCountry = wxSPropertySeg2.Mid(intPrevValue);
-                                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-                               
-                               }
-                       
-                       }       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&AddressStreet, &AddressLocality, &AddressRegion, &AddressPostalCode, &AddressCountry);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(AddressStreet);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboAddresses->InsertItem(coldata);
-                               lboAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
-                               lboAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
-                               lboAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboAddresses->SetItem(ListCtrlIndex, 4, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralAddressList.erase(intValueSeek);
-                               GeneralAddressListTown.erase(intValueSeek);
-                               GeneralAddressListCounty.erase(intValueSeek);
-                               GeneralAddressListPostCode.erase(intValueSeek);
-                               GeneralAddressListCountry.erase(intValueSeek);
-                               GeneralAddressListType.erase(intValueSeek);
-                               GeneralAddressListTokens.erase(intValueSeek);
-                               GeneralAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
-                               GeneralAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
-                               GeneralAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
-                               GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
-                               GeneralAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
-                               GeneralAddressListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeAddresses->InsertItem(coldata);
-                               lboHomeAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
-                               lboHomeAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
-                               lboHomeAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeAddressList.erase(intValueSeek);
-                               HomeAddressListTown.erase(intValueSeek);
-                               HomeAddressListCounty.erase(intValueSeek);
-                               HomeAddressListPostCode.erase(intValueSeek);
-                               HomeAddressListCountry.erase(intValueSeek);
-                               HomeAddressListType.erase(intValueSeek);
-                               HomeAddressListTokens.erase(intValueSeek);                              
-                               HomeAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
-                               HomeAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
-                               HomeAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
-                               HomeAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
-                               HomeAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
-                               HomeAddressListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessAddresses->InsertItem(coldata);
-                               lboBusinessAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
-                               lboBusinessAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
-                               lboBusinessAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               BusinessAddressList.erase(intValueSeek);
-                               BusinessAddressListTown.erase(intValueSeek);
-                               BusinessAddressListCounty.erase(intValueSeek);
-                               BusinessAddressListPostCode.erase(intValueSeek);
-                               BusinessAddressListCountry.erase(intValueSeek);
-                               BusinessAddressListType.erase(intValueSeek);
-                               BusinessAddressListTokens.erase(intValueSeek);
-                               BusinessAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
-                               BusinessAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
-                               BusinessAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
-                               BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
-                               BusinessAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
-                               BusinessAddressListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                         
-                       
-                       }
-                       
-                       ADRCount++;
-                       intValueSeek++;
-               
-               } else if (wxSProperty == wxT("EMAIL")){
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;
-                       std::map<int, int>::iterator SPoint;
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       wxString AddressLabel;
-                       wxString AddressLang;
-                       wxString AddressAltID;
-                       wxString AddressPID;
-                       wxString AddressTokens;
-                       wxString AddressGeo;
-                       wxString AddressTimezone;
-                       wxString AddressType;
-                       wxString AddressMediatype;
-                       wxString AddressPOBox;
-                       wxString AddressExtended;
-                       wxString AddressStreet;
-                       wxString AddressLocality;
-                       wxString AddressCity;
-                       wxString AddressRegion;
-                       wxString AddressPostalCode;
-                       wxString AddressCountry;
-                       bool FirstToken = TRUE;
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 7;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 6;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralEmailList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralEmailListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeEmailList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeEmailListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessEmailList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessEmailListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 6;                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               // Process properties.
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralEmailListAltID.erase(intValueSeek); GeneralEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeEmailListAltID.erase(intValueSeek); HomeEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessEmailListAltID.erase(intValueSeek); BusinessEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralEmailListPID.erase(intValueSeek); GeneralEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeEmailListPID.erase(intValueSeek); HomeEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessEmailListPID.erase(intValueSeek); BusinessEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                                       
-                                       if (intPref > 0 && intPref < 101){
-                               
-                                               if (intType == 0){ GeneralEmailListPref.erase(intValueSeek); GeneralEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 1){ HomeEmailListPref.erase(intValueSeek); HomeEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 2){ BusinessEmailListPref.erase(intValueSeek); BusinessEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               
-                                       }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       } 
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;       
-                       
-                       // Add the data to the General/Home/Work email variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-
-                       
-                               ListCtrlIndex = lboEmails->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralEmailList.erase(intValueSeek);
-                               GeneralEmailListType.erase(intValueSeek);
-                               GeneralEmailListTokens.erase(intValueSeek);
-                               GeneralEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralEmailListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeEmails->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeEmailList.erase(intValueSeek);
-                               HomeEmailListType.erase(intValueSeek);
-                               HomeEmailListTokens.erase(intValueSeek);                                
-                               HomeEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeEmailListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessEmail->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessEmail->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessEmailList.erase(intValueSeek);
-                               BusinessEmailListType.erase(intValueSeek);
-                               BusinessEmailListTokens.erase(intValueSeek);                            
-                               BusinessEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessEmailListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                           
-                       
-                       }
-                       
-                       EmailCount++;
-                       intValueSeek++;         
-               
-               } else if (wxSProperty == wxT("IMPP")){
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;
-                       std::map<int, int>::iterator SPoint;
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       wxString IMPPType;
-                       wxString IMPPAddress;
-                       bool FirstToken = TRUE;
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 6;
-                       int intPref = 0;
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 5;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralIMList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralIMListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeIMList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeIMListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessIMList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessIMListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 5;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralIMListAltID.erase(intValueSeek); GeneralIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeIMListAltID.erase(intValueSeek); HomeIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessIMListAltID.erase(intValueSeek); BusinessIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralIMListPID.erase(intValueSeek); GeneralIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeIMListPID.erase(intValueSeek); HomeIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessIMListPID.erase(intValueSeek); BusinessIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                                       
-                                       if (intPref > 0 && intPref < 101){
-                               
-                                               if (intType == 0){ GeneralIMListPref.erase(intValueSeek); GeneralIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 1){ HomeIMListPref.erase(intValueSeek); HomeIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 2){ BusinessIMListPref.erase(intValueSeek); BusinessIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               
-                                       }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-
-                                       if (intType == 0){ GeneralIMListMediatype.erase(intValueSeek); GeneralIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeIMListMediatype.erase(intValueSeek); HomeIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessIMListMediatype.erase(intValueSeek); BusinessIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Split the address. 
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 1){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }
-                       
-                       // Split the data into several parts.                   
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               if (intiter->first == 1){
-                               
-                                       // Deal with PO Box.
-                                       
-                                       SLiter = SplitLength.find(1);
-                                                                               
-                                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-                                       IMPPType = wxSPropertySeg2.Mid(0, SLiter->second);
-                                       intPrevValue = intiter->second;
-                                       
-                                       IMPPAddress = wxSPropertySeg2.Mid(intPrevValue);                                        
-                               
-                               }
-                       
-                       }       
-                       
-                       // Check what IM type it is.
-                       
-                       if (IMPPType == wxT("aim")){
-               
-                               IMPPType = wxT("AIM");
-               
-                       } else if (IMPPType == wxT("gg")){
-               
-                               IMPPType = wxT("Gadu-Gadu");
-               
-                       } else if (IMPPType == wxT("icq")){
-               
-                               IMPPType = wxT("ICQ");
-               
-                       } else if (IMPPType == wxT("skype")){
-               
-                               IMPPType = wxT("Skype");
-               
-                       } else if (IMPPType == wxT("xmpp")){
-               
-                               IMPPType = wxT("XMPP");
-               
-                       } else if (IMPPType == wxT("yahoo")){
-               
-                               IMPPType = wxT("Yahoo");
-               
-                       } else {
-               
-                               // Do nothing.
-               
-                       }                       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(IMPPType);
-
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboIM->InsertItem(coldata);
-                               
-                               lboIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }                               
-                               
-                               GeneralIMList.erase(intValueSeek);
-                               GeneralIMListType.erase(intValueSeek);
-                               GeneralIMListTokens.erase(intValueSeek);
-                               GeneralIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralIMListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeIM->InsertItem(coldata);
-
-                               lboHomeIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeIMList.erase(intValueSeek);
-                               HomeIMListType.erase(intValueSeek);
-                               HomeIMListTokens.erase(intValueSeek);                           
-                               HomeIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeIMListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessIM->InsertItem(coldata);
-
-                               lboBusinessIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessIMList.erase(intValueSeek);
-                               BusinessIMListType.erase(intValueSeek);
-                               BusinessIMListTokens.erase(intValueSeek);                               
-                               BusinessIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessIMListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                              
-                       
-                       }
-                       
-                       IMPPCount++;
-                       intValueSeek++; 
-               
-               } else if (wxSProperty == wxT("TEL")){
-               
-                       // Check TEL and make sure it is functioning properly.
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int> TypeSplitPoints;
-                       std::map<int, int> TypeSplitLength;
-                       std::map<int, int>::iterator SLiter;
-                       std::map<int, int>::iterator SPoint;                    
-                       std::map<int, int>::iterator TSLiter;
-                       std::map<int, int>::iterator TSPoint;
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       wxString TelType;
-                       wxString TelNumber;
-                       wxString TelTypeUI;
-                       wxString TelTypeDetail;
-                       bool FirstToken = TRUE;
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 5;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       int intSplitPoint = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 4;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       // Process each value in type and translate each
-                                       // part.
-                               
-                                       // Strip out the quotes if they are there.
-                               
-                                       size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                                       if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                               PropertyValue.Trim();
-                                               PropertyValue.RemoveLast();
-                                       
-                                       }                               
-                               
-                                       if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                               PropertyValue.Remove(0, 1);
-                                       
-                                       }
-                                       
-                                       TelTypeDetail = PropertyValue;
-                                       
-                                       intSplitSize = 0;
-                                       intSplitsFound = 0;
-                                       intSplitPoint = 0;
-                                       
-                                       for (int i = 0; i <= intPropertyValueLen; i++){
-                       
-                                               intSplitSize++;
-                       
-                                               if (PropertyValue.Mid(i, 1) == wxT(",") && PropertyValue.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                                       if (intSplitsFound == 0){
-
-                                                               TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
-                                                               TypeSplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                       
-                                                       } else {
-                                       
-                                                               TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
-                                                               TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
-                                       
-                                                       }                       
-
-                                                       intSplitsFound++;
-                                                       i++;
-                                                       intSplitPoint = i;
-                                                       intSplitSize = 0;
-                       
-                                               }
-                       
-                                       }
-                                       
-                                       TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
-                                       TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));                                                           
-                               
-                                       int intTypeSeek = 0;
-                               
-                                       for (std::map<int, int>::iterator typeiter = TypeSplitPoints.begin(); 
-                                       typeiter != TypeSplitPoints.end(); ++typeiter){
-                                       
-                                               wxString TypePropertyName;
-                                               
-                                               TSLiter = TypeSplitLength.find(typeiter->first);
-                                               
-                                               TypePropertyName = PropertyValue.Mid(typeiter->second, TSLiter->second);
-                                               
-                                               if (intTypeSeek == 0){
-                                               
-                                               
-                                               } else {
-                                                                                               
-                                                       TelTypeUI.Append(wxT(","));                                                     
-                                               
-                                               }
-                                       
-                                               if (TypePropertyName == wxT("home")){
-                                               
-                                                       intType = 1;
-                                               
-                                               } else if (TypePropertyName == wxT("work")){
-                                               
-                                                       intType = 2;
-                                               
-                                               }
-                                               
-                                               
-                                               if (TypePropertyName == wxT("text")){
-                                               
-                                                       TelTypeUI.Append(_("text"));
-                                                       intTypeSeek++;
-                                               
-                                               } else if (TypePropertyName == wxT("voice")){
-                                               
-                                                       TelTypeUI.Append(_("voice"));
-                                                       intTypeSeek++;
-                                               
-                                               } else if (TypePropertyName == wxT("fax")){
-                                               
-                                                       TelTypeUI.Append(_("fax"));
-                                                       intTypeSeek++;
-                                               
-                                               } else if (TypePropertyName == wxT("cell")){
-                                               
-                                                       TelTypeUI.Append(_("mobile"));
-                                                       intTypeSeek++;
-                                               
-                                               } else if (TypePropertyName == wxT("video")){
-                                               
-                                                       TelTypeUI.Append(_("video"));
-                                                       intTypeSeek++;
-                                               
-                                               } else if (TypePropertyName == wxT("pager")){
-                                               
-                                                       TelTypeUI.Append(_("pager"));
-                                                       intTypeSeek++;
-                                               
-                                               } else if (TypePropertyName == wxT("textphone")){
-                                               
-                                                       TelTypeUI.Append(_("textphone"));
-                                                       intTypeSeek++;
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                               
-                               
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 4;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               // Process properties.
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralTelephoneListAltID.erase(intValueSeek); GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTelephoneListAltID.erase(intValueSeek); HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTelephoneListAltID.erase(intValueSeek); BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralTelephoneListPID.erase(intValueSeek); GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTelephoneListPID.erase(intValueSeek); HomeTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTelephoneListPID.erase(intValueSeek); BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                                       
-                                       if (intPref > 0 && intPref < 101){
-                               
-                                               if (intType == 0){ GeneralTelephoneListPref.erase(intValueSeek); GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 1){ HomeTelephoneListPref.erase(intValueSeek); HomeTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 2){ BusinessTelephoneListPref.erase(intValueSeek); BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               
-                                       }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Split the address. 
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 1){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }
-                       
-                       // Split the data into several parts.                   
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               if (intiter->first == 1){
-                               
-                                       // Deal with PO Box.
-                                       
-                                       SLiter = SplitLength.find(1);
-                                                                               
-                                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-                                       TelType = wxSPropertySeg2.Mid(0, SLiter->second);
-                                       intPrevValue = intiter->second;
-                                       
-                                       TelNumber = wxSPropertySeg2.Mid(intPrevValue);                                  
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&PropertyValue);
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(TelNumber);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboTelephone->InsertItem(coldata);
-                               
-                               lboTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }                               
-                               
-                               GeneralTelephoneList.erase(intValueSeek);
-                               GeneralTelephoneListType.erase(intValueSeek);
-                               GeneralTelephoneListTokens.erase(intValueSeek);
-                               GeneralTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
-                               GeneralTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
-                               GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeTelephone->InsertItem(coldata);
-
-                               lboHomeTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeTelephoneList.erase(intValueSeek);
-                               HomeTelephoneListType.erase(intValueSeek);
-                               HomeTelephoneListTokens.erase(intValueSeek);                            
-                               HomeTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
-                               HomeTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
-                               HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessTelephone->InsertItem(coldata);
-
-                               lboBusinessTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessTelephoneList.erase(intValueSeek);
-                               BusinessTelephoneListType.erase(intValueSeek);
-                               BusinessTelephoneListTokens.erase(intValueSeek);                                
-                               BusinessTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
-                               BusinessTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
-                               BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                               
-                       
-                       }
-                       
-                       TelCount++;
-                       intValueSeek++;
-               
-               } else if (wxSProperty == wxT("LANG")){
-               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 6;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 5;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralLanguageListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeLanguageListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessLanguageListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 5;                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);                          
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralLanguageListAltID.erase(intValueSeek); GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeLanguageListAltID.erase(intValueSeek); HomeLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessLanguageListAltID.erase(intValueSeek); BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralLanguageListPID.erase(intValueSeek); GeneralLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeLanguageListPID.erase(intValueSeek); HomeLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessLanguageListPID.erase(intValueSeek); BusinessLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ GeneralLanguageListPref.erase(intValueSeek); GeneralLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ HomeLanguageListPref.erase(intValueSeek); HomeLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ BusinessLanguageListPref.erase(intValueSeek); BusinessLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboLanguages->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralLanguageList.erase(intValueSeek);
-                               GeneralLanguageListType.erase(intValueSeek);
-                               GeneralLanguageListTokens.erase(intValueSeek);
-                               GeneralLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralLanguageListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeLanguages->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeLanguageList.erase(intValueSeek);
-                               HomeLanguageListType.erase(intValueSeek);
-                               HomeLanguageListTokens.erase(intValueSeek);                             
-                               HomeLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeLanguageListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessLanguages->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessLanguageList.erase(intValueSeek);
-                               BusinessLanguageListType.erase(intValueSeek);
-                               BusinessLanguageListTokens.erase(intValueSeek);                         
-                               BusinessLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessLanguageListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                                
-                       
-                       }
-                       
-                       LangCount++;
-                       intValueSeek++;
-               
-               } else if (wxSProperty == wxT("GEO")){
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       wxString GeoType;
-                       wxString GeoData;
-                       bool FirstToken = TRUE;                 
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 5;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 4;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralGeographyListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeGeographyListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessGeographyListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 4;                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }       
-
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralGeographyListAltID.erase(intValueSeek); GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeGeographyListAltID.erase(intValueSeek); HomeGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessGeographyListAltID.erase(intValueSeek); BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralGeographyListPID.erase(intValueSeek); GeneralGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeGeographyListPID.erase(intValueSeek); HomeGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessGeographyListPID.erase(intValueSeek); BusinessGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       if (intType == 0){ GeneralGeographyListMediatype.erase(intValueSeek); GeneralGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeGeographyListMediatype.erase(intValueSeek); HomeGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessGeographyListMediatype.erase(intValueSeek); BusinessGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intPref > 0 && intPref < 101){
-                               
-                                               if (intType == 0){ GeneralGeographyListPref.erase(intValueSeek); GeneralGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 1){ HomeGeographyListPref.erase(intValueSeek); HomeGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                               else if (intType == 2){ BusinessGeographyListPref.erase(intValueSeek); BusinessGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       
-                                       }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }                                       
-                       
-                       // Split the address. 
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 1){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               if (intiter->first == 1){
-                               
-                                       // Deal with PO Box.
-                                       
-                                       SLiter = SplitLength.find(1);
-                                                                               
-                                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-                                       GeoType = wxSPropertySeg2.Mid(0, SLiter->second);
-                                       intPrevValue = intiter->second;
-                                       
-                                       GeoData = wxSPropertySeg2.Mid(intPrevValue);                                    
-                               
-                               }
-                       
-                       }
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-
-                       
-                       if (intType == 0){
-                       
-                               /*
-                       
-                               ListCtrlIndex = lboTimezones->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               */
-                               /*
-                               txtGeopositioning->SetValue(GeoData);
-                               */
-                               
-                               GeneralGeographyList.erase(intValueSeek);
-                               GeneralGeographyListType.erase(intValueSeek);
-                               GeneralGeographyListTokens.erase(intValueSeek);
-                               GeneralGeographyList.insert(std::make_pair(intValueSeek, GeoData));
-                               GeneralGeographyListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                               
-                               CaptureString(&GeoData, FALSE);
-                               coldata.SetText(GeoData);
-                               ListCtrlIndex = lboGeoposition->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                       
-                       } else if (intType == 1){                       
-                       
-                               /*
-                       
-                               ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               */
-                               
-                               /*
-                               txtHomeGeopositioning->SetValue(GeoData);
-                               */
-
-                               HomeGeographyList.erase(intValueSeek);
-                               HomeGeographyListType.erase(intValueSeek);
-                               HomeGeographyListTokens.erase(intValueSeek);                            
-                               HomeGeographyList.insert(std::make_pair(intValueSeek, GeoData));
-                               HomeGeographyListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                               
-                               CaptureString(&GeoData, FALSE);
-                               coldata.SetText(GeoData);
-                               ListCtrlIndex = lboHomeGeoposition->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);                    
-                       
-                               /*
-                       
-                               ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               */
-                               
-                               /*
-                               txtBusinessGeopositioning->SetValue(GeoData);
-                               */
-
-                               BusinessGeographyList.erase(intValueSeek);
-                               BusinessGeographyListType.erase(intValueSeek);
-                               BusinessGeographyListTokens.erase(intValueSeek);                                
-                               BusinessGeographyList.insert(std::make_pair(intValueSeek, GeoData));
-                               BusinessGeographyListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                               
-                               CaptureString(&GeoData, FALSE);
-                               coldata.SetText(GeoData);
-                               ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                       
-                       }
-                       
-                       GeoCount++;
-                       intValueSeek++;         
-               
-               } else if (wxSProperty == wxT("RELATED")){
-                       
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       wxString RelatedType;
-                       wxString RelatedTypeOriginal;                   
-                       wxString RelatedName;
-                       bool FirstToken = TRUE;                 
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 9;
-                       int intPref = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 8;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process these.
-                               
-                               RelatedTypeOriginal = PropertyValue;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("contact")){
-               
-                                               RelatedType = _("Contact");
-               
-                                       } else if (PropertyValue == wxT("acquaintance")){
-               
-                                               RelatedType = _("Acquaintance");
-               
-                                       } else if (PropertyValue == wxT("friend")){
-               
-                                               RelatedType = _("Friend");
-               
-                                       } else if (PropertyValue == wxT("met")){
-               
-                                               RelatedType = _("Met");
-               
-                                       } else if (PropertyValue == wxT("co-worker")){
-               
-                                               RelatedType = _("Co-worker");
-               
-                                       } else if (PropertyValue == wxT("colleague")){
-               
-                                               RelatedType = _("Colleague");
-               
-                                       } else if (PropertyValue == wxT("co-resident")){
-               
-                                               RelatedType = _("Co-resident");
-               
-                                       } else if (PropertyValue == wxT("neighbor")){
-               
-                                               RelatedType = _("Neighbour");
-               
-                                       } else if (PropertyValue == wxT("child")){
-               
-                                               RelatedType = _("Child");
-               
-                                       } else if (PropertyValue == wxT("parent")){
-               
-                                               RelatedType = _("Parent");
-               
-                                       } else if (PropertyValue == wxT("sibling")){
-               
-                                               RelatedType = _("Sibling");
-               
-                                       } else if (PropertyValue == wxT("spouse")){
-               
-                                               RelatedType = _("Spouse");
-               
-                                       } else if (PropertyValue == wxT("kin")){
-               
-                                               RelatedType = _("Kin");
-               
-                                       } else if (PropertyValue == wxT("muse")){
-               
-                                               RelatedType = _("Muse");
-               
-                                       } else if (PropertyValue == wxT("crush")){
-               
-                                               RelatedType = _("Crush");
-               
-                                       } else if (PropertyValue == wxT("date")){
-               
-                                               RelatedType = _("Date");
-               
-                                       } else if (PropertyValue == wxT("sweetheart")){
-               
-                                               RelatedType = _("Sweetheart");
-               
-                                       } else if (PropertyValue == wxT("me")){
-               
-                                               RelatedType = _("Me");
-               
-                                       } else if (PropertyValue == wxT("agent")){
-               
-                                               RelatedType = _("Agent");
-               
-                                       } else if (PropertyValue == wxT("emergency")){
-               
-                                               RelatedType = _("Emergency");
-               
-                                       } else {
-               
-                                               RelatedType = PropertyValue;
-               
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       intPrevValue = 8;                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);                  
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       GeneralRelatedListAltID.erase(intValueSeek);
-                                       GeneralRelatedListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       GeneralRelatedListPID.erase(intValueSeek);
-                                       GeneralRelatedListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intPref > 0 && intPref < 101){
-                               
-                                               GeneralRelatedListPref.erase(intValueSeek);
-                                               GeneralRelatedListPref.insert(std::make_pair(intValueSeek, intPref));
-
-                                       
-                                       }
-                               
-                               } else if (PropertyName == wxT("LANGUAGE")){
-                               
-                                       GeneralRelatedListLanguage.erase(intValueSeek);
-                                       GeneralRelatedListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }                                       
-                       
-                       // Split the address. 
-               
-                       //std::map<int, int>::iterator SLiter;
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(RelatedType);
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-
-                       ListCtrlIndex = lboRelated->InsertItem(coldata);
-
-                       lboRelated->SetItem(ListCtrlIndex, 1, wxSPropertySeg2);
-
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboRelated->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                       }
-                               
-                       GeneralRelatedList.erase(intValueSeek);
-                       GeneralRelatedListRelType.erase(intValueSeek);
-                       GeneralRelatedListType.erase(intValueSeek);
-                       GeneralRelatedListTokens.erase(intValueSeek);
-                       GeneralRelatedList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                       GeneralRelatedListRelType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));                    
-                       GeneralRelatedListType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));
-                       GeneralRelatedListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       RelatedCount++;
-                       intValueSeek++;                 
-               
-               } else if (wxSProperty == wxT("URL")){
-               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 5;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 4;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 4;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);          
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralWebsiteListAltID.erase(intValueSeek); GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeWebsiteListAltID.erase(intValueSeek); HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessWebsiteListAltID.erase(intValueSeek); BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralWebsiteListPID.erase(intValueSeek); GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeWebsiteListPID.erase(intValueSeek); HomeWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessWebsiteListPID.erase(intValueSeek); BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ GeneralWebsiteListPref.erase(intValueSeek); GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ HomeWebsiteListPref.erase(intValueSeek); HomeWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ BusinessWebsiteListPref.erase(intValueSeek); BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       if (intType == 0){ GeneralWebsiteListMediatype.erase(intValueSeek); GeneralWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeWebsiteListMediatype.erase(intValueSeek); HomeWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessWebsiteListMediatype.erase(intValueSeek); BusinessWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboWebsites->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralWebsiteList.erase(intValueSeek);
-                               GeneralWebsiteListType.erase(intValueSeek);
-                               GeneralWebsiteListTokens.erase(intValueSeek);
-                               GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralWebsiteListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeWebsites->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeWebsiteList.erase(intValueSeek);
-                               HomeWebsiteListType.erase(intValueSeek);
-                               HomeWebsiteListTokens.erase(intValueSeek);                              
-                               HomeWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeWebsiteListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessWebsites->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessWebsiteList.erase(intValueSeek);
-                               BusinessWebsiteListType.erase(intValueSeek);
-                               BusinessWebsiteListTokens.erase(intValueSeek);                          
-                               BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessWebsiteListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                         
-                       
-                       }
-                       
-                       URLCount++;
-                       intValueSeek++;
-               
-               } else if (wxSProperty == wxT("TITLE")) {
-               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 7;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 6;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralTitleList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTitleListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeTitleList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTitleListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                            
-                       
-                       } else if (intType == 2){
-
-                               BusinessTitleList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTitleListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                                
-                       
-                       }
-                       
-                       intPrevValue = 6;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralTitleListAltID.erase(intValueSeek); GeneralTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTitleListAltID.erase(intValueSeek); HomeTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTitleListAltID.erase(intValueSeek); BusinessTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralTitleListPID.erase(intValueSeek); GeneralTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTitleListPID.erase(intValueSeek); HomeTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTitleListPID.erase(intValueSeek); BusinessTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ GeneralTitleListPref.erase(intValueSeek); GeneralTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ HomeTitleListPref.erase(intValueSeek); HomeTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ BusinessTitleListPref.erase(intValueSeek); BusinessTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("LANGUAGE")){
-                               
-                                       if (intType == 0){ GeneralTitleListLanguage.erase(intValueSeek); GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeTitleListLanguage.erase(intValueSeek); HomeTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessTitleListLanguage.erase(intValueSeek); BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboTitles->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralTitleList.erase(intValueSeek);
-                               GeneralTitleListType.erase(intValueSeek);
-                               GeneralTitleListTokens.erase(intValueSeek);
-                               GeneralTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralTitleListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeTitles->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeTitleList.erase(intValueSeek);
-                               HomeTitleListType.erase(intValueSeek);
-                               HomeTitleListTokens.erase(intValueSeek);                                
-                               HomeTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeTitleListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessTitles->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessTitleList.erase(intValueSeek);
-                               BusinessTitleListType.erase(intValueSeek);
-                               BusinessTitleListTokens.erase(intValueSeek);                            
-                               BusinessTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessTitleListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                           
-                       
-                       }
-                       
-                       TitleCount++;
-                       intValueSeek++;
-                       
-               } else if (wxSProperty == wxT("ROLE")) {
-               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 6;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 5;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralRoleList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralRoleListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeRoleList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeRoleListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                             
-                       
-                       } else if (intType == 2){
-
-                               BusinessRoleList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessRoleListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                         
-                       
-                       }
-                       
-                       intPrevValue = 5;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralRoleListAltID.erase(intValueSeek); GeneralRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeRoleListAltID.erase(intValueSeek); HomeRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessRoleListAltID.erase(intValueSeek); BusinessRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralRoleListPID.erase(intValueSeek); GeneralRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeRoleListPID.erase(intValueSeek); HomeRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessRoleListPID.erase(intValueSeek); BusinessRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ GeneralRoleListPref.erase(intValueSeek); GeneralRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ HomeRoleListPref.erase(intValueSeek); HomeRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ BusinessRoleListPref.erase(intValueSeek); BusinessRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("LANGUAGE")){
-                               
-                                       if (intType == 0){ GeneralRoleListLanguage.erase(intValueSeek); GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeRoleListLanguage.erase(intValueSeek); HomeRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessRoleListLanguage.erase(intValueSeek); BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboRoles->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralRoleList.erase(intValueSeek);
-                               GeneralRoleListType.erase(intValueSeek);
-                               GeneralRoleListTokens.erase(intValueSeek);
-                               GeneralRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralRoleListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeRoles->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeRoleList.erase(intValueSeek);
-                               HomeRoleListType.erase(intValueSeek);
-                               HomeRoleListTokens.erase(intValueSeek);                         
-                               HomeRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeRoleListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessRoles->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessRoleList.erase(intValueSeek);
-                               BusinessRoleListType.erase(intValueSeek);
-                               BusinessRoleListTokens.erase(intValueSeek);                             
-                               BusinessRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessRoleListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                            
-                       
-                       }
-                       
-                       RoleCount++;
-                       intValueSeek++;
-                       
-               } else if (wxSProperty == wxT("ORG")) {
-               
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 5;
-                       int intPref = 0;
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 4;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));                          
-                       
-                       }
-                       
-                       intPrevValue = 4;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralOrganisationsListAltID.erase(intValueSeek); GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeOrganisationsListAltID.erase(intValueSeek); HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessOrganisationsListAltID.erase(intValueSeek); BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralOrganisationsListPID.erase(intValueSeek); GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeOrganisationsListPID.erase(intValueSeek); HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessOrganisationsListPID.erase(intValueSeek); BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ GeneralOrganisationsListPref.erase(intValueSeek); GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ HomeOrganisationsListPref.erase(intValueSeek); HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ BusinessOrganisationsListPref.erase(intValueSeek); BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("LANGUAGE")){
-                               
-                                       if (intType == 0){ GeneralOrganisationsListLanguage.erase(intValueSeek); GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeOrganisationsListLanguage.erase(intValueSeek); HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessOrganisationsListLanguage.erase(intValueSeek); BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("SORT-AS")){
-                               
-                                       if (intType == 0){ GeneralOrganisationsListSortAs.erase(intValueSeek); GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeOrganisationsListSortAs.erase(intValueSeek); HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessOrganisationsListSortAs.erase(intValueSeek); BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-                       
-                       if (intType == 0){
-                       
-                               ListCtrlIndex = lboOrganisations->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               GeneralOrganisationsList.erase(intValueSeek);
-                               GeneralOrganisationsListType.erase(intValueSeek);
-                               GeneralOrganisationsListTokens.erase(intValueSeek);
-                               GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 1){ 
-                       
-                               ListCtrlIndex = lboHomeOrganisations->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               HomeOrganisationsList.erase(intValueSeek);
-                               HomeOrganisationsListType.erase(intValueSeek);
-                               HomeOrganisationsListTokens.erase(intValueSeek);                                
-                               HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       } else if (intType == 2){ 
-                       
-                               ListCtrlIndex = lboBusinessOrganisations->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-
-                               BusinessOrganisationsList.erase(intValueSeek);
-                               BusinessOrganisationsListType.erase(intValueSeek);
-                               BusinessOrganisationsListTokens.erase(intValueSeek);                            
-                               BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                           
-                       
-                       }
-                       
-                       OrgCount++;
-                       intValueSeek++;
-                       
-               } else if (wxSProperty == wxT("NOTE")) {
-
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 6;
-                       int intPref = 0;                        
-                       int intType = 0;
-            long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 5;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       if (intType == 0){
-                       
-                               GeneralNoteList.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNoteListPref.insert(std::make_pair(intValueSeek, 0));
-                               GeneralNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       } else if (intType == 1){
-                       
-                               HomeNoteList.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNoteListPref.insert(std::make_pair(intValueSeek, 0));
-                               HomeNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               HomeNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 2){
-
-                               BusinessNoteList.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNoteListPref.insert(std::make_pair(intValueSeek, 0));
-                               BusinessNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                               BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       }
-                       
-                       intPrevValue = 5;                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);                          
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ GeneralNoteListAltID.erase(intValueSeek); GeneralNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeNoteListAltID.erase(intValueSeek); HomeNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessNoteListAltID.erase(intValueSeek); BusinessNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ GeneralNoteListPID.erase(intValueSeek); GeneralNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeNoteListPID.erase(intValueSeek); HomeNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessNoteListPID.erase(intValueSeek); BusinessNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ GeneralNoteListPref.erase(intValueSeek); GeneralNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ HomeNoteListPref.erase(intValueSeek); HomeNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ BusinessNoteListPref.erase(intValueSeek); BusinessNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("LANGUAGE")){
-                               
-                                       if (intType == 0){ GeneralNoteListLanguage.erase(intValueSeek); GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ HomeNoteListLanguage.erase(intValueSeek); HomeNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ BusinessNoteListLanguage.erase(intValueSeek); BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       
-                       if (intType == 0){
-                       
-                               GeneralNoteList.erase(intValueSeek);
-                               GeneralNoteListType.erase(intValueSeek);
-                               GeneralNoteListTokens.erase(intValueSeek);
-                               GeneralNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               GeneralNoteListType.insert(std::make_pair(intValueSeek, wxT("")));
-                               GeneralNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                     
-                       
-                               //CaptureString(&wxSPropertySeg2, FALSE);
-       
-                               coldata.SetText(wxSPropertySeg2);
-                       
-                               ListCtrlIndex = lboNotes->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                       
-                       } else if (intType == 1){ 
-                       
-                               HomeNoteList.erase(intValueSeek);
-                               HomeNoteListType.erase(intValueSeek);
-                               HomeNoteListTokens.erase(intValueSeek);                         
-                               HomeNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               HomeNoteListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               HomeNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                        
-                       
-                               CaptureString(&wxSPropertySeg2, FALSE);
-       
-                               coldata.SetText(wxSPropertySeg2);                       
-                       
-                               ListCtrlIndex = lboHomeNotes->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboHomeNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                       
-                       } else if (intType == 2){ 
-                       
-                               BusinessNoteList.erase(intValueSeek);
-                               BusinessNoteListType.erase(intValueSeek);
-                               BusinessNoteListTokens.erase(intValueSeek);                             
-                               BusinessNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                               BusinessNoteListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               BusinessNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                    
-                       
-                               CaptureString(&wxSPropertySeg2, FALSE);
-       
-                               coldata.SetText(wxSPropertySeg2);
-                       
-                               ListCtrlIndex = lboBusinessNotes->InsertItem(coldata);
-
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboBusinessNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }                               
-                       
-                       }
-                       
-                       NoteCount++;
-                       intValueSeek++;
-                       
-               } else if (wxSProperty == wxT("CATEGORIES")) {
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       wxString PropertyType;
-                       bool AfterFirstToken = FALSE;
-                       bool FirstToken = TRUE;                 
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 12;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       int intSplitSeek = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 11;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;
-                                               PropertyType = wxT("work");                             
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                               PropertyType = wxT("home");                                             
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       CategoriesList.insert(std::make_pair(intValueSeek, wxT("")));
-                       CategoriesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       CategoriesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       CategoriesListPref.insert(std::make_pair(intValueSeek, 0));
-                       CategoriesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       intPrevValue = 11;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }                       
-                       
-                       // Deal with multiple categories.
-                       
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitSize = 0;
-                       intSplitsFound = 0;
-                       intSplitSeek = 0;
-                       intPrevValue = 0;
-                       intPropertyLen = wxSPropertySeg2.Len(); 
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-                       
-                               if (intSplitSize == 0 && wxSPropertySeg2.Mid(i, 1) == wxT(" ")){
-                       
-                                       continue;
-                               
-                               }
-                       
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(",") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       if (AfterFirstToken == TRUE){
-                       
-                                               SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                               SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
-                                       
-                                       } else {
-                                       
-                                               SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));                                 
-                                               AfterFirstToken = TRUE;
-                                       
-                                       }
-
-                                       intSplitsFound++;
-                                       intSplitSeek = i;
-                                       intSplitSize = 0;                                       
-                       
-                               }                       
-                       
-                       }
-                       
-                       SplitPoints.insert(std::make_pair(intSplitsFound, (intSplitSeek + 1)));
-                       SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));                       
-                       
-                       intPrevValue = 0;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg2.Mid(intPrevValue, (SLiter->second + 1));
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               /*
-                               
-                               int intPropertyValueLen = PropertyValue.Len();                          
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }
-                               
-                               */
-                               
-                               // Add the data to the General/Home/Work address variables.
-                       
-                               // Trim any whitespace from the start and end.
-                       
-                               PropertyData = PropertyData.Trim(FALSE);
-                               PropertyData = PropertyData.Trim(TRUE);                         
-                       
-                               ProcessCaptureStrings(&PropertyData);
-                       
-                               wxListItem coldata;
-               
-                               coldata.SetId(intValueSeek);
-                               coldata.SetData(intValueSeek);
-                               coldata.SetText(PropertyData);
-                       
-                               ListCtrlIndex = lboCategories->InsertItem(coldata);
-                               
-                               if (intPref > 0 && intPref < 101){
-                               
-                                       lboCategories->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                                       
-                               }
-                               
-                               CategoriesList.erase(intValueSeek);
-                               CategoriesListType.erase(intValueSeek);
-                               CategoriesListTokens.erase(intValueSeek);
-                               CategoriesList.insert(std::make_pair(intValueSeek, PropertyData));
-                               CategoriesListType.insert(std::make_pair(intValueSeek, PropertyType));
-                               CategoriesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                               CategoryCount++;
-                               intValueSeek++;                         
-                       
-                       }       
-                       
-               } else if (wxSProperty == wxT("PHOTO")) {
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 7;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 6;
-                       
-                       // Look for type before continuing.                     
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       PicturesList.insert(std::make_pair(intValueSeek, ""));
-                       PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       PicturesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       PicturesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       PicturesListPref.insert(std::make_pair(intValueSeek, 0));
-                       PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
-                       PicturesListPictureType.insert(std::make_pair(intValueSeek, wxT("")));                  
-                       PicturesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       PicturesListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       intPrevValue = 6;
-
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);          
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       if (intType == 0){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }       
-                       
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;                       
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 6){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       } else {
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                       
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }
-                       
-                       wxString wxSPhotoURI;
-                       wxString wxSPhotoMIME;
-                       wxString wxSPhotoEncoding;
-                       wxString wxSPhotoData;
-                       std::string base64enc;
-                       
-                       if (intSplitsFound == 0){
-                       
-                       } else {
-                       
-                               std::map<int, int>::iterator striter;
-                       
-                               striter = SplitLength.find(1);
-                       
-                               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-                       
-                               while (wSTDataType.HasMoreTokens() == TRUE){
-                               
-                                       wxSPhotoURI = wSTDataType.GetNextToken();
-                                       wxSPhotoMIME = wSTDataType.GetNextToken();
-                                       break;
-                               
-                               }                       
-                       
-                               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));                    
-                       
-                               while (wSTDataInfo.HasMoreTokens() == TRUE){
-                               
-                                       wxSPhotoEncoding = wSTDataInfo.GetNextToken();
-                                       wxSPhotoData = wSTDataInfo.GetNextToken();                                      
-                                       base64enc = wxSPhotoData.mb_str();
-                                       break;
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(_("Picture"));
-                       
-                       ListCtrlIndex = lboPictures->InsertItem(coldata);
-                               
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboPictures->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                       
-                       }
-                               
-                       PicturesList.erase(intValueSeek);
-                       PicturesListType.erase(intValueSeek);
-                       PicturesListTokens.erase(intValueSeek);
-                       PicturesListPictureType.erase(intValueSeek);
-                       PicturesListPicEncType.erase(intValueSeek);
-                       PicturesList.insert(std::make_pair(intValueSeek, base64enc));
-                       PicturesListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
-                       PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
-                       
-                       if (intType == 0){
-                       
-                               PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 1){
-                       
-                               PicturesListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               lboPictures->SetItem(ListCtrlIndex, 1, _("Home"));
-                       
-                       } else if (intType == 2){
-                       
-                               PicturesListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               lboPictures->SetItem(ListCtrlIndex, 1, _("Work"));
-                       
-                       }
-                       
-                       PicturesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       PhotoCount++;
-                       intValueSeek++;
-                       
-               } else if (wxSProperty == wxT("LOGO")) {
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 6;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 5;
-                       
-                       // Look for type before continuing.                     
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       LogosList.insert(std::make_pair(intValueSeek, ""));
-                       LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       LogosListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       LogosListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       LogosListPref.insert(std::make_pair(intValueSeek, 0));
-                       LogosListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
-                       LogosListPictureType.insert(std::make_pair(intValueSeek, wxT("")));                     
-                       LogosListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       LogosListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       intPrevValue = 5;
-
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }
-                               
-                               ProcessCaptureStrings(&PropertyValue);  
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       if (intType == 0){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }       
-                       
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       wxString wxSPhotoURI;
-                       wxString wxSPhotoMIME;
-                       wxString wxSPhotoEncoding;
-                       wxString wxSPhotoData;
-                       std::string base64enc;
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);
-                       
-                       if (intSplitsFound == 0){
-                       
-                       } else {
-                       
-                               std::map<int, int>::iterator striter;
-                       
-                               striter = SplitLength.find(1);
-                       
-                               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-                       
-                               while (wSTDataType.HasMoreTokens() == TRUE){
-                               
-                                       wxSPhotoURI = wSTDataType.GetNextToken();
-                                       wxSPhotoMIME = wSTDataType.GetNextToken();
-                                       break;
-                               
-                               }                       
-                       
-                               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));                    
-                       
-                               while (wSTDataInfo.HasMoreTokens() == TRUE){
-                               
-                                       wxSPhotoEncoding = wSTDataInfo.GetNextToken();
-                                       wxSPhotoData = wSTDataInfo.GetNextToken();                                      
-                                       base64enc = wxSPhotoData.mb_str();
-                                       break;
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(_("Picture"));
-                       
-                       ListCtrlIndex = lboLogos->InsertItem(coldata);
-                               
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboLogos->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                       
-                       }
-                               
-                       LogosList.erase(intValueSeek);
-                       LogosListType.erase(intValueSeek);
-                       LogosListTokens.erase(intValueSeek);
-                       LogosListPictureType.erase(intValueSeek);
-                       LogosListPicEncType.erase(intValueSeek);
-                       LogosList.insert(std::make_pair(intValueSeek, base64enc));
-                       LogosListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
-                       LogosListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
-                       
-                       if (intType == 0){
-                       
-                               LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 1){
-                       
-                               LogosListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));
-                       
-                       } else if (intType == 2){
-                       
-                               LogosListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));                         
-                       
-                       }
-                       
-                       LogosListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       LogoCount++;
-                       intValueSeek++;
-                       
-               } else if (wxSProperty == wxT("SOUND")) {
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 7;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 6;
-                       
-                       // Look for type before continuing.                     
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       SoundsList.insert(std::make_pair(intValueSeek, ""));
-                       SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       SoundsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       SoundsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       SoundsListPref.insert(std::make_pair(intValueSeek, 0));
-                       SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxT("")));
-                       SoundsListAudioType.insert(std::make_pair(intValueSeek, wxT("")));                      
-                       SoundsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       SoundsListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       intPrevValue = 6;
-
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                       
-                               
-                               ProcessCaptureStrings(&PropertyValue);
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       if (intType == 0){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       if (intType == 0){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       if (intType == 0){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 1){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                                       else if (intType == 2){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       if (intType == 0){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 1){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                                       else if (intType == 2){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }       
-                       
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;
-                       
-                       ProcessCaptureStrings(&wxSPropertySeg2);        
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 6){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       } else {
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                       
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }
-                       
-                       wxString wxSSoundURI;
-                       wxString wxSSoundMIME;
-                       wxString wxSSoundEncoding;
-                       wxString wxSSoundData;
-                       std::string base64enc;
-                       
-                       if (intSplitsFound == 0){
-                       
-                       } else {
-                       
-                               std::map<int, int>::iterator striter;
-                       
-                               striter = SplitLength.find(1);
-                       
-                               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-                       
-                               while (wSTDataType.HasMoreTokens() == TRUE){
-                               
-                                       wxSSoundURI = wSTDataType.GetNextToken();
-                                       wxSSoundMIME = wSTDataType.GetNextToken();
-                                       break;
-                               
-                               }                       
-                       
-                               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));                    
-                       
-                               while (wSTDataInfo.HasMoreTokens() == TRUE){
-                               
-                                       wxSSoundEncoding = wSTDataInfo.GetNextToken();
-                                       wxSSoundData = wSTDataInfo.GetNextToken();                                      
-                                       base64enc = wxSSoundData.mb_str();
-                                       break;
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(_("Sound"));
-                       
-                       ListCtrlIndex = lboSounds->InsertItem(coldata);
-                               
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboSounds->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                       
-                       }
-                               
-                       SoundsList.erase(intValueSeek);
-                       SoundsListType.erase(intValueSeek);
-                       SoundsListTokens.erase(intValueSeek);
-                       SoundsListAudioType.erase(intValueSeek);
-                       SoundsListAudioEncType.erase(intValueSeek);
-                       SoundsList.insert(std::make_pair(intValueSeek, base64enc));
-                       SoundsListAudioType.insert(std::make_pair(intValueSeek, wxSSoundMIME));
-                       SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxSSoundEncoding));
-                       
-                       if (intType == 0){
-                       
-                               SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       } else if (intType == 1){
-                       
-                               SoundsListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));                 
-                       
-                       } else if (intType == 2){
-                       
-                               SoundsListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));
-                       
-                       }
-                       
-                       SoundsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       SoundCount++;
-                       intValueSeek++;
-                       
-               } else if (wxSProperty == wxT("CALURI")){
-
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 8;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 7;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       CalendarList.insert(std::make_pair(intValueSeek, wxT("")));
-                       CalendarListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       CalendarListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       CalendarListPref.insert(std::make_pair(intValueSeek, 0));
-                       CalendarListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       intPrevValue = 6;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       CalendarListAltID.erase(intValueSeek); CalendarListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       CalendarListPID.erase(intValueSeek); CalendarListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       CalendarListPref.erase(intValueSeek); CalendarListPref.insert(std::make_pair(intValueSeek, intPref));
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       CalendarListMediatype.erase(intValueSeek); CalendarListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-
-                       ListCtrlIndex = lboCalendarAddresses->InsertItem(coldata);
-                               
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboCalendarAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                       }
-                       
-                       CaptureString(&wxSPropertySeg2, FALSE);
-                               
-                       CalendarList.erase(intValueSeek);
-                       CalendarListType.erase(intValueSeek);
-                       CalendarListTokens.erase(intValueSeek);
-                       CalendarList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                       
-                       if (intType == 0){
-                       
-                               CalendarListType.insert(std::make_pair(intValueSeek, wxT("")));                         
-                       
-                       } else if (intType == 1){
-                       
-                               CalendarListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
-                       
-                       } else if (intType == 2){
-                       
-                               CalendarListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
-                       
-                       }
-                       
-                       CalendarListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       CalAdrCount++;
-                       intValueSeek++;
-               
-               } else if (wxSProperty == wxT("CALADRURI")){
-
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 11;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 10;
-                       
-                       // Look for type before continuing.
-                       
-                       
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       CalendarRequestList.insert(std::make_pair(intValueSeek, wxT("")));
-                       CalendarRequestListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       CalendarRequestListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       CalendarRequestListPref.insert(std::make_pair(intValueSeek, 0));
-                       CalendarRequestListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       intPrevValue = 10;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       CalendarRequestListAltID.erase(intValueSeek); CalendarRequestListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       CalendarRequestListPID.erase(intValueSeek); CalendarRequestListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       CalendarRequestListPref.erase(intValueSeek); CalendarRequestListPref.insert(std::make_pair(intValueSeek, intPref));
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       CalendarRequestListMediatype.erase(intValueSeek); CalendarRequestListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-
-                       ListCtrlIndex = lboCalendarRequestAddress->InsertItem(coldata);
-                               
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboCalendarRequestAddress->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                       }
-                               
-                       CaptureString(&wxSPropertySeg2, FALSE);                         
-                               
-                       CalendarRequestList.erase(intValueSeek);
-                       CalendarRequestListType.erase(intValueSeek);
-                       CalendarRequestListTokens.erase(intValueSeek);
-                       CalendarRequestList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));                      
-                       
-                       if (intType == 0){
-                       
-                               CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("")));                          
-                       
-                       } else if (intType == 1){
-                       
-                               CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
-                       
-                       } else if (intType == 2){
-                       
-                               CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
-                       
-                       }
-                       
-                       CalendarRequestListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       CalReqAdrCount++;
-                       intValueSeek++;
-               
-               } else if (wxSProperty == wxT("FBURL")){
-
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intPrevValue = 7;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 6;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       FreeBusyList.insert(std::make_pair(intValueSeek, wxT("")));
-                       FreeBusyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       FreeBusyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       FreeBusyListPref.insert(std::make_pair(intValueSeek, 0));
-                       FreeBusyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-                       
-                       intPrevValue = 6;
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       FreeBusyListAltID.erase(intValueSeek); FreeBusyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       FreeBusyListPID.erase(intValueSeek); FreeBusyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       FreeBusyListPref.erase(intValueSeek); FreeBusyListPref.insert(std::make_pair(intValueSeek, intPref));
-                               
-                               } else if (PropertyName == wxT("MEDIATYPE")){
-                               
-                                       FreeBusyListMediatype.erase(intValueSeek); FreeBusyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                               
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                               
-                                               if (FirstToken == TRUE){
-                                       
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                       
-                                               } else {
-                                       
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                       
-                                               }
-                               
-                                       }
-                               
-                               }
-                       
-                       }       
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       coldata.SetText(wxSPropertySeg2);
-
-                       ListCtrlIndex = lboFreeBusyAddresses->InsertItem(coldata);
-                               
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboFreeBusyAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-                                       
-                       }
-                       
-                       CaptureString(&wxSPropertySeg2, FALSE);                 
-                               
-                       FreeBusyList.erase(intValueSeek);
-                       FreeBusyListType.erase(intValueSeek);
-                       FreeBusyListTokens.erase(intValueSeek);
-                       FreeBusyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                       
-                       if (intType == 0){
-                       
-                               FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("")));                         
-                       
-                       } else if (intType == 1){
-                       
-                               FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                               lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
-                       
-                       } else if (intType == 2){
-                       
-                               FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("work")));
-                               lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
-                       
-                       }
-                       
-                       FreeBusyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       FreeBusyCount++;
-                       intValueSeek++;
-               } else if (wxSProperty == wxT("KEY")){
-               
-                       size_t intPropertyLen = wxSPropertySeg1.Len();
-                       std::map<int, int> SplitPoints;
-                       std::map<int, int> SplitLength;
-                       std::map<int, int>::iterator SLiter;                    
-                       wxString PropertyData;
-                       wxString PropertyName;
-                       wxString PropertyValue;
-                       wxString PropertyTokens;
-                       bool FirstToken = TRUE;
-                       int intSplitsFound = 0;
-                       int intSplitSize = 0;
-                       int intPrevValue = 5;
-                       int intPref = 0;                        
-                       int intType = 0;
-                       long ListCtrlIndex;
-                       
-                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-                       
-                       intPrevValue = 4;
-                       
-                       // Look for type before continuing.
-                       
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               if (PropertyName == wxT("TYPE")){
-                               
-                                       if (PropertyValue == wxT("work")){
-                                       
-                                               intType = 2;                                    
-                                       
-                                       } else if (PropertyValue == wxT("home")){
-
-                                               intType = 1;
-                                       
-                                       } else {
-                                       
-                                               intType = 0;
-                                       
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Setup blank lines for later on.
-                       
-                       KeyList.insert(std::make_pair(intValueSeek, wxT("")));
-                       KeyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-                       KeyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-                       KeyListPref.insert(std::make_pair(intValueSeek, 0));
-                       KeyListKeyType.insert(std::make_pair(intValueSeek, FALSE));
-                       KeyListDataType.insert(std::make_pair(intValueSeek, wxT("")));
-                       KeyListDataEncType.insert(std::make_pair(intValueSeek, wxT("")));
-                       KeyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-                       intPrevValue = 4;
-
-                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-                       intiter != SplitPoints.end(); ++intiter){
-                       
-                               SLiter = SplitLength.find(intiter->first);
-                       
-                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-                               
-                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-                               PropertyName = PropertyElement.GetNextToken();                          
-                               PropertyValue = PropertyElement.GetNextToken();
-                               
-                               intPrevValue = intiter->second;
-                               
-                               // Process properties.
-                               
-                               size_t intPropertyValueLen = PropertyValue.Len();
-                               
-                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Trim();
-                                       PropertyValue.RemoveLast();
-                                       
-                               }                               
-                               
-                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
-                                       
-                                       PropertyValue.Remove(0, 1);
-                                       
-                               }                               
-                               
-                               if (PropertyName == wxT("ALTID")){
-
-                                       KeyListAltID.erase(intValueSeek); KeyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PID")){
-
-                                       KeyListPID.erase(intValueSeek); KeyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-                               
-                               } else if (PropertyName == wxT("PREF")){
-                                       
-                                       intPref = wxAtoi(PropertyValue);
-                               
-                                       KeyListPref.erase(intValueSeek); KeyListPref.insert(std::make_pair(intValueSeek, intPref));
-                               
-                               } else {
-                               
-                                       // Something else we don't know about so append
-                                       // to the tokens variable.
-                                       
-                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-                                       
-                                               if (FirstToken == TRUE){
-                                               
-                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-                                                       FirstToken = FALSE;
-                                               
-                                               } else {
-                                               
-                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-                                               
-                                               }
-                                       
-                                       }
-                               
-                               }
-                       
-                       }                               
-                       
-                       intPropertyLen = wxSPropertySeg2.Len();
-                       SplitPoints.clear();
-                       SplitLength.clear();
-                       intSplitsFound = 0;
-                       intSplitSize = 0;
-                       intPrevValue = 0;                       
-                       
-                       for (int i = 0; i <= intPropertyLen; i++){
-               
-                               intSplitSize++;
-                       
-                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-                       
-                                       intSplitsFound++;
-                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-                                       
-                                       if (intSplitsFound == 6){ 
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                               break; 
-                                               
-                                       } else {
-                                       
-                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-                                       
-                                       }
-                                       
-                                       intSplitSize = 0;                                       
-                       
-                               }
-               
-                       }
-                       
-                       wxString wxSKeyURI;
-                       wxString wxSKeyMIME;
-                       wxString wxSKeyEncoding;
-                       wxString wxSKeyData;
-                       std::string base64enc;
-                       
-                       if (intSplitsFound == 0){
-                       
-                       } else {
-                       
-                               std::map<int, int>::iterator striter;
-                       
-                               striter = SplitLength.find(1);
-                       
-                               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-                       
-                               while (wSTDataType.HasMoreTokens() == TRUE){
-                               
-                                       wxSKeyURI = wSTDataType.GetNextToken();
-                                       wxSKeyMIME = wSTDataType.GetNextToken();
-                                       break;
-                               
-                               }                       
-                       
-                               if (wxSKeyURI == wxT("data")){
-                               
-                                               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 2)), wxT(","));                    
-                       
-                                               while (wSTDataInfo.HasMoreTokens() == TRUE){
-                               
-                                               wxSKeyEncoding = wSTDataInfo.GetNextToken();
-                                               wxSKeyData = wSTDataInfo.GetNextToken();
-                                               break;
-                               
-                                       }
-                               
-                               }
-                       
-                       }
-                       
-                       // Add the data to the General/Home/Work address variables.
-                       
-                       wxListItem coldata;
-               
-                       coldata.SetId(intValueSeek);
-                       coldata.SetData(intValueSeek);
-                       
-                       if (wxSKeyURI == wxT("data")){
-                       
-                               if (wxSKeyMIME == wxT("application/pgp-keys")){
-                       
-                                       coldata.SetText(_("PGP Key"));
-                               
-                               } else {
-                               
-                                       coldata.SetText(_("Key"));
-                               
-                               }
-                               
-                               KeyListDataEncType.erase(intValueSeek);
-                               KeyListKeyType.erase(intValueSeek);
-                               KeyListDataEncType.insert(std::make_pair(intValueSeek, wxSKeyEncoding));
-                               KeyListKeyType.insert(std::make_pair(intValueSeek, TRUE));
-                               
-                               KeyList.erase(intValueSeek);
-                               KeyList.insert(std::make_pair(intValueSeek, wxSKeyData));
-                       
-                       } else {
-                       
-                               coldata.SetText(wxSPropertySeg2);
-                               
-                               KeyList.erase(intValueSeek);
-                               KeyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-                       
-                       }
-                       
-                       ListCtrlIndex = lboKeys->InsertItem(coldata);
-                               
-                       if (intPref > 0 && intPref < 101){
-                               
-                               lboKeys->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-                       
-                       }
-                               
-
-                       KeyListType.erase(intValueSeek);
-                       KeyListTokens.erase(intValueSeek);
-                       KeyListDataType.erase(intValueSeek);
-
-                       KeyListDataType.insert(std::make_pair(intValueSeek, wxSKeyMIME));
-                               
-            switch (intType){
-                case 0: KeyListType.insert(std::make_pair(intValueSeek, wxT("")));
-                case 1: KeyListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                case 2: KeyListType.insert(std::make_pair(intValueSeek, wxT("work")));
-            }
-            
-                       KeyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-                       
-                       KeyCount++;
-                       intValueSeek++;
+                       LoadKey(wxSPropertySeg1, wxSPropertySeg2, &KeyCount);
                
                } else if (wxSProperty == wxT("UID") && UIDProcessed == FALSE){
                
diff --git a/source/contacteditor/frmContactEditor-LoadAddress.cpp b/source/contacteditor/frmContactEditor-LoadAddress.cpp
new file mode 100644 (file)
index 0000000..16e8dbf
--- /dev/null
@@ -0,0 +1,439 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadADR(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *ADRCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       wxString AddressLabel;
+       wxString AddressLang;
+       wxString AddressAltID;
+       wxString AddressPID;
+       wxString AddressTokens;
+       wxString AddressGeo;
+       wxString AddressTimezone;
+       wxString AddressType;
+       wxString AddressMediatype;
+       wxString AddressPOBox;
+       wxString AddressExtended;
+       wxString AddressStreet;
+       wxString AddressLocality;
+       wxString AddressCity;
+       wxString AddressRegion;
+       wxString AddressPostalCode;
+       wxString AddressCountry;
+       bool FirstToken = TRUE;                 
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 5;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 4;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralAddressList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeAddressList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeAddressListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessAddressList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessAddressListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 4;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               // Process properties.
+               
+               if (PropertyName == wxT("LABEL")){
+               
+                       if (intType == 0){ GeneralAddressListLabel.erase(intValueSeek); GeneralAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeAddressListLabel.erase(intValueSeek); HomeAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessAddressListLabel.erase(intValueSeek); BusinessAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue));}
+               
+               } else if (PropertyName == wxT("LANGUAGE")){
+               
+                       if (intType == 0){ GeneralAddressListLang.erase(intValueSeek); GeneralAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeAddressListLang.erase(intValueSeek); HomeAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessAddressListLang.erase(intValueSeek); BusinessAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }                             
+               
+               } else if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralAddressListAltID.erase(intValueSeek); GeneralAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeAddressListAltID.erase(intValueSeek); HomeAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessAddressListAltID.erase(intValueSeek); BusinessAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralAddressListPID.erase(intValueSeek); GeneralAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeAddressListPID.erase(intValueSeek); HomeAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessAddressListPID.erase(intValueSeek); BusinessAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("GEO")){
+               
+                       if (intType == 0){ GeneralAddressListGeo.erase(intValueSeek); GeneralAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeAddressListGeo.erase(intValueSeek); HomeAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessAddressListGeo.erase(intValueSeek); BusinessAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("TZ")){
+
+                       if (intType == 0){ GeneralAddressListTimezone.erase(intValueSeek); GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeAddressListTimezone.erase(intValueSeek); HomeAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessAddressListTimezone.erase(intValueSeek); BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+
+                       if (intType == 0){ GeneralAddressListMediatype.erase(intValueSeek); GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeAddressListMediatype.erase(intValueSeek); HomeAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessAddressListMediatype.erase(intValueSeek); BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+                       
+                       if (intPref > 0 && intPref < 101){
+                                               
+                               if (intType == 0){ GeneralAddressListPref.erase(intValueSeek); GeneralAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 1){ HomeAddressListPref.erase(intValueSeek); HomeAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 2){ BusinessAddressListPref.erase(intValueSeek); BusinessAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               
+                       }
+               
+               } else {
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }                       
+       
+       // Split the address. 
+
+       //std::map<int, int>::iterator SLiter;
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 6){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       } else {
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                       
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }
+       
+       // Split the data into several parts.                   
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+                       
+               if (intiter->first == 1){
+               
+                       // Deal with PO Box.
+                       
+                       SLiter = SplitLength.find(1);
+                                                               
+                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+                       AddressPOBox = wxSPropertySeg2.Mid(0, SLiter->second);
+                       intPrevValue = intiter->second;
+               
+               } else if (intiter->first == 2){
+               
+                       // Deal with extended address.
+                       
+                       SLiter = SplitLength.find(2);
+                       
+                       AddressExtended = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+                       //txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+               
+               } else if (intiter->first == 3){
+               
+                       // Deal with street address.
+                       
+                       SLiter = SplitLength.find(3);
+                                                               
+                       AddressStreet = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+                       //txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+               
+               } else if (intiter->first == 4){
+               
+                       // Deal with locality
+
+                       SLiter = SplitLength.find(4);
+                       
+                       AddressLocality = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+                       
+                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+               
+               } else if (intiter->first == 5){
+               
+                       // Deal with region.
+
+                       SLiter = SplitLength.find(5);
+                       
+                       AddressRegion = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+                       
+                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+               
+               } else if (intiter->first == 6){
+               
+                       // Deal with post code.
+
+                       SLiter = SplitLength.find(6);
+                       
+                       AddressPostalCode = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+                       
+                       // Deal with country.
+                       
+                       AddressCountry = wxSPropertySeg2.Mid(intPrevValue);
+                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+               
+               }
+       
+       }       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&AddressStreet, &AddressLocality, &AddressRegion, &AddressPostalCode, &AddressCountry);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(AddressStreet);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboAddresses->InsertItem(coldata);
+               lboAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
+               lboAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
+               lboAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboAddresses->SetItem(ListCtrlIndex, 4, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralAddressList.erase(intValueSeek);
+               GeneralAddressListTown.erase(intValueSeek);
+               GeneralAddressListCounty.erase(intValueSeek);
+               GeneralAddressListPostCode.erase(intValueSeek);
+               GeneralAddressListCountry.erase(intValueSeek);
+               GeneralAddressListType.erase(intValueSeek);
+               GeneralAddressListTokens.erase(intValueSeek);
+               GeneralAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
+               GeneralAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
+               GeneralAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
+               GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
+               GeneralAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
+               GeneralAddressListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeAddresses->InsertItem(coldata);
+               lboHomeAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
+               lboHomeAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
+               lboHomeAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeAddressList.erase(intValueSeek);
+               HomeAddressListTown.erase(intValueSeek);
+               HomeAddressListCounty.erase(intValueSeek);
+               HomeAddressListPostCode.erase(intValueSeek);
+               HomeAddressListCountry.erase(intValueSeek);
+               HomeAddressListType.erase(intValueSeek);
+               HomeAddressListTokens.erase(intValueSeek);                              
+               HomeAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
+               HomeAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
+               HomeAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
+               HomeAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
+               HomeAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
+               HomeAddressListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessAddresses->InsertItem(coldata);
+               lboBusinessAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
+               lboBusinessAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
+               lboBusinessAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               BusinessAddressList.erase(intValueSeek);
+               BusinessAddressListTown.erase(intValueSeek);
+               BusinessAddressListCounty.erase(intValueSeek);
+               BusinessAddressListPostCode.erase(intValueSeek);
+               BusinessAddressListCountry.erase(intValueSeek);
+               BusinessAddressListType.erase(intValueSeek);
+               BusinessAddressListTokens.erase(intValueSeek);
+               BusinessAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
+               BusinessAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
+               BusinessAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
+               BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
+               BusinessAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
+               BusinessAddressListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                         
+       
+       }
+       
+       ADRCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadBADays.cpp b/source/contacteditor/frmContactEditor-LoadBADays.cpp
new file mode 100644 (file)
index 0000000..767f6dd
--- /dev/null
@@ -0,0 +1,283 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadBDay(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *BirthdayProcessed){
+
+       // Process date. Preserve the remainder in the string.
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool BirthdayText = FALSE;
+       int intPrevValue = 6;
+
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+
+       intPrevValue = 5;
+
+       // Look for type before continuing.
+
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+
+               SLiter = SplitLength.find(intiter->first);
+
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+       
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+       
+               intPrevValue = intiter->second;
+       
+               if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && BirthdayText == FALSE){
+       
+                       ProcessCaptureStrings(&wxSPropertySeg2);
+                       txtBirthday->SetValue(wxSPropertySeg2);
+                       Birthday = wxSPropertySeg2;
+                       BirthdayText = TRUE;
+       
+               }
+
+       }
+
+       // Setup blank lines for later on.
+       
+       intPrevValue = 5;
+
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+
+               SLiter = SplitLength.find(intiter->first);
+
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+       
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+       
+               intPrevValue = intiter->second;
+       
+               // Process properties.
+       
+               ProcessCaptureStrings(&PropertyValue);
+       
+               size_t intPropertyValueLen = PropertyValue.Len();
+       
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+               
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+               
+               }                               
+       
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+               
+                       PropertyValue.Remove(0, 1);
+               
+               }                               
+       
+               if (PropertyName == wxT("ALTID")){
+
+                       BirthdayAltID = PropertyValue;
+       
+               } else if (PropertyName == wxT("CALSCALE")){
+       
+                       BirthdayCalScale = PropertyValue;
+       
+               } else if (PropertyName != wxT("VALUE")) {
+       
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+               
+                               PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                       }
+                       
+               }
+
+       }       
+
+       // Add the data to the variables and form.
+       
+       if (BirthdayText == FALSE){
+       
+               Birthday = wxSPropertySeg2;
+               int DateYear = 0;
+               wxDateTime::Month DateMonth;
+               unsigned int DateDay;
+               
+               wxString wxSData;
+               
+               if (Birthday.Mid(0, 2) == wxT("--")){
+               
+                       // Skip year.
+               
+               } else {
+               
+                       DateYear = wxAtoi(Birthday.Mid(0,4));
+               
+               }
+               
+               DateMonth = (wxDateTime::Month)(wxAtoi(Birthday.Mid(4,2)) - 1);
+               DateDay = wxAtoi(Birthday.Mid(6,2));
+       
+               wxDateTime BDayDate(DateDay,DateMonth,DateYear);
+       
+               /*BDayDate.SetDay(DateDay);
+               BDayDate.SetMonth(wxDateTime::Month::Jan);
+               BDayDate.SetYear(DateYear);*/
+       
+               dapBirthday->SetValue(BDayDate);                                
+       
+       }
+       
+       BirthdayTokens = PropertyTokens;
+       
+       *BirthdayProcessed = TRUE;
+
+}
+
+void frmContactEditor::LoadAnniversary(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *AnniversaryProcessed){
+
+       // Process date. Preserve the remainder in the string.
+               
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool AnniversaryText = FALSE;
+       int intPrevValue = 13;
+
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+
+       intPrevValue = 12;
+
+       // Look for type before continuing.
+
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+
+               SLiter = SplitLength.find(intiter->first);
+
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+       
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+       
+               intPrevValue = intiter->second;
+       
+               if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && AnniversaryText == FALSE){
+       
+                       ProcessCaptureStrings(&wxSPropertySeg2);
+                       txtAnniversary->SetValue(wxSPropertySeg2);
+                       Anniversary = wxSPropertySeg2;
+                       AnniversaryText = TRUE;
+       
+               }
+
+       }
+
+       // Setup blank lines for later on.
+
+       intPrevValue = 12;
+
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+
+               SLiter = SplitLength.find(intiter->first);
+
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+       
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+       
+               intPrevValue = intiter->second;
+       
+               // Process properties.
+       
+               size_t intPropertyValueLen = PropertyValue.Len();
+       
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+               
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+               
+               }                               
+       
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+               
+                       PropertyValue.Remove(0, 1);
+               
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);          
+       
+               if (PropertyName == wxT("ALTID")){
+
+                       AnniversaryAltID = PropertyValue;
+       
+               } else if (PropertyName == wxT("CALSCALE")){
+       
+                       AnniversaryCalScale = PropertyValue;
+       
+               } else if (PropertyName != wxT("VALUE")) {
+       
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+               
+                               PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                       }
+       
+               }
+
+       }       
+
+       // Add the data to the variables and form.
+       
+       if (AnniversaryText == FALSE){
+       
+               Anniversary = wxSPropertySeg2;
+               int DateYear = 0;
+               wxDateTime::Month DateMonth;
+               int DateDay;
+               
+               wxString wxSData;
+               
+               if (Anniversary.Mid(0, 2) == wxT("--")){
+               
+                       // Skip year.
+               
+               } else {
+               
+                       DateYear = wxAtoi(Anniversary.Mid(0,4));
+               
+               }
+               
+               DateMonth = (wxDateTime::Month)(wxAtoi(Anniversary.Mid(4,2)) - 1);
+               DateDay = wxAtoi(Anniversary.Mid(6,2));                                 
+       
+               wxDateTime ADayDate(DateDay,DateMonth,DateYear);
+       
+               dapAnniversary->SetValue(ADayDate);
+       
+       }
+       
+       AnniversaryTokens = PropertyTokens;
+       
+       *AnniversaryProcessed = TRUE;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadCalendar.cpp b/source/contacteditor/frmContactEditor-LoadCalendar.cpp
new file mode 100644 (file)
index 0000000..aab6dc4
--- /dev/null
@@ -0,0 +1,367 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadCalURI(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *CalAdrCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 8;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 7;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       CalendarList.insert(std::make_pair(intValueSeek, wxT("")));
+       CalendarListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       CalendarListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       CalendarListPref.insert(std::make_pair(intValueSeek, 0));
+       CalendarListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       intPrevValue = 6;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       CalendarListAltID.erase(intValueSeek); CalendarListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       CalendarListPID.erase(intValueSeek); CalendarListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       CalendarListPref.erase(intValueSeek); CalendarListPref.insert(std::make_pair(intValueSeek, intPref));
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+               
+                       CalendarListMediatype.erase(intValueSeek); CalendarListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+
+       ListCtrlIndex = lboCalendarAddresses->InsertItem(coldata);
+               
+       if (intPref > 0 && intPref < 101){
+               
+               lboCalendarAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+       }
+       
+       CaptureString(&wxSPropertySeg2, FALSE);
+               
+       CalendarList.erase(intValueSeek);
+       CalendarListType.erase(intValueSeek);
+       CalendarListTokens.erase(intValueSeek);
+       CalendarList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+       
+       if (intType == 0){
+       
+               CalendarListType.insert(std::make_pair(intValueSeek, wxT("")));                         
+       
+       } else if (intType == 1){
+       
+               CalendarListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
+       
+       } else if (intType == 2){
+       
+               CalendarListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
+       
+       }
+       
+       CalendarListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       CalAdrCount++;
+       intValueSeek++;
+       
+}
+
+void frmContactEditor::LoadCalAdrURI(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *CalReqAdrCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 11;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 10;
+       
+       // Look for type before continuing.
+       
+       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       CalendarRequestList.insert(std::make_pair(intValueSeek, wxT("")));
+       CalendarRequestListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       CalendarRequestListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       CalendarRequestListPref.insert(std::make_pair(intValueSeek, 0));
+       CalendarRequestListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       intPrevValue = 10;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       CalendarRequestListAltID.erase(intValueSeek); CalendarRequestListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       CalendarRequestListPID.erase(intValueSeek); CalendarRequestListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       CalendarRequestListPref.erase(intValueSeek); CalendarRequestListPref.insert(std::make_pair(intValueSeek, intPref));
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+               
+                       CalendarRequestListMediatype.erase(intValueSeek); CalendarRequestListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+
+       ListCtrlIndex = lboCalendarRequestAddress->InsertItem(coldata);
+               
+       if (intPref > 0 && intPref < 101){
+               
+               lboCalendarRequestAddress->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+       }
+               
+       CaptureString(&wxSPropertySeg2, FALSE);                         
+               
+       CalendarRequestList.erase(intValueSeek);
+       CalendarRequestListType.erase(intValueSeek);
+       CalendarRequestListTokens.erase(intValueSeek);
+       CalendarRequestList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));                      
+       
+       if (intType == 0){
+       
+               CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("")));                          
+       
+       } else if (intType == 1){
+       
+               CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
+       
+       } else if (intType == 2){
+       
+               CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
+       
+       }
+       
+       CalendarRequestListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       CalReqAdrCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadCategory.cpp b/source/contacteditor/frmContactEditor-LoadCategory.cpp
new file mode 100644 (file)
index 0000000..4f48c39
--- /dev/null
@@ -0,0 +1,440 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadCategory(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *CategoryCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       wxString PropertyType;
+       bool AfterFirstToken = FALSE;
+       bool FirstToken = TRUE;                 
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 12;
+       int intPref = 0;                        
+       int intType = 0;
+       int intSplitSeek = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 11;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;
+                               PropertyType = wxT("work");                             
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                               PropertyType = wxT("home");                                             
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       CategoriesList.insert(std::make_pair(intValueSeek, wxT("")));
+       CategoriesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       CategoriesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       CategoriesListPref.insert(std::make_pair(intValueSeek, 0));
+       CategoriesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       intPrevValue = 11;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }                       
+       
+       // Deal with multiple categories.
+       
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitSize = 0;
+       intSplitsFound = 0;
+       intSplitSeek = 0;
+       intPrevValue = 0;
+       intPropertyLen = wxSPropertySeg2.Len(); 
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+       
+               if (intSplitSize == 0 && wxSPropertySeg2.Mid(i, 1) == wxT(" ")){
+       
+                       continue;
+               
+               }
+       
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(",") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       if (AfterFirstToken == TRUE){
+       
+                               SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                               SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
+                       
+                       } else {
+                       
+                               SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));                                 
+                               AfterFirstToken = TRUE;
+                       
+                       }
+
+                       intSplitsFound++;
+                       intSplitSeek = i;
+                       intSplitSize = 0;                                       
+       
+               }                       
+       
+       }
+       
+       SplitPoints.insert(std::make_pair(intSplitsFound, (intSplitSeek + 1)));
+       SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));                       
+       
+       intPrevValue = 0;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg2.Mid(intPrevValue, (SLiter->second + 1));
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               /*
+               
+               int intPropertyValueLen = PropertyValue.Len();                          
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }
+               
+               */
+               
+               // Add the data to the General/Home/Work address variables.
+       
+               // Trim any whitespace from the start and end.
+       
+               PropertyData = PropertyData.Trim(FALSE);
+               PropertyData = PropertyData.Trim(TRUE);                         
+       
+               ProcessCaptureStrings(&PropertyData);
+       
+               wxListItem coldata;
+
+               coldata.SetId(intValueSeek);
+               coldata.SetData(intValueSeek);
+               coldata.SetText(PropertyData);
+       
+               ListCtrlIndex = lboCategories->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboCategories->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               CategoriesList.erase(intValueSeek);
+               CategoriesListType.erase(intValueSeek);
+               CategoriesListTokens.erase(intValueSeek);
+               CategoriesList.insert(std::make_pair(intValueSeek, PropertyData));
+               CategoriesListType.insert(std::make_pair(intValueSeek, PropertyType));
+               CategoriesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+               CategoryCount++;
+               intValueSeek++;                         
+       
+       }
+
+}
+
+void frmContactEditor::LoadCalFreeBusy(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *FreeBusyCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 7;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 6;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       FreeBusyList.insert(std::make_pair(intValueSeek, wxT("")));
+       FreeBusyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       FreeBusyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       FreeBusyListPref.insert(std::make_pair(intValueSeek, 0));
+       FreeBusyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       intPrevValue = 6;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       FreeBusyListAltID.erase(intValueSeek); FreeBusyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       FreeBusyListPID.erase(intValueSeek); FreeBusyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       FreeBusyListPref.erase(intValueSeek); FreeBusyListPref.insert(std::make_pair(intValueSeek, intPref));
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+               
+                       FreeBusyListMediatype.erase(intValueSeek); FreeBusyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+
+       ListCtrlIndex = lboFreeBusyAddresses->InsertItem(coldata);
+               
+       if (intPref > 0 && intPref < 101){
+               
+               lboFreeBusyAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+       }
+       
+       CaptureString(&wxSPropertySeg2, FALSE);                 
+               
+       FreeBusyList.erase(intValueSeek);
+       FreeBusyListType.erase(intValueSeek);
+       FreeBusyListTokens.erase(intValueSeek);
+       FreeBusyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+       
+       if (intType == 0){
+       
+               FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("")));                         
+       
+       } else if (intType == 1){
+       
+               FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
+       
+       } else if (intType == 2){
+       
+               FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
+       
+       }
+       
+       FreeBusyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       FreeBusyCount++;
+       intValueSeek++;
+       
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadEmail.cpp b/source/contacteditor/frmContactEditor-LoadEmail.cpp
new file mode 100644 (file)
index 0000000..c806210
--- /dev/null
@@ -0,0 +1,249 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadEmail(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *EmailCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;
+       std::map<int, int>::iterator SPoint;
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       wxString AddressLabel;
+       wxString AddressLang;
+       wxString AddressAltID;
+       wxString AddressPID;
+       wxString AddressTokens;
+       wxString AddressGeo;
+       wxString AddressTimezone;
+       wxString AddressType;
+       wxString AddressMediatype;
+       wxString AddressPOBox;
+       wxString AddressExtended;
+       wxString AddressStreet;
+       wxString AddressLocality;
+       wxString AddressCity;
+       wxString AddressRegion;
+       wxString AddressPostalCode;
+       wxString AddressCountry;
+       bool FirstToken = TRUE;
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 7;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 6;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralEmailList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralEmailListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeEmailList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeEmailListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessEmailList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessEmailListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 6;                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               // Process properties.
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralEmailListAltID.erase(intValueSeek); GeneralEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeEmailListAltID.erase(intValueSeek); HomeEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessEmailListAltID.erase(intValueSeek); BusinessEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralEmailListPID.erase(intValueSeek); GeneralEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeEmailListPID.erase(intValueSeek); HomeEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessEmailListPID.erase(intValueSeek); BusinessEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+                       
+                       if (intPref > 0 && intPref < 101){
+               
+                               if (intType == 0){ GeneralEmailListPref.erase(intValueSeek); GeneralEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 1){ HomeEmailListPref.erase(intValueSeek); HomeEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 2){ BusinessEmailListPref.erase(intValueSeek); BusinessEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               
+                       }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       } 
+
+       //std::map<int, int>::iterator SLiter;
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;       
+       
+       // Add the data to the General/Home/Work email variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+       
+       if (intType == 0){
+       
+
+       
+               ListCtrlIndex = lboEmails->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralEmailList.erase(intValueSeek);
+               GeneralEmailListType.erase(intValueSeek);
+               GeneralEmailListTokens.erase(intValueSeek);
+               GeneralEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralEmailListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeEmails->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeEmailList.erase(intValueSeek);
+               HomeEmailListType.erase(intValueSeek);
+               HomeEmailListTokens.erase(intValueSeek);                                
+               HomeEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeEmailListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessEmail->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessEmail->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessEmailList.erase(intValueSeek);
+               BusinessEmailListType.erase(intValueSeek);
+               BusinessEmailListTokens.erase(intValueSeek);                            
+               BusinessEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessEmailListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                           
+       
+       }
+       
+       EmailCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadGender.cpp b/source/contacteditor/frmContactEditor-LoadGender.cpp
new file mode 100644 (file)
index 0000000..0383d0f
--- /dev/null
@@ -0,0 +1,121 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadGender(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *GenderProcessed, vCard *ContactData){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 8;
+
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 7;                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+
+                       if (FirstToken == TRUE){
+       
+                               PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                               FirstToken = FALSE;
+       
+                       } else {
+       
+                               PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+       
+                       }
+
+               }
+       
+       }       
+
+       wxStringTokenizer GenderDetails (wxSPropertySeg2, wxT(";"));
+       
+       wxString GenderComponent;
+       wxString GenderIdentity;
+       
+       if (GenderDetails.CountTokens() >= 2){
+       
+               GenderComponent = GenderDetails.GetNextToken();
+               GenderIdentity = GenderDetails.GetString();
+       
+               ProcessCaptureStrings(&GenderIdentity);
+       
+               txtGenderDescription->SetValue(ContactData->Convert(GenderIdentity, TRUE));
+                                               
+       } else {
+       
+               GenderComponent = GenderDetails.GetNextToken();
+       
+       }
+               
+       if (GenderComponent == wxT("M")){
+               
+               // Gender is Male.
+                       
+               cmbGender->SetSelection(1);
+               
+       } else if (GenderComponent == wxT("F")){
+               
+               // Gender is Female.
+                       
+               cmbGender->SetSelection(2);                                     
+               
+       } else if (GenderComponent == wxT("O")){
+               
+               // Gender is Other.
+                       
+               cmbGender->SetSelection(3);
+               
+       } else if (GenderComponent == wxT("N")){
+               
+               // Gender is None/Not Applicable.
+               
+               cmbGender->SetSelection(4);                                     
+               
+       } else if (GenderComponent == wxT("U")){
+               
+               // Gender is Unknown.
+                       
+               cmbGender->SetSelection(5);                                     
+               
+       }
+       
+       GenderTokens = PropertyTokens;
+       *GenderProcessed = TRUE;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadGeo.cpp b/source/contacteditor/frmContactEditor-LoadGeo.cpp
new file mode 100644 (file)
index 0000000..d35e1be
--- /dev/null
@@ -0,0 +1,348 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadGeo(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *GeoCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       wxString GeoType;
+       wxString GeoData;
+       bool FirstToken = TRUE;                 
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 5;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 4;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralGeographyListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeGeographyListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessGeographyListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 4;                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }       
+
+               ProcessCaptureStrings(&PropertyValue);
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralGeographyListAltID.erase(intValueSeek); GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeGeographyListAltID.erase(intValueSeek); HomeGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessGeographyListAltID.erase(intValueSeek); BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralGeographyListPID.erase(intValueSeek); GeneralGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeGeographyListPID.erase(intValueSeek); HomeGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessGeographyListPID.erase(intValueSeek); BusinessGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+               
+                       if (intType == 0){ GeneralGeographyListMediatype.erase(intValueSeek); GeneralGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeGeographyListMediatype.erase(intValueSeek); HomeGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessGeographyListMediatype.erase(intValueSeek); BusinessGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intPref > 0 && intPref < 101){
+               
+                               if (intType == 0){ GeneralGeographyListPref.erase(intValueSeek); GeneralGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 1){ HomeGeographyListPref.erase(intValueSeek); HomeGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 2){ BusinessGeographyListPref.erase(intValueSeek); BusinessGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       
+                       }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }                                       
+       
+       // Split the address. 
+
+       //std::map<int, int>::iterator SLiter;
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 1){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               if (intiter->first == 1){
+               
+                       // Deal with PO Box.
+                       
+                       SLiter = SplitLength.find(1);
+                                                               
+                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+                       GeoType = wxSPropertySeg2.Mid(0, SLiter->second);
+                       intPrevValue = intiter->second;
+                       
+                       GeoData = wxSPropertySeg2.Mid(intPrevValue);                                    
+               
+               }
+       
+       }
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+
+       
+       if (intType == 0){
+       
+               /*
+       
+               ListCtrlIndex = lboTimezones->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               */
+               /*
+               txtGeopositioning->SetValue(GeoData);
+               */
+               
+               GeneralGeographyList.erase(intValueSeek);
+               GeneralGeographyListType.erase(intValueSeek);
+               GeneralGeographyListTokens.erase(intValueSeek);
+               GeneralGeographyList.insert(std::make_pair(intValueSeek, GeoData));
+               GeneralGeographyListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+               
+               CaptureString(&GeoData, FALSE);
+               coldata.SetText(GeoData);
+               ListCtrlIndex = lboGeoposition->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+       
+       } else if (intType == 1){                       
+       
+               /*
+       
+               ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               */
+               
+               /*
+               txtHomeGeopositioning->SetValue(GeoData);
+               */
+
+               HomeGeographyList.erase(intValueSeek);
+               HomeGeographyListType.erase(intValueSeek);
+               HomeGeographyListTokens.erase(intValueSeek);                            
+               HomeGeographyList.insert(std::make_pair(intValueSeek, GeoData));
+               HomeGeographyListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+               
+               CaptureString(&GeoData, FALSE);
+               coldata.SetText(GeoData);
+               ListCtrlIndex = lboHomeGeoposition->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);                    
+       
+               /*
+       
+               ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               */
+               
+               /*
+               txtBusinessGeopositioning->SetValue(GeoData);
+               */
+
+               BusinessGeographyList.erase(intValueSeek);
+               BusinessGeographyListType.erase(intValueSeek);
+               BusinessGeographyListTokens.erase(intValueSeek);                                
+               BusinessGeographyList.insert(std::make_pair(intValueSeek, GeoData));
+               BusinessGeographyListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+               
+               CaptureString(&GeoData, FALSE);
+               coldata.SetText(GeoData);
+               ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+       
+       }
+       
+       GeoCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadGroup.cpp b/source/contacteditor/frmContactEditor-LoadGroup.cpp
new file mode 100644 (file)
index 0000000..8a37f61
--- /dev/null
@@ -0,0 +1,208 @@
+#include "frmContactEditor.h"
+#include "../common/dirs.h"
+#include <wx/dir.h>
+
+void frmContactEditor::LoadKind(wxString KindType){
+
+       if (KindType == wxT("individual")){
+                       
+               cmbType->SetSelection(1);
+                       
+       } else if (KindType == wxT("group")){
+                       
+               cmbType->SetSelection(2);
+               IsGroup = TRUE;
+                       
+       } else if (KindType == wxT("org")){
+                       
+               cmbType->SetSelection(3);
+                       
+       } else if (KindType == wxT("location")){
+                       
+               cmbType->SetSelection(4);
+                       
+       } else {
+                       
+               cmbType->SetSelection(0);
+                       
+       }
+                       
+       wxCommandEvent nullevent;
+                       
+       UpdateMembersTab(nullevent);
+
+}
+
+void frmContactEditor::LoadMember(wxString MemberData, int *GroupCount){
+
+       // Go through the list of contacts for the account and find the matching UID.
+       // If contact with UID doesn't match then say (unknown contact).
+
+       XABViewMode XVMData = MainPtr->GetViewMode();
+       
+       wxString AccountDirFinal = GetAccountDir(wxSContactAccount, FALSE);
+
+       //wxString vcardfilenamewxs;
+       wxString vCardFilename;
+       wxString vCardFilenameFull;
+       wxString vCardDataString;
+       //wxStringTokenizer vcardfileline;
+       wxString lwxs;
+       wxString setname, setvalue;
+       //vCardNames = new std::map<wxString, wxString, std::greater<wxString>>;
+       std::multimap<wxString, wxString, std::greater<wxString>> vCardNamesAsc;
+       std::multimap<wxString, wxString, std::less<wxString>> vCardNamesDsc;
+
+       wxDir vcardaccdir(AccountDirFinal);
+
+       bool ProcFiles = vcardaccdir.GetFirst(&vCardFilename, wxEmptyString, wxDIR_FILES);
+       while(ProcFiles){
+
+               if (vCardFilename.Right(4) == wxT(".vcf") || 
+                   vCardFilename.Right(4) == wxT(".VCF") || 
+                   vCardFilename.Right(5) == wxT(".vcard") || 
+                   vCardFilename.Right(5) == wxT(".VCARD")){
+
+                   vCard Person;
+
+                   vCardFilenameFull.Append(AccountDirFinal);
+                   vCardFilenameFull.Append(wxT("/"));
+                   vCardFilenameFull.Append(vCardFilename);
+
+                   Person.LoadFile(vCardFilenameFull);
+
+                   if (MemberData.Left(9) == wxT("urn:uuid:")){
+
+                       wxString NewPropValue;
+                       NewPropValue = MemberData.Mid(9, wxString::npos);
+                       MemberData = NewPropValue;
+
+                   }
+
+                   if (Person.MeetBaseSpecification()){
+
+                       wxString KindStatus = Person.Get(wxT("KIND"));
+
+                       if (KindStatus == wxT("group")){
+
+                               vCardFilename.Clear();
+                               vCardFilenameFull.Clear();
+                               vCardDataString.Clear();
+                               ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+                               continue;
+
+                       }
+
+                       wxString PersonName = Person.Get(wxT("N"));
+                       wxString PersonUID = Person.Get(wxT("UID"));
+                       wxString PersonFilename = vCardFilenameFull;
+                       
+                       if (PersonUID != MemberData){
+                       
+                               vCardFilename.Clear();
+                               vCardFilenameFull.Clear();
+                               vCardDataString.Clear();
+                               ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+                               continue;
+                       
+                       }
+
+                       //ContactsNames.insert(std::make_pair(PersonName, ContactIndex));
+                       //ContactsUIDs.insert(std::make_pair(ContactIndex, PersonUID));
+
+                       if (XVMData.SortMode == 1){
+
+                           // Split the name into sections.
+       
+                           vCardDataString = Person.Get(wxT("N"));
+
+                           vCardName NameData = Person.GetName();
+    
+                           vCardDataString = NameData.Forename + wxT(" ") + NameData.Surname;
+    
+                       } else if (XVMData.SortMode == 2){
+    
+                           // Split the name into sections.
+    
+                           vCardName NameData = Person.GetName();    
+    
+                           vCardDataString = NameData.Surname + wxT(", ") + NameData.Forename;
+    
+                       } else if (XVMData.SortMode == 3){
+    
+                           // Check and make sure that the top most nickname is used.
+    
+                           vCardDataString = Person.Get(wxT("NICKNAME"));
+    
+                           if (vCardDataString.IsEmpty()){
+       
+                               vCardDataString = wxT("(no nickname)");
+       
+                           }
+    
+                       } else if (XVMData.SortMode == 4){
+    
+                           vCardDataString = Person.Get(wxT("FN"));
+    
+                       }
+
+                       if (XVMData.AscendingMode == TRUE){
+                           vCardNamesAsc.insert(std::make_pair(vCardDataString, PersonUID));
+                       } else {
+                           vCardNamesDsc.insert(std::make_pair(vCardDataString, PersonUID));
+                       }
+
+                   } else {
+
+                   }
+
+
+
+               }
+
+               vCardFilename.Clear();
+               vCardFilenameFull.Clear();
+               vCardDataString.Clear();
+               ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+
+           }
+
+           if (XVMData.AscendingMode == TRUE){
+
+               for (std::map<wxString,wxString>::iterator iter = vCardNamesAsc.begin(); 
+               iter != vCardNamesAsc.end(); ++iter){
+
+                       wxListItem ItemData;
+                       
+                       ItemData.SetId(0);
+                       ItemData.SetText(iter->first);
+       
+                       lboGroups->InsertItem(ItemData);
+                       
+                       GroupsList.insert(std::make_pair(intValueSeek, iter->second));
+       
+               }
+
+
+           } else {
+
+               for (std::map<wxString,wxString>::iterator iter = vCardNamesDsc.begin(); 
+               iter != vCardNamesDsc.end(); ++iter){
+
+                       wxListItem ItemData;
+                       
+                       ItemData.SetId(0);
+                       ItemData.SetText(iter->first);
+       
+                       lboGroups->InsertItem(ItemData);
+
+                       GroupsList.insert(std::make_pair(intValueSeek, iter->second));
+
+               }
+
+           }
+       
+       GroupCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadIM.cpp b/source/contacteditor/frmContactEditor-LoadIM.cpp
new file mode 100644 (file)
index 0000000..7fc6a1b
--- /dev/null
@@ -0,0 +1,324 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadIM(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *IMPPCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;
+       std::map<int, int>::iterator SPoint;
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       wxString IMPPType;
+       wxString IMPPAddress;
+       bool FirstToken = TRUE;
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 6;
+       int intPref = 0;
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 5;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralIMList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralIMListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeIMList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeIMListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessIMList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessIMListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 5;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralIMListAltID.erase(intValueSeek); GeneralIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeIMListAltID.erase(intValueSeek); HomeIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessIMListAltID.erase(intValueSeek); BusinessIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralIMListPID.erase(intValueSeek); GeneralIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeIMListPID.erase(intValueSeek); HomeIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessIMListPID.erase(intValueSeek); BusinessIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+                       
+                       if (intPref > 0 && intPref < 101){
+               
+                               if (intType == 0){ GeneralIMListPref.erase(intValueSeek); GeneralIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 1){ HomeIMListPref.erase(intValueSeek); HomeIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 2){ BusinessIMListPref.erase(intValueSeek); BusinessIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               
+                       }
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+
+                       if (intType == 0){ GeneralIMListMediatype.erase(intValueSeek); GeneralIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeIMListMediatype.erase(intValueSeek); HomeIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessIMListMediatype.erase(intValueSeek); BusinessIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }                       
+       
+       // Split the address. 
+
+       //std::map<int, int>::iterator SLiter;
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 1){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }
+       
+       // Split the data into several parts.                   
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               if (intiter->first == 1){
+               
+                       // Deal with PO Box.
+                       
+                       SLiter = SplitLength.find(1);
+                                                               
+                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+                       IMPPType = wxSPropertySeg2.Mid(0, SLiter->second);
+                       intPrevValue = intiter->second;
+                       
+                       IMPPAddress = wxSPropertySeg2.Mid(intPrevValue);                                        
+               
+               }
+       
+       }       
+       
+       // Check what IM type it is.
+       
+       if (IMPPType == wxT("aim")){
+
+               IMPPType = wxT("AIM");
+
+       } else if (IMPPType == wxT("gg")){
+
+               IMPPType = wxT("Gadu-Gadu");
+
+       } else if (IMPPType == wxT("icq")){
+
+               IMPPType = wxT("ICQ");
+
+       } else if (IMPPType == wxT("skype")){
+
+               IMPPType = wxT("Skype");
+
+       } else if (IMPPType == wxT("xmpp")){
+
+               IMPPType = wxT("XMPP");
+
+       } else if (IMPPType == wxT("yahoo")){
+
+               IMPPType = wxT("Yahoo");
+
+       } else {
+
+               // Do nothing.
+
+       }                       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(IMPPType);
+
+       if (intType == 0){
+       
+               ListCtrlIndex = lboIM->InsertItem(coldata);
+               
+               lboIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+               }                               
+               
+               GeneralIMList.erase(intValueSeek);
+               GeneralIMListType.erase(intValueSeek);
+               GeneralIMListTokens.erase(intValueSeek);
+               GeneralIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralIMListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeIM->InsertItem(coldata);
+
+               lboHomeIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeIMList.erase(intValueSeek);
+               HomeIMListType.erase(intValueSeek);
+               HomeIMListTokens.erase(intValueSeek);                           
+               HomeIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeIMListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessIM->InsertItem(coldata);
+
+               lboBusinessIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessIMList.erase(intValueSeek);
+               BusinessIMListType.erase(intValueSeek);
+               BusinessIMListTokens.erase(intValueSeek);                               
+               BusinessIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessIMListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                              
+       
+       }
+       
+       *IMPPCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadKey.cpp b/source/contacteditor/frmContactEditor-LoadKey.cpp
new file mode 100644 (file)
index 0000000..6beb8ca
--- /dev/null
@@ -0,0 +1,276 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadKey(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *KeyCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 5;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 4;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       KeyList.insert(std::make_pair(intValueSeek, wxT("")));
+       KeyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       KeyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       KeyListPref.insert(std::make_pair(intValueSeek, 0));
+       KeyListKeyType.insert(std::make_pair(intValueSeek, FALSE));
+       KeyListDataType.insert(std::make_pair(intValueSeek, wxT("")));
+       KeyListDataEncType.insert(std::make_pair(intValueSeek, wxT("")));
+       KeyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       intPrevValue = 4;
+
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       KeyListAltID.erase(intValueSeek); KeyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       KeyListPID.erase(intValueSeek); KeyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       KeyListPref.erase(intValueSeek); KeyListPref.insert(std::make_pair(intValueSeek, intPref));
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }                               
+       
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;                       
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 6){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       } else {
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                       
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }
+       
+       wxString wxSKeyURI;
+       wxString wxSKeyMIME;
+       wxString wxSKeyEncoding;
+       wxString wxSKeyData;
+       std::string base64enc;
+       
+       if (intSplitsFound == 0){
+       
+       } else {
+       
+               std::map<int, int>::iterator striter;
+       
+               striter = SplitLength.find(1);
+       
+               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+       
+               while (wSTDataType.HasMoreTokens() == TRUE){
+               
+                       wxSKeyURI = wSTDataType.GetNextToken();
+                       wxSKeyMIME = wSTDataType.GetNextToken();
+                       break;
+               
+               }                       
+       
+               if (wxSKeyURI == wxT("data")){
+               
+                               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 2)), wxT(","));                    
+       
+                               while (wSTDataInfo.HasMoreTokens() == TRUE){
+               
+                               wxSKeyEncoding = wSTDataInfo.GetNextToken();
+                               wxSKeyData = wSTDataInfo.GetNextToken();
+                               break;
+               
+                       }
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       
+       if (wxSKeyURI == wxT("data")){
+       
+               if (wxSKeyMIME == wxT("application/pgp-keys")){
+       
+                       coldata.SetText(_("PGP Key"));
+               
+               } else {
+               
+                       coldata.SetText(_("Key"));
+               
+               }
+               
+               KeyListDataEncType.erase(intValueSeek);
+               KeyListKeyType.erase(intValueSeek);
+               KeyListDataEncType.insert(std::make_pair(intValueSeek, wxSKeyEncoding));
+               KeyListKeyType.insert(std::make_pair(intValueSeek, TRUE));
+               
+               KeyList.erase(intValueSeek);
+               KeyList.insert(std::make_pair(intValueSeek, wxSKeyData));
+       
+       } else {
+       
+               coldata.SetText(wxSPropertySeg2);
+               
+               KeyList.erase(intValueSeek);
+               KeyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+       
+       }
+       
+       ListCtrlIndex = lboKeys->InsertItem(coldata);
+               
+       if (intPref > 0 && intPref < 101){
+               
+               lboKeys->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+       
+       }
+               
+
+       KeyListType.erase(intValueSeek);
+       KeyListTokens.erase(intValueSeek);
+       KeyListDataType.erase(intValueSeek);
+
+       KeyListDataType.insert(std::make_pair(intValueSeek, wxSKeyMIME));
+               
+       switch (intType){
+               case 0: KeyListType.insert(std::make_pair(intValueSeek, wxT("")));
+               case 1: KeyListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               case 2: KeyListType.insert(std::make_pair(intValueSeek, wxT("work")));
+       }
+
+       KeyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       KeyCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadLanguage.cpp b/source/contacteditor/frmContactEditor-LoadLanguage.cpp
new file mode 100644 (file)
index 0000000..726f4cd
--- /dev/null
@@ -0,0 +1,229 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadLanguage(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *LangCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 6;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 5;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralLanguageListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeLanguageListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessLanguageListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 5;                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);                          
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralLanguageListAltID.erase(intValueSeek); GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeLanguageListAltID.erase(intValueSeek); HomeLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessLanguageListAltID.erase(intValueSeek); BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralLanguageListPID.erase(intValueSeek); GeneralLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeLanguageListPID.erase(intValueSeek); HomeLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessLanguageListPID.erase(intValueSeek); BusinessLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ GeneralLanguageListPref.erase(intValueSeek); GeneralLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ HomeLanguageListPref.erase(intValueSeek); HomeLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ BusinessLanguageListPref.erase(intValueSeek); BusinessLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboLanguages->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralLanguageList.erase(intValueSeek);
+               GeneralLanguageListType.erase(intValueSeek);
+               GeneralLanguageListTokens.erase(intValueSeek);
+               GeneralLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralLanguageListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeLanguages->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeLanguageList.erase(intValueSeek);
+               HomeLanguageListType.erase(intValueSeek);
+               HomeLanguageListTokens.erase(intValueSeek);                             
+               HomeLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeLanguageListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessLanguages->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessLanguageList.erase(intValueSeek);
+               BusinessLanguageListType.erase(intValueSeek);
+               BusinessLanguageListTokens.erase(intValueSeek);                         
+               BusinessLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessLanguageListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                                
+       
+       }
+       
+       LangCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadLogo.cpp b/source/contacteditor/frmContactEditor-LoadLogo.cpp
new file mode 100644 (file)
index 0000000..906159d
--- /dev/null
@@ -0,0 +1,249 @@
+#include "frmContactEditor.h"
+#include "../common/base64.h"
+
+void frmContactEditor::LoadLogo(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *LogoCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 6;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 5;
+       
+       // Look for type before continuing.                     
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       LogosList.insert(std::make_pair(intValueSeek, ""));
+       LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
+       LogosListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       LogosListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       LogosListPref.insert(std::make_pair(intValueSeek, 0));
+       LogosListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
+       LogosListPictureType.insert(std::make_pair(intValueSeek, wxT("")));                     
+       LogosListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       LogosListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+       intPrevValue = 5;
+
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);  
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+               
+                       if (intType == 0){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }       
+       
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;
+       
+       wxString wxSPhotoURI;
+       wxString wxSPhotoMIME;
+       wxString wxSPhotoEncoding;
+       wxString wxSPhotoData;
+       std::string base64enc;
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       if (intSplitsFound == 0){
+       
+       } else {
+       
+               std::map<int, int>::iterator striter;
+       
+               striter = SplitLength.find(1);
+       
+               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+       
+               while (wSTDataType.HasMoreTokens() == TRUE){
+               
+                       wxSPhotoURI = wSTDataType.GetNextToken();
+                       wxSPhotoMIME = wSTDataType.GetNextToken();
+                       break;
+               
+               }                       
+       
+               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));                    
+       
+               while (wSTDataInfo.HasMoreTokens() == TRUE){
+               
+                       wxSPhotoEncoding = wSTDataInfo.GetNextToken();
+                       wxSPhotoData = wSTDataInfo.GetNextToken();                                      
+                       base64enc = wxSPhotoData.mb_str();
+                       break;
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(_("Picture"));
+       
+       ListCtrlIndex = lboLogos->InsertItem(coldata);
+               
+       if (intPref > 0 && intPref < 101){
+               
+               lboLogos->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+       
+       }
+               
+       LogosList.erase(intValueSeek);
+       LogosListType.erase(intValueSeek);
+       LogosListTokens.erase(intValueSeek);
+       LogosListPictureType.erase(intValueSeek);
+       LogosListPicEncType.erase(intValueSeek);
+       LogosList.insert(std::make_pair(intValueSeek, base64enc));
+       LogosListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
+       LogosListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
+       
+       if (intType == 0){
+       
+               LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 1){
+       
+               LogosListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));
+       
+       } else if (intType == 2){
+       
+               LogosListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));                         
+       
+       }
+       
+       LogosListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       LogoCount++;
+       intValueSeek++;
+                       
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadName.cpp b/source/contacteditor/frmContactEditor-LoadName.cpp
new file mode 100644 (file)
index 0000000..11d2ae7
--- /dev/null
@@ -0,0 +1,399 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadFN(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *FNCount, 
+       bool *FNProcessed, vCard *ContactData){
+       
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;                 
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 4;
+       int intPref = 0;                        
+       int intType = 0;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 3;
+       
+       // Look for type before continuing.             
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+
+       FullNamesList.insert(std::make_pair(intValueSeek, wxT("")));
+       FullNamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       FullNamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       FullNamesListPref.insert(std::make_pair(intValueSeek, 0));
+       FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
+       FullNamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+       FullNamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));              
+       
+       intPrevValue = 3;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       FullNamesListAltID.erase(intValueSeek); FullNamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       FullNamesListPID.erase(intValueSeek); FullNamesListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+                       
+                       if (intPref > 0 && intPref < 101){
+               
+                               FullNamesListPref.erase(intValueSeek); FullNamesListPref.insert(std::make_pair(intValueSeek, intPref));
+                               
+                       }
+               
+               } else if (PropertyName == wxT("LANG")){
+
+                       FullNamesListLanguage.erase(intValueSeek); FullNamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }                       
+       
+       // Split the address.           
+
+       //std::map<int, int>::iterator SLiter;
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 1){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }                       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       /*
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(IMPPType);
+       
+       */
+       
+       //ProcessCaptureStrings(wxsPropertySeg2);
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       FullNamesList.erase(intValueSeek);
+       FullNamesListType.erase(intValueSeek);
+       FullNamesListTokens.erase(intValueSeek);
+       FullNamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+       FullNamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       if (intType == 0){
+       
+               FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 1){
+       
+               FullNamesListType.insert(std::make_pair(intValueSeek, wxT("home")));                    
+       
+       } else if (intType == 2){
+       
+               FullNamesListType.insert(std::make_pair(intValueSeek, wxT("work")));                    
+       
+       }
+       
+       if (*FNProcessed == FALSE){
+       
+               NameDisplayAs = wxSPropertySeg2;
+               cmbDisplayAs->SetValue(ContactData->Convert(wxSPropertySeg2, TRUE));
+               *FNProcessed = TRUE;
+               
+       }
+       
+       FNCount++;
+       intValueSeek++;
+
+}
+
+void frmContactEditor::LoadN(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *NameProcessed, 
+       vCard *ContactData){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;                 
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 3;
+       int intSplitSeek = 0;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       // Look for type before continuing.             
+       
+       intPrevValue = 2;                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+       
+       }
+       
+       intPrevValue = 2;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       NameAltID = PropertyValue;
+               
+               } else if (PropertyName == wxT("LANG")){
+
+                       NameLanguage = PropertyValue;
+               
+               } else if (PropertyName == wxT("SORT-AS")){
+               
+                       NameDisplayAs = PropertyValue;
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }
+       
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitSeek = 0;               
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;                                       
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 4){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       } else {
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                       
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }
+       
+       // Split the data into several parts.
+                       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               if (intiter->first == 1){
+               
+                       // Deal with family name.
+                       
+                       SLiter = SplitLength.find(1);
+                                                               
+                       txtSurname->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+                       
+                       intPrevValue = intiter->second;
+                       NameSurname = wxSPropertySeg2.Mid(0, SLiter->second);                                   
+               
+               } else if (intiter->first == 2){
+               
+                       // Deal with given names.
+                       
+                       SLiter = SplitLength.find(2);
+                                                               
+                       txtForename->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+                       NameForename = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+               
+               } else if (intiter->first == 3){
+               
+                       // Deal with additional names.
+                       
+                       SLiter = SplitLength.find(3);
+                                                               
+                       txtOtherNames->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+                       NameOtherNames = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+               
+               } else if (intiter->first == 4){
+               
+                       // Deal with honorifix prefixes and suffixes.
+
+                       SLiter = SplitLength.find(4);
+                                                               
+                       txtTitle->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+                       intPrevValue = intiter->second;
+                       NameTitle = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+               
+                       txtSuffix->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+                       NameSuffix = wxSPropertySeg2.Mid(intPrevValue);
+               
+               }
+       
+       }
+       
+       NameTokens = PropertyTokens;
+       *NameProcessed = TRUE;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadNickname.cpp b/source/contacteditor/frmContactEditor-LoadNickname.cpp
new file mode 100644 (file)
index 0000000..0fdc984
--- /dev/null
@@ -0,0 +1,237 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadNickname(wxString wxSPropertySeg1, wxString wxSPropertySeg2, 
+       int *NicknameCount, vCard *ContactData){
+                       
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 10;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+
+       intPrevValue = 9;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                                
+       
+       } else if (intType == 2){
+
+               BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                            
+       
+       }
+       
+       intPrevValue = 9;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralNicknamesListAltID.erase(intValueSeek); GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeNicknamesListAltID.erase(intValueSeek); HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessNicknamesListAltID.erase(intValueSeek); BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralNicknamesListPID.erase(intValueSeek); GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeNicknamesListPID.erase(intValueSeek); HomeNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessNicknamesListPID.erase(intValueSeek); BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ GeneralNicknamesListPref.erase(intValueSeek); GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ HomeNicknamesListPref.erase(intValueSeek); HomeNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ BusinessNicknamesListPref.erase(intValueSeek); BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("LANGUAGE")){
+               
+                       if (intType == 0){ GeneralNicknamesListLanguage.erase(intValueSeek); GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeNicknamesListLanguage.erase(intValueSeek); HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessNicknamesListLanguage.erase(intValueSeek); BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboNicknames->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralNicknamesList.erase(intValueSeek);
+               GeneralNicknamesListType.erase(intValueSeek);
+               GeneralNicknamesListTokens.erase(intValueSeek);
+               GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralNicknamesListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeNicknames->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeNicknamesList.erase(intValueSeek);
+               HomeNicknamesListType.erase(intValueSeek);
+               HomeNicknamesListTokens.erase(intValueSeek);                            
+               HomeNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeNicknamesListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessNicknames->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessNicknamesList.erase(intValueSeek);
+               BusinessNicknamesListType.erase(intValueSeek);
+               BusinessNicknamesListTokens.erase(intValueSeek);                                
+               BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessNicknamesListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                               
+       
+       }
+
+       NicknameCount++;
+       intValueSeek++; 
+                       
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadNote.cpp b/source/contacteditor/frmContactEditor-LoadNote.cpp
new file mode 100644 (file)
index 0000000..d1d74fe
--- /dev/null
@@ -0,0 +1,249 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadNote(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *NoteCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 6;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 5;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralNoteList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNoteListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeNoteList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNoteListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessNoteList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNoteListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 5;                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);                          
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralNoteListAltID.erase(intValueSeek); GeneralNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeNoteListAltID.erase(intValueSeek); HomeNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessNoteListAltID.erase(intValueSeek); BusinessNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralNoteListPID.erase(intValueSeek); GeneralNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeNoteListPID.erase(intValueSeek); HomeNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessNoteListPID.erase(intValueSeek); BusinessNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ GeneralNoteListPref.erase(intValueSeek); GeneralNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ HomeNoteListPref.erase(intValueSeek); HomeNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ BusinessNoteListPref.erase(intValueSeek); BusinessNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("LANGUAGE")){
+               
+                       if (intType == 0){ GeneralNoteListLanguage.erase(intValueSeek); GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeNoteListLanguage.erase(intValueSeek); HomeNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessNoteListLanguage.erase(intValueSeek); BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       
+       if (intType == 0){
+       
+               GeneralNoteList.erase(intValueSeek);
+               GeneralNoteListType.erase(intValueSeek);
+               GeneralNoteListTokens.erase(intValueSeek);
+               GeneralNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralNoteListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                     
+       
+               //CaptureString(&wxSPropertySeg2, FALSE);
+
+               coldata.SetText(wxSPropertySeg2);
+       
+               ListCtrlIndex = lboNotes->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+       
+       } else if (intType == 1){ 
+       
+               HomeNoteList.erase(intValueSeek);
+               HomeNoteListType.erase(intValueSeek);
+               HomeNoteListTokens.erase(intValueSeek);                         
+               HomeNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeNoteListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                        
+       
+               CaptureString(&wxSPropertySeg2, FALSE);
+
+               coldata.SetText(wxSPropertySeg2);                       
+       
+               ListCtrlIndex = lboHomeNotes->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+       
+       } else if (intType == 2){ 
+       
+               BusinessNoteList.erase(intValueSeek);
+               BusinessNoteListType.erase(intValueSeek);
+               BusinessNoteListTokens.erase(intValueSeek);                             
+               BusinessNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessNoteListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                    
+       
+               CaptureString(&wxSPropertySeg2, FALSE);
+
+               coldata.SetText(wxSPropertySeg2);
+       
+               ListCtrlIndex = lboBusinessNotes->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }                               
+       
+       }
+       
+       NoteCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadOrg.cpp b/source/contacteditor/frmContactEditor-LoadOrg.cpp
new file mode 100644 (file)
index 0000000..ee51f4d
--- /dev/null
@@ -0,0 +1,247 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadOrg(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *OrgCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 5;
+       int intPref = 0;
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 4;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));                          
+       
+       }
+       
+       intPrevValue = 4;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralOrganisationsListAltID.erase(intValueSeek); GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeOrganisationsListAltID.erase(intValueSeek); HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessOrganisationsListAltID.erase(intValueSeek); BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralOrganisationsListPID.erase(intValueSeek); GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeOrganisationsListPID.erase(intValueSeek); HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessOrganisationsListPID.erase(intValueSeek); BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ GeneralOrganisationsListPref.erase(intValueSeek); GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ HomeOrganisationsListPref.erase(intValueSeek); HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ BusinessOrganisationsListPref.erase(intValueSeek); BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("LANGUAGE")){
+               
+                       if (intType == 0){ GeneralOrganisationsListLanguage.erase(intValueSeek); GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeOrganisationsListLanguage.erase(intValueSeek); HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessOrganisationsListLanguage.erase(intValueSeek); BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("SORT-AS")){
+               
+                       if (intType == 0){ GeneralOrganisationsListSortAs.erase(intValueSeek); GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeOrganisationsListSortAs.erase(intValueSeek); HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessOrganisationsListSortAs.erase(intValueSeek); BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }                       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       ProcessCaptureStrings(&wxSPropertySeg2);
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboOrganisations->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralOrganisationsList.erase(intValueSeek);
+               GeneralOrganisationsListType.erase(intValueSeek);
+               GeneralOrganisationsListTokens.erase(intValueSeek);
+               GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeOrganisations->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeOrganisationsList.erase(intValueSeek);
+               HomeOrganisationsListType.erase(intValueSeek);
+               HomeOrganisationsListTokens.erase(intValueSeek);                                
+               HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessOrganisations->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessOrganisationsList.erase(intValueSeek);
+               BusinessOrganisationsListType.erase(intValueSeek);
+               BusinessOrganisationsListTokens.erase(intValueSeek);                            
+               BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                           
+       
+       }
+       
+       OrgCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadPhoto.cpp b/source/contacteditor/frmContactEditor-LoadPhoto.cpp
new file mode 100644 (file)
index 0000000..6e92231
--- /dev/null
@@ -0,0 +1,275 @@
+#include "frmContactEditor.h"
+#include "../common/base64.h"
+
+void frmContactEditor::LoadPhoto(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *PhotoCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 7;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 6;
+       
+       // Look for type before continuing.                     
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       PicturesList.insert(std::make_pair(intValueSeek, ""));
+       PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
+       PicturesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+       PicturesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+       PicturesListPref.insert(std::make_pair(intValueSeek, 0));
+       PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
+       PicturesListPictureType.insert(std::make_pair(intValueSeek, wxT("")));                  
+       PicturesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       PicturesListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+       intPrevValue = 6;
+
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);          
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+               
+                       if (intType == 0){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }       
+       
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;                       
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 6){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       } else {
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                       
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }
+       
+       wxString wxSPhotoURI;
+       wxString wxSPhotoMIME;
+       wxString wxSPhotoEncoding;
+       wxString wxSPhotoData;
+       std::string base64enc;
+       
+       if (intSplitsFound == 0){
+       
+       } else {
+       
+               std::map<int, int>::iterator striter;
+       
+               striter = SplitLength.find(1);
+       
+               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+       
+               while (wSTDataType.HasMoreTokens() == TRUE){
+               
+                       wxSPhotoURI = wSTDataType.GetNextToken();
+                       wxSPhotoMIME = wSTDataType.GetNextToken();
+                       break;
+               
+               }                       
+       
+               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));                    
+       
+               while (wSTDataInfo.HasMoreTokens() == TRUE){
+               
+                       wxSPhotoEncoding = wSTDataInfo.GetNextToken();
+                       wxSPhotoData = wSTDataInfo.GetNextToken();                                      
+                       base64enc = wxSPhotoData.mb_str();
+                       break;
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(_("Picture"));
+       
+       ListCtrlIndex = lboPictures->InsertItem(coldata);
+               
+       if (intPref > 0 && intPref < 101){
+               
+               lboPictures->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+       
+       }
+               
+       PicturesList.erase(intValueSeek);
+       PicturesListType.erase(intValueSeek);
+       PicturesListTokens.erase(intValueSeek);
+       PicturesListPictureType.erase(intValueSeek);
+       PicturesListPicEncType.erase(intValueSeek);
+       PicturesList.insert(std::make_pair(intValueSeek, base64enc));
+       PicturesListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
+       PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
+       
+       if (intType == 0){
+       
+               PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 1){
+       
+               PicturesListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               lboPictures->SetItem(ListCtrlIndex, 1, _("Home"));
+       
+       } else if (intType == 2){
+       
+               PicturesListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               lboPictures->SetItem(ListCtrlIndex, 1, _("Work"));
+       
+       }
+       
+       PicturesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       PhotoCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadRelated.cpp b/source/contacteditor/frmContactEditor-LoadRelated.cpp
new file mode 100644 (file)
index 0000000..8aae707
--- /dev/null
@@ -0,0 +1,265 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadRelated(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *RelatedCount){
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       wxString RelatedType;
+       wxString RelatedTypeOriginal;                   
+       wxString RelatedName;
+       bool FirstToken = TRUE;                 
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 9;
+       int intPref = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 8;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process these.
+               
+               RelatedTypeOriginal = PropertyValue;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("contact")){
+
+                               RelatedType = _("Contact");
+
+                       } else if (PropertyValue == wxT("acquaintance")){
+
+                               RelatedType = _("Acquaintance");
+
+                       } else if (PropertyValue == wxT("friend")){
+
+                               RelatedType = _("Friend");
+
+                       } else if (PropertyValue == wxT("met")){
+
+                               RelatedType = _("Met");
+
+                       } else if (PropertyValue == wxT("co-worker")){
+
+                               RelatedType = _("Co-worker");
+
+                       } else if (PropertyValue == wxT("colleague")){
+
+                               RelatedType = _("Colleague");
+
+                       } else if (PropertyValue == wxT("co-resident")){
+
+                               RelatedType = _("Co-resident");
+
+                       } else if (PropertyValue == wxT("neighbor")){
+
+                               RelatedType = _("Neighbour");
+
+                       } else if (PropertyValue == wxT("child")){
+
+                               RelatedType = _("Child");
+
+                       } else if (PropertyValue == wxT("parent")){
+
+                               RelatedType = _("Parent");
+
+                       } else if (PropertyValue == wxT("sibling")){
+
+                               RelatedType = _("Sibling");
+
+                       } else if (PropertyValue == wxT("spouse")){
+
+                               RelatedType = _("Spouse");
+
+                       } else if (PropertyValue == wxT("kin")){
+
+                               RelatedType = _("Kin");
+
+                       } else if (PropertyValue == wxT("muse")){
+
+                               RelatedType = _("Muse");
+
+                       } else if (PropertyValue == wxT("crush")){
+
+                               RelatedType = _("Crush");
+
+                       } else if (PropertyValue == wxT("date")){
+
+                               RelatedType = _("Date");
+
+                       } else if (PropertyValue == wxT("sweetheart")){
+
+                               RelatedType = _("Sweetheart");
+
+                       } else if (PropertyValue == wxT("me")){
+
+                               RelatedType = _("Me");
+
+                       } else if (PropertyValue == wxT("agent")){
+
+                               RelatedType = _("Agent");
+
+                       } else if (PropertyValue == wxT("emergency")){
+
+                               RelatedType = _("Emergency");
+
+                       } else {
+
+                               RelatedType = PropertyValue;
+
+                       }
+               
+               }
+       
+       }
+       
+       intPrevValue = 8;                       
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);                  
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       GeneralRelatedListAltID.erase(intValueSeek);
+                       GeneralRelatedListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       GeneralRelatedListPID.erase(intValueSeek);
+                       GeneralRelatedListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intPref > 0 && intPref < 101){
+               
+                               GeneralRelatedListPref.erase(intValueSeek);
+                               GeneralRelatedListPref.insert(std::make_pair(intValueSeek, intPref));
+
+                       
+                       }
+               
+               } else if (PropertyName == wxT("LANGUAGE")){
+               
+                       GeneralRelatedListLanguage.erase(intValueSeek);
+                       GeneralRelatedListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }                                       
+       
+       // Split the address. 
+
+       //std::map<int, int>::iterator SLiter;
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(RelatedType);
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+
+       ListCtrlIndex = lboRelated->InsertItem(coldata);
+
+       lboRelated->SetItem(ListCtrlIndex, 1, wxSPropertySeg2);
+
+       if (intPref > 0 && intPref < 101){
+               
+               lboRelated->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+       }
+               
+       GeneralRelatedList.erase(intValueSeek);
+       GeneralRelatedListRelType.erase(intValueSeek);
+       GeneralRelatedListType.erase(intValueSeek);
+       GeneralRelatedListTokens.erase(intValueSeek);
+       GeneralRelatedList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+       GeneralRelatedListRelType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));                    
+       GeneralRelatedListType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));
+       GeneralRelatedListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       RelatedCount++;
+       intValueSeek++;
+
+} 
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadRole.cpp b/source/contacteditor/frmContactEditor-LoadRole.cpp
new file mode 100644 (file)
index 0000000..9ce7a09
--- /dev/null
@@ -0,0 +1,238 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadRole(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *RoleCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 6;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 5;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralRoleList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralRoleListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeRoleList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeRoleListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                             
+       
+       } else if (intType == 2){
+
+               BusinessRoleList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessRoleListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                         
+       
+       }
+       
+       intPrevValue = 5;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralRoleListAltID.erase(intValueSeek); GeneralRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeRoleListAltID.erase(intValueSeek); HomeRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessRoleListAltID.erase(intValueSeek); BusinessRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralRoleListPID.erase(intValueSeek); GeneralRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeRoleListPID.erase(intValueSeek); HomeRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessRoleListPID.erase(intValueSeek); BusinessRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ GeneralRoleListPref.erase(intValueSeek); GeneralRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ HomeRoleListPref.erase(intValueSeek); HomeRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ BusinessRoleListPref.erase(intValueSeek); BusinessRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("LANGUAGE")){
+               
+                       if (intType == 0){ GeneralRoleListLanguage.erase(intValueSeek); GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeRoleListLanguage.erase(intValueSeek); HomeRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessRoleListLanguage.erase(intValueSeek); BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboRoles->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralRoleList.erase(intValueSeek);
+               GeneralRoleListType.erase(intValueSeek);
+               GeneralRoleListTokens.erase(intValueSeek);
+               GeneralRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralRoleListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeRoles->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeRoleList.erase(intValueSeek);
+               HomeRoleListType.erase(intValueSeek);
+               HomeRoleListTokens.erase(intValueSeek);                         
+               HomeRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeRoleListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessRoles->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessRoleList.erase(intValueSeek);
+               BusinessRoleListType.erase(intValueSeek);
+               BusinessRoleListTokens.erase(intValueSeek);                             
+               BusinessRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessRoleListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                            
+       
+       }
+       
+       RoleCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadSound.cpp b/source/contacteditor/frmContactEditor-LoadSound.cpp
new file mode 100644 (file)
index 0000000..3b4cc7c
--- /dev/null
@@ -0,0 +1,275 @@
+#include "frmContactEditor.h"
+#include "../common/base64.h"
+
+void frmContactEditor::LoadSound(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *SoundCount){
+
+                       size_t intPropertyLen = wxSPropertySeg1.Len();
+                       std::map<int, int> SplitPoints;
+                       std::map<int, int> SplitLength;
+                       std::map<int, int>::iterator SLiter;                    
+                       wxString PropertyData;
+                       wxString PropertyName;
+                       wxString PropertyValue;
+                       wxString PropertyTokens;
+                       bool FirstToken = TRUE;
+                       int intSplitsFound = 0;
+                       int intSplitSize = 0;
+                       int intPrevValue = 7;
+                       int intPref = 0;                        
+                       int intType = 0;
+                       long ListCtrlIndex;
+                       
+                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+                       
+                       intPrevValue = 6;
+                       
+                       // Look for type before continuing.                     
+                       
+                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+                       intiter != SplitPoints.end(); ++intiter){
+                       
+                               SLiter = SplitLength.find(intiter->first);
+                       
+                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+                               
+                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+                               PropertyName = PropertyElement.GetNextToken();                          
+                               PropertyValue = PropertyElement.GetNextToken();
+                               
+                               intPrevValue = intiter->second;
+                               
+                               if (PropertyName == wxT("TYPE")){
+                               
+                                       if (PropertyValue == wxT("work")){
+                                       
+                                               intType = 2;                                    
+                                       
+                                       } else if (PropertyValue == wxT("home")){
+
+                                               intType = 1;
+                                       
+                                       } else {
+                                       
+                                               intType = 0;
+                                       
+                                       }
+                               
+                               }
+                       
+                       }
+                       
+                       // Setup blank lines for later on.
+                       
+                       SoundsList.insert(std::make_pair(intValueSeek, ""));
+                       SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
+                       SoundsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+                       SoundsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+                       SoundsListPref.insert(std::make_pair(intValueSeek, 0));
+                       SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxT("")));
+                       SoundsListAudioType.insert(std::make_pair(intValueSeek, wxT("")));                      
+                       SoundsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+                       SoundsListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+                       intPrevValue = 6;
+
+                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+                       intiter != SplitPoints.end(); ++intiter){
+                       
+                               SLiter = SplitLength.find(intiter->first);
+                       
+                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+                               
+                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+                               PropertyName = PropertyElement.GetNextToken();                          
+                               PropertyValue = PropertyElement.GetNextToken();
+                               
+                               intPrevValue = intiter->second;
+                               
+                               // Process properties.
+                               
+                               size_t intPropertyValueLen = PropertyValue.Len();
+                               
+                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                                       
+                                       PropertyValue.Trim();
+                                       PropertyValue.RemoveLast();
+                                       
+                               }                               
+                               
+                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                                       
+                                       PropertyValue.Remove(0, 1);
+                                       
+                               }                       
+                               
+                               ProcessCaptureStrings(&PropertyValue);
+                               
+                               if (PropertyName == wxT("ALTID")){
+
+                                       if (intType == 0){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 1){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 2){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                               
+                               } else if (PropertyName == wxT("PID")){
+
+                                       if (intType == 0){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 1){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 2){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                               
+                               } else if (PropertyName == wxT("PREF")){
+                                       
+                                       intPref = wxAtoi(PropertyValue);
+                               
+                                       if (intType == 0){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                                       else if (intType == 1){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                                       else if (intType == 2){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               
+                               } else if (PropertyName == wxT("MEDIATYPE")){
+                               
+                                       if (intType == 0){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 1){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 2){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                               
+                               } else {
+                               
+                                       // Something else we don't know about so append
+                                       // to the tokens variable.
+                                       
+                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                                       
+                                               if (FirstToken == TRUE){
+                                               
+                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                                       FirstToken = FALSE;
+                                               
+                                               } else {
+                                               
+                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                                               
+                                               }
+                                       
+                                       }
+                               
+                               }
+                       
+                       }       
+                       
+                       intPropertyLen = wxSPropertySeg2.Len();
+                       SplitPoints.clear();
+                       SplitLength.clear();
+                       intSplitsFound = 0;
+                       intSplitSize = 0;
+                       intPrevValue = 0;
+                       
+                       ProcessCaptureStrings(&wxSPropertySeg2);        
+                       
+                       for (int i = 0; i <= intPropertyLen; i++){
+               
+                               intSplitSize++;
+                       
+                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
+                       
+                                       intSplitsFound++;
+                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                                       
+                                       if (intSplitsFound == 6){ 
+                                       
+                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                                               break; 
+                                               
+                                       } else {
+                                       
+                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                                       
+                                       }
+                                       
+                                       intSplitSize = 0;                                       
+                       
+                               }
+               
+                       }
+                       
+                       wxString wxSSoundURI;
+                       wxString wxSSoundMIME;
+                       wxString wxSSoundEncoding;
+                       wxString wxSSoundData;
+                       std::string base64enc;
+                       
+                       if (intSplitsFound == 0){
+                       
+                       } else {
+                       
+                               std::map<int, int>::iterator striter;
+                       
+                               striter = SplitLength.find(1);
+                       
+                               wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+                       
+                               while (wSTDataType.HasMoreTokens() == TRUE){
+                               
+                                       wxSSoundURI = wSTDataType.GetNextToken();
+                                       wxSSoundMIME = wSTDataType.GetNextToken();
+                                       break;
+                               
+                               }                       
+                       
+                               wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));                    
+                       
+                               while (wSTDataInfo.HasMoreTokens() == TRUE){
+                               
+                                       wxSSoundEncoding = wSTDataInfo.GetNextToken();
+                                       wxSSoundData = wSTDataInfo.GetNextToken();                                      
+                                       base64enc = wxSSoundData.mb_str();
+                                       break;
+                               
+                               }
+                       
+                       }
+                       
+                       // Add the data to the General/Home/Work address variables.
+                       
+                       wxListItem coldata;
+               
+                       coldata.SetId(intValueSeek);
+                       coldata.SetData(intValueSeek);
+                       coldata.SetText(_("Sound"));
+                       
+                       ListCtrlIndex = lboSounds->InsertItem(coldata);
+                               
+                       if (intPref > 0 && intPref < 101){
+                               
+                               lboSounds->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+                       }
+                               
+                       SoundsList.erase(intValueSeek);
+                       SoundsListType.erase(intValueSeek);
+                       SoundsListTokens.erase(intValueSeek);
+                       SoundsListAudioType.erase(intValueSeek);
+                       SoundsListAudioEncType.erase(intValueSeek);
+                       SoundsList.insert(std::make_pair(intValueSeek, base64enc));
+                       SoundsListAudioType.insert(std::make_pair(intValueSeek, wxSSoundMIME));
+                       SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxSSoundEncoding));
+                       
+                       if (intType == 0){
+                       
+                               SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
+                       
+                       } else if (intType == 1){
+                       
+                               SoundsListType.insert(std::make_pair(intValueSeek, wxT("home")));
+                               lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));                 
+                       
+                       } else if (intType == 2){
+                       
+                               SoundsListType.insert(std::make_pair(intValueSeek, wxT("work")));
+                               lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));
+                       
+                       }
+                       
+                       SoundsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+                       
+                       SoundCount++;
+                       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadTelephone.cpp b/source/contacteditor/frmContactEditor-LoadTelephone.cpp
new file mode 100644 (file)
index 0000000..8771494
--- /dev/null
@@ -0,0 +1,420 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadTelephone(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *TelCount){
+
+       // Check TEL and make sure it is functioning properly.
+
+       size_t intPropertyLen = wxSPropertySeg1.Len();
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int> TypeSplitPoints;
+       std::map<int, int> TypeSplitLength;
+       std::map<int, int>::iterator SLiter;
+       std::map<int, int>::iterator SPoint;                    
+       std::map<int, int>::iterator TSLiter;
+       std::map<int, int>::iterator TSPoint;
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       wxString TelType;
+       wxString TelNumber;
+       wxString TelTypeUI;
+       wxString TelTypeDetail;
+       bool FirstToken = TRUE;
+       int intSplitsFound = 0;
+       int intSplitSize = 0;
+       int intPrevValue = 5;
+       int intPref = 0;                        
+       int intType = 0;
+       int intSplitPoint = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 4;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       // Process each value in type and translate each
+                       // part.
+               
+                       // Strip out the quotes if they are there.
+               
+                       size_t intPropertyValueLen = PropertyValue.Len();
+               
+                       if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                               PropertyValue.Trim();
+                               PropertyValue.RemoveLast();
+                       
+                       }                               
+               
+                       if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                               PropertyValue.Remove(0, 1);
+                       
+                       }
+                       
+                       TelTypeDetail = PropertyValue;
+                       
+                       intSplitSize = 0;
+                       intSplitsFound = 0;
+                       intSplitPoint = 0;
+                       
+                       for (int i = 0; i <= intPropertyValueLen; i++){
+       
+                               intSplitSize++;
+       
+                               if (PropertyValue.Mid(i, 1) == wxT(",") && PropertyValue.Mid((i - 1), 1) != wxT("\\")){
+       
+                                       if (intSplitsFound == 0){
+
+                                               TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
+                                               TypeSplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                       
+                                       } else {
+                       
+                                               TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
+                                               TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
+                       
+                                       }                       
+
+                                       intSplitsFound++;
+                                       i++;
+                                       intSplitPoint = i;
+                                       intSplitSize = 0;
+       
+                               }
+       
+                       }
+                       
+                       TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
+                       TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));                                                           
+               
+                       int intTypeSeek = 0;
+               
+                       for (std::map<int, int>::iterator typeiter = TypeSplitPoints.begin(); 
+                       typeiter != TypeSplitPoints.end(); ++typeiter){
+                       
+                               wxString TypePropertyName;
+                               
+                               TSLiter = TypeSplitLength.find(typeiter->first);
+                               
+                               TypePropertyName = PropertyValue.Mid(typeiter->second, TSLiter->second);
+                               
+                               if (intTypeSeek == 0){
+                               
+                               
+                               } else {
+                                                                               
+                                       TelTypeUI.Append(wxT(","));                                                     
+                               
+                               }
+                       
+                               if (TypePropertyName == wxT("home")){
+                               
+                                       intType = 1;
+                               
+                               } else if (TypePropertyName == wxT("work")){
+                               
+                                       intType = 2;
+                               
+                               }
+                               
+                               
+                               if (TypePropertyName == wxT("text")){
+                               
+                                       TelTypeUI.Append(_("text"));
+                                       intTypeSeek++;
+                               
+                               } else if (TypePropertyName == wxT("voice")){
+                               
+                                       TelTypeUI.Append(_("voice"));
+                                       intTypeSeek++;
+                               
+                               } else if (TypePropertyName == wxT("fax")){
+                               
+                                       TelTypeUI.Append(_("fax"));
+                                       intTypeSeek++;
+                               
+                               } else if (TypePropertyName == wxT("cell")){
+                               
+                                       TelTypeUI.Append(_("mobile"));
+                                       intTypeSeek++;
+                               
+                               } else if (TypePropertyName == wxT("video")){
+                               
+                                       TelTypeUI.Append(_("video"));
+                                       intTypeSeek++;
+                               
+                               } else if (TypePropertyName == wxT("pager")){
+                               
+                                       TelTypeUI.Append(_("pager"));
+                                       intTypeSeek++;
+                               
+                               } else if (TypePropertyName == wxT("textphone")){
+                               
+                                       TelTypeUI.Append(_("textphone"));
+                                       intTypeSeek++;
+                               
+                               }
+                       
+                       }
+               
+               }
+               
+               
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 4;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               // Process properties.
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralTelephoneListAltID.erase(intValueSeek); GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeTelephoneListAltID.erase(intValueSeek); HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessTelephoneListAltID.erase(intValueSeek); BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralTelephoneListPID.erase(intValueSeek); GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeTelephoneListPID.erase(intValueSeek); HomeTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessTelephoneListPID.erase(intValueSeek); BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+                       
+                       if (intPref > 0 && intPref < 101){
+               
+                               if (intType == 0){ GeneralTelephoneListPref.erase(intValueSeek); GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 1){ HomeTelephoneListPref.erase(intValueSeek); HomeTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               else if (intType == 2){ BusinessTelephoneListPref.erase(intValueSeek); BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                               
+                       }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+                       
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                       
+                               if (FirstToken == TRUE){
+                               
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                               
+                               } else {
+                               
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                               
+                               }
+                       
+                       }
+               
+               }
+       
+       }                       
+       
+       // Split the address. 
+
+       //std::map<int, int>::iterator SLiter;
+       intPropertyLen = wxSPropertySeg2.Len();
+       SplitPoints.clear();
+       SplitLength.clear();
+       intSplitsFound = 0;
+       intSplitSize = 0;
+       intPrevValue = 0;
+       
+       for (int i = 0; i <= intPropertyLen; i++){
+
+               intSplitSize++;
+       
+               if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+       
+                       intSplitsFound++;
+                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                       
+                       if (intSplitsFound == 1){ 
+                       
+                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                               break; 
+                               
+                       }
+                       
+                       intSplitSize = 0;                                       
+       
+               }
+
+       }
+       
+       // Split the data into several parts.                   
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               if (intiter->first == 1){
+               
+                       // Deal with PO Box.
+                       
+                       SLiter = SplitLength.find(1);
+                                                               
+                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+                       TelType = wxSPropertySeg2.Mid(0, SLiter->second);
+                       intPrevValue = intiter->second;
+                       
+                       TelNumber = wxSPropertySeg2.Mid(intPrevValue);                                  
+               
+               }
+       
+       }                       
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&PropertyValue);
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(TelNumber);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboTelephone->InsertItem(coldata);
+               
+               lboTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+               }                               
+               
+               GeneralTelephoneList.erase(intValueSeek);
+               GeneralTelephoneListType.erase(intValueSeek);
+               GeneralTelephoneListTokens.erase(intValueSeek);
+               GeneralTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
+               GeneralTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
+               GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeTelephone->InsertItem(coldata);
+
+               lboHomeTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeTelephoneList.erase(intValueSeek);
+               HomeTelephoneListType.erase(intValueSeek);
+               HomeTelephoneListTokens.erase(intValueSeek);                            
+               HomeTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
+               HomeTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
+               HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessTelephone->InsertItem(coldata);
+
+               lboBusinessTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessTelephoneList.erase(intValueSeek);
+               BusinessTelephoneListType.erase(intValueSeek);
+               BusinessTelephoneListTokens.erase(intValueSeek);                                
+               BusinessTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
+               BusinessTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
+               BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                               
+       
+       }
+       
+       TelCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadTimeZone.cpp b/source/contacteditor/frmContactEditor-LoadTimeZone.cpp
new file mode 100644 (file)
index 0000000..6750b53
--- /dev/null
@@ -0,0 +1,281 @@
+#include "frmContactEditor.h"
+                       
+void frmContactEditor::LoadTimeZone(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *TZCount){
+                       
+                       size_t intPropertyLen = wxSPropertySeg1.Len();
+                       std::map<int, int> SplitPoints;
+                       std::map<int, int> SplitLength;
+                       std::map<int, int>::iterator SLiter;                    
+                       wxString PropertyData;
+                       wxString PropertyName;
+                       wxString PropertyValue;
+                       wxString PropertyTokens;
+                       bool FirstToken = TRUE;                 
+                       int intSplitsFound = 0;
+                       int intSplitSize = 0;
+                       int intPrevValue = 4;
+                       int intPref = 0;                        
+                       int intType = 0;
+                       long ListCtrlIndex;
+                       
+                       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+                       
+                       intPrevValue = 3;
+                       
+                       // Look for type before continuing.
+                       
+                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+                       intiter != SplitPoints.end(); ++intiter){
+                       
+                               SLiter = SplitLength.find(intiter->first);
+                       
+                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+                               
+                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+                               PropertyName = PropertyElement.GetNextToken();                          
+                               PropertyValue = PropertyElement.GetNextToken();
+                               
+                               intPrevValue = intiter->second;
+                               
+                               if (PropertyName == wxT("TYPE")){
+                               
+                                       if (PropertyValue == wxT("work")){
+                                       
+                                               intType = 2;                                    
+                                       
+                                       } else if (PropertyValue == wxT("home")){
+
+                                               intType = 1;
+                                       
+                                       } else {
+                                       
+                                               intType = 0;
+                                       
+                                       }
+                               
+                               }
+                       
+                       }
+                       
+                       // Setup blank lines for later on.
+                       
+                       if (intType == 0){
+                       
+                               GeneralTZList.insert(std::make_pair(intValueSeek, wxT("")));
+                               GeneralTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+                               GeneralTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
+                               GeneralTZListPref.insert(std::make_pair(intValueSeek, 0));
+                               GeneralTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+                               GeneralTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+                       } else if (intType == 1){
+                       
+                               HomeTZList.insert(std::make_pair(intValueSeek, wxT("")));
+                               HomeTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+                               HomeTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
+                               HomeTZListPref.insert(std::make_pair(intValueSeek, 0));
+                               HomeTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));                              
+                               HomeTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+                       
+                       } else if (intType == 2){
+
+                               BusinessTZList.insert(std::make_pair(intValueSeek, wxT("")));
+                               BusinessTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+                               BusinessTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
+                               BusinessTZListPref.insert(std::make_pair(intValueSeek, 0));
+                               BusinessTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));                          
+                               BusinessTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+                       
+                       }
+                       
+                       intPrevValue = 3;
+                       
+                       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+                       intiter != SplitPoints.end(); ++intiter){
+                       
+                               SLiter = SplitLength.find(intiter->first);
+                       
+                               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+                               
+                               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+                               PropertyName = PropertyElement.GetNextToken();                          
+                               PropertyValue = PropertyElement.GetNextToken();
+                               
+                               intPrevValue = intiter->second;
+                               
+                               size_t intPropertyValueLen = PropertyValue.Len();
+                               
+                               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                                       
+                                       PropertyValue.Trim();
+                                       PropertyValue.RemoveLast();
+                                       
+                               }                               
+                               
+                               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                                       
+                                       PropertyValue.Remove(0, 1);
+                                       
+                               }                               
+                               
+                               ProcessCaptureStrings(&PropertyValue);
+                               
+                               // Process properties.
+                               
+                               if (PropertyName == wxT("ALTID")){
+
+                                       if (intType == 0){ GeneralTZListAltID.erase(intValueSeek); GeneralTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 1){ HomeTZListAltID.erase(intValueSeek); HomeTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 2){ BusinessTZListAltID.erase(intValueSeek); BusinessTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                               
+                               } else if (PropertyName == wxT("PID")){
+
+                                       if (intType == 0){ GeneralTZListPID.erase(intValueSeek); GeneralTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 1){ HomeTZListPID.erase(intValueSeek); HomeTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 2){ BusinessTZListPID.erase(intValueSeek); BusinessTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                               
+                               } else if (PropertyName == wxT("MEDIATYPE")){
+                               
+                                       if (intType == 0){ GeneralTZListMediatype.erase(intValueSeek); GeneralTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 1){ HomeTZListMediatype.erase(intValueSeek); HomeTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                                       else if (intType == 2){ BusinessTZListMediatype.erase(intValueSeek); BusinessTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                               
+                               } else if (PropertyName == wxT("PREF")){
+                                       
+                                       intPref = wxAtoi(PropertyValue);
+                               
+                                       if (intPref > 0 && intPref < 101){
+                               
+                                               if (intType == 0){ GeneralTZListPref.erase(intValueSeek); GeneralTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                                               else if (intType == 1){ HomeTZListPref.erase(intValueSeek); HomeTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                                               else if (intType == 2){ BusinessTZListPref.erase(intValueSeek); BusinessTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                                       
+                                       }
+                               
+                               } else {
+                               
+                                       // Something else we don't know about so append
+                                       // to the tokens variable.
+                                       
+                                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+                                       
+                                               if (FirstToken == TRUE){
+                                               
+                                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                                       FirstToken = FALSE;
+                                               
+                                               } else {
+                                               
+                                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                                               
+                                               }
+                                       
+                                       }
+                               
+                               }
+                       
+                       }                       
+                       
+                       // Split the address. 
+               
+                       //std::map<int, int>::iterator SLiter;
+                       intPropertyLen = wxSPropertySeg2.Len();
+                       SplitPoints.clear();
+                       SplitLength.clear();
+                       intSplitsFound = 0;
+                       intSplitSize = 0;
+                       intPrevValue = 0;
+                       
+                       for (int i = 0; i <= intPropertyLen; i++){
+               
+                               intSplitSize++;
+                       
+                               if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+                       
+                                       intSplitsFound++;
+                                       SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+                                       
+                                       if (intSplitsFound == 6){ 
+                                       
+                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                                               break; 
+                                               
+                                       } else {
+                                       
+                                               SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+                                       
+                                       }
+                                       
+                                       intSplitSize = 0;                                       
+                       
+                               }
+               
+                       }       
+                       
+                       // Add the data to the General/Home/Work address variables.
+                       
+                       ProcessCaptureStrings(&wxSPropertySeg2);                        
+                       
+                       wxListItem coldata;
+               
+                       coldata.SetId(intValueSeek);
+                       coldata.SetData(intValueSeek);
+                       coldata.SetText(wxSPropertySeg2);
+                       
+                       if (intType == 0){
+                       
+                               ListCtrlIndex = lboTimezones->InsertItem(coldata);
+                               
+                               if (intPref > 0 && intPref < 101){
+                               
+                                       lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                                       
+                               }
+                               
+                               GeneralTZList.erase(intValueSeek);
+                               GeneralTZListType.erase(intValueSeek);
+                               GeneralTZListTokens.erase(intValueSeek);
+                               GeneralTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+                               GeneralTZListType.insert(std::make_pair(intValueSeek, wxT("")));
+                               GeneralTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+                       
+                       } else if (intType == 1){ 
+                       
+                               ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
+
+                               if (intPref > 0 && intPref < 101){
+                               
+                                       lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                                       
+                               }
+
+                               HomeTZList.erase(intValueSeek);
+                               HomeTZListType.erase(intValueSeek);
+                               HomeTZListTokens.erase(intValueSeek);                           
+                               HomeTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+                               HomeTZListType.insert(std::make_pair(intValueSeek, wxT("home")));
+                               HomeTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+                       
+                       } else if (intType == 2){ 
+                       
+                               ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
+
+                               if (intPref > 0 && intPref < 101){
+                               
+                                       lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                                       
+                               }
+
+                               BusinessTZList.erase(intValueSeek);
+                               BusinessTZListType.erase(intValueSeek);
+                               BusinessTZListTokens.erase(intValueSeek);                               
+                               BusinessTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+                               BusinessTZListType.insert(std::make_pair(intValueSeek, wxT("work")));
+                               BusinessTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                              
+                       
+                       }
+               
+                       TZCount++;
+                       intValueSeek++; 
+                       
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadTitle.cpp b/source/contacteditor/frmContactEditor-LoadTitle.cpp
new file mode 100644 (file)
index 0000000..07638e5
--- /dev/null
@@ -0,0 +1,239 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadTitle(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *TitleCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 7;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 6;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralTitleList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTitleListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeTitleList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeTitleListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                            
+       
+       } else if (intType == 2){
+
+               BusinessTitleList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessTitleListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));                                
+       
+       }
+       
+       intPrevValue = 6;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }                               
+               
+               ProcessCaptureStrings(&PropertyValue);
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralTitleListAltID.erase(intValueSeek); GeneralTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeTitleListAltID.erase(intValueSeek); HomeTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessTitleListAltID.erase(intValueSeek); BusinessTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralTitleListPID.erase(intValueSeek); GeneralTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeTitleListPID.erase(intValueSeek); HomeTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessTitleListPID.erase(intValueSeek); BusinessTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ GeneralTitleListPref.erase(intValueSeek); GeneralTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ HomeTitleListPref.erase(intValueSeek); HomeTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ BusinessTitleListPref.erase(intValueSeek); BusinessTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("LANGUAGE")){
+               
+                       if (intType == 0){ GeneralTitleListLanguage.erase(intValueSeek); GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeTitleListLanguage.erase(intValueSeek); HomeTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessTitleListLanguage.erase(intValueSeek); BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboTitles->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralTitleList.erase(intValueSeek);
+               GeneralTitleListType.erase(intValueSeek);
+               GeneralTitleListTokens.erase(intValueSeek);
+               GeneralTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralTitleListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeTitles->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeTitleList.erase(intValueSeek);
+               HomeTitleListType.erase(intValueSeek);
+               HomeTitleListTokens.erase(intValueSeek);                                
+               HomeTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeTitleListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessTitles->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessTitleList.erase(intValueSeek);
+               BusinessTitleListType.erase(intValueSeek);
+               BusinessTitleListTokens.erase(intValueSeek);                            
+               BusinessTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessTitleListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                           
+       
+       }
+       
+       TitleCount++;
+       intValueSeek++;
+
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadURL.cpp b/source/contacteditor/frmContactEditor-LoadURL.cpp
new file mode 100644 (file)
index 0000000..1955a41
--- /dev/null
@@ -0,0 +1,235 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadURL(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *URLCount){
+
+       std::map<int, int> SplitPoints;
+       std::map<int, int> SplitLength;
+       std::map<int, int>::iterator SLiter;                    
+       wxString PropertyData;
+       wxString PropertyName;
+       wxString PropertyValue;
+       wxString PropertyTokens;
+       bool FirstToken = TRUE;
+       int intPrevValue = 5;
+       int intPref = 0;                        
+       int intType = 0;
+       long ListCtrlIndex;
+       
+       SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+       
+       intPrevValue = 4;
+       
+       // Look for type before continuing.
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               if (PropertyName == wxT("TYPE")){
+               
+                       if (PropertyValue == wxT("work")){
+                       
+                               intType = 2;                                    
+                       
+                       } else if (PropertyValue == wxT("home")){
+
+                               intType = 1;
+                       
+                       } else {
+                       
+                               intType = 0;
+                       
+                       }
+               
+               }
+       
+       }
+       
+       // Setup blank lines for later on.
+       
+       if (intType == 0){
+       
+               GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
+               GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+       } else if (intType == 1){
+       
+               HomeWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               HomeWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
+               HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       } else if (intType == 2){
+
+               BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+               BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
+               BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+       
+       }
+       
+       intPrevValue = 4;
+       
+       for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+       intiter != SplitPoints.end(); ++intiter){
+       
+               SLiter = SplitLength.find(intiter->first);
+       
+               PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+               
+               wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+               PropertyName = PropertyElement.GetNextToken();                          
+               PropertyValue = PropertyElement.GetNextToken();
+               
+               intPrevValue = intiter->second;
+               
+               // Process properties.
+               
+               size_t intPropertyValueLen = PropertyValue.Len();
+               
+               if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+                       
+                       PropertyValue.Trim();
+                       PropertyValue.RemoveLast();
+                       
+               }                               
+               
+               if (PropertyValue.Mid(0, 1) == wxT("\"")){
+                       
+                       PropertyValue.Remove(0, 1);
+                       
+               }
+               
+               ProcessCaptureStrings(&PropertyValue);          
+               
+               if (PropertyName == wxT("ALTID")){
+
+                       if (intType == 0){ GeneralWebsiteListAltID.erase(intValueSeek); GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeWebsiteListAltID.erase(intValueSeek); HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessWebsiteListAltID.erase(intValueSeek); BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PID")){
+
+                       if (intType == 0){ GeneralWebsiteListPID.erase(intValueSeek); GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeWebsiteListPID.erase(intValueSeek); HomeWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessWebsiteListPID.erase(intValueSeek); BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else if (PropertyName == wxT("PREF")){
+                       
+                       intPref = wxAtoi(PropertyValue);
+               
+                       if (intType == 0){ GeneralWebsiteListPref.erase(intValueSeek); GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 1){ HomeWebsiteListPref.erase(intValueSeek); HomeWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+                       else if (intType == 2){ BusinessWebsiteListPref.erase(intValueSeek); BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+               
+               } else if (PropertyName == wxT("MEDIATYPE")){
+               
+                       if (intType == 0){ GeneralWebsiteListMediatype.erase(intValueSeek); GeneralWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 1){ HomeWebsiteListMediatype.erase(intValueSeek); HomeWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+                       else if (intType == 2){ BusinessWebsiteListMediatype.erase(intValueSeek); BusinessWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+               
+               } else {
+               
+                       // Something else we don't know about so append
+                       // to the tokens variable.
+               
+                       if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+               
+                               if (FirstToken == TRUE){
+                       
+                                       PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+                                       FirstToken = FALSE;
+                       
+                               } else {
+                       
+                                       PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+                       
+                               }
+               
+                       }
+               
+               }
+       
+       }
+       
+       // Add the data to the General/Home/Work address variables.
+       
+       ProcessCaptureStrings(&wxSPropertySeg2);
+       
+       wxListItem coldata;
+
+       coldata.SetId(intValueSeek);
+       coldata.SetData(intValueSeek);
+       coldata.SetText(wxSPropertySeg2);
+       
+       if (intType == 0){
+       
+               ListCtrlIndex = lboWebsites->InsertItem(coldata);
+               
+               if (intPref > 0 && intPref < 101){
+               
+                       lboWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+               
+               GeneralWebsiteList.erase(intValueSeek);
+               GeneralWebsiteListType.erase(intValueSeek);
+               GeneralWebsiteListTokens.erase(intValueSeek);
+               GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               GeneralWebsiteListType.insert(std::make_pair(intValueSeek, wxT("")));
+               GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 1){ 
+       
+               ListCtrlIndex = lboHomeWebsites->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboHomeWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               HomeWebsiteList.erase(intValueSeek);
+               HomeWebsiteListType.erase(intValueSeek);
+               HomeWebsiteListTokens.erase(intValueSeek);                              
+               HomeWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               HomeWebsiteListType.insert(std::make_pair(intValueSeek, wxT("home")));
+               HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+       
+       } else if (intType == 2){ 
+       
+               ListCtrlIndex = lboBusinessWebsites->InsertItem(coldata);
+
+               if (intPref > 0 && intPref < 101){
+               
+                       lboBusinessWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+                       
+               }
+
+               BusinessWebsiteList.erase(intValueSeek);
+               BusinessWebsiteListType.erase(intValueSeek);
+               BusinessWebsiteListTokens.erase(intValueSeek);                          
+               BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+               BusinessWebsiteListType.insert(std::make_pair(intValueSeek, wxT("work")));
+               BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));                         
+       
+       }
+       
+       URLCount++;
+       intValueSeek++;
+
+}
\ No newline at end of file
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy