import {
    ConfigurationApi, Uri, AttendeeInfo, TimeWindow, DateTime, TimeSpan, DateTimeKind, TimeZoneInfo, AvailabilityData, EmailMessageSchema, ItemSchema, AggregateType, SortDirection, AutodiscoverService, ExchangeVersion, ExchangeCredentials, ExchangeService,
    UserSettingName, DomainSettingName, BasePropertySet, PropertySet, EnumHelper, FolderId, WellKnownFolderName, DOMParser, ItemView, Grouping, EmailMessage,
    EwsLogging, AppointmentSchema, CalendarActionResults, EwsUtilities, MeetingCancellation, MeetingRequest, MeetingResponse, Appointment, Item, StringHelper,
    ResolveNameSearchLocation, ExtendedPropertyDefinition, MapiPropertyType, ConflictResolutionMode, Guid, DefaultExtendedPropertySet, SendInvitationsMode, MessageBody,
    CalendarView, OofSettings, OofState, OofExternalAudience, OofReply, BodyType, WebCredentials
} from "../../src/js/ExchangeWebService";

import { MockXHRApi } from "../MockXHRApi";
import { MockXHRData } from "../MockXHRData";

var credentials: any = undefined;
if (typeof window === 'undefined') {
    credentials = require("./credentials");
}
else {
    credentials = { username: "username", password: "password" }
}
export class Greeter {
    element: HTMLElement;
    span: HTMLElement;
    div: HTMLElement
    timerToken: number;
    identity: <T>(arg: T[]) => T;
    loggingIdentity: <T extends string>(arg: T) => T


    start() {

        var exch = new ExchangeService(ExchangeVersion.Exchange2013);
        exch.Credentials = new WebCredentials(credentials.userName, credentials.password);
        exch.Url = new Uri("https://outlook.office365.com/Ews/Exchange.asmx");
        EwsLogging.DebugLogEnabled = true;

        var appt = new Appointment(exch);
        appt.Start = DateTime.Now.Add(48, 'hour');
        appt.End = DateTime.Now.Add(49, 'hour');
        appt.Subject = "some subject";
        appt.Location = "Plot 371 2nd floor";
        appt.Body = new MessageBody(BodyType.HTML, "Some body text");
        appt.RequiredAttendees.Add("gs@mysupport.in");
        appt.RequiredAttendees.Add("mailtosinghs@gmail.com");

        appt.Save(SendInvitationsMode.SendToAllAndSaveCopy).then(() => {
            console.log("------------");
        }, (ei) => {
            console.log(ei.stack, ei.stack.split("\n"));
            console.log("error");
        });

        return;



        var mockXhr = new MockXHRApi();
        //exch.XHRApi = mockXhr;

        var oof = new OofSettings();
        oof.State = OofState.Enabled;
        oof.InternalReply = new OofReply("internal message");
        oof.ExternalReply = new OofReply("external message");
        //oof.AllowExternalOof = OofExternalAudience.All;        
        oof.ExternalAudience = OofExternalAudience.All;

        exch.SetUserOofSettings("grouptest@mysupport.in", oof).then((resp) => {
            //EwsLogging.Log(resp,true, true);
            console.log("------------");
        }, (ei) => {
            EwsLogging.Log(ei, true, true);
            console.log(ei.stack, ei.stack.split("\n"));
            console.log("------------");
        });

        return;
        exch.GetUserOofSettings("grouptest@mysupport.in").then((resp) => {
            EwsLogging.Log(resp, true, true);
            console.log("------------");
        }, (ei) => {
            EwsLogging.Log(ei, true, true);
            console.log(ei.stack, ei.stack.split("\n"));
            console.log("------------");
        });




        return;
        mockXhr.requestXml.push(MockXHRData.Operations.CalendarOperations.FindAppointmentRequest);
        mockXhr.responseXml.push(MockXHRData.Operations.CalendarOperations.FindAppointmentRequestResponseWith3results);
        exch.FindAppointments(WellKnownFolderName.Calendar, new CalendarView(DateTime.Now.Add(-7, "days"), DateTime.Now)).then((resp) => {
            EwsLogging.Log(resp, true, true);
            console.log("------------");
        }, (ei) => {
            EwsLogging.Log(ei, true, true);
            console.log(ei.stack, ei.stack.split("\n"));
            console.log("------------");
        });


        return;
        var msgattach = new EmailMessage(exch);
        msgattach.Subject = "Dentist Appointment";
        msgattach.Body = new MessageBody("The appointment is with Dr. Smith.");
        msgattach.ToRecipients.Add("grouptest@mysupport.in")
        var file = msgattach.Attachments.AddFileAttachment("filename to attach.txt", "c29tZSB0ZXh0");
        //file.
        msgattach.Send().then(() => {
            console.log("------------");
        }, (ei) => {
            EwsLogging.Log(ei, true, true);
            console.log(ei.stack, ei.stack.split("\n"));
            console.log("------------");
        });
        return;

        var appointment = new Appointment(exch);
        appointment.Subject = "Dentist Appointment";
        appointment.Body = new MessageBody("The appointment is with Dr. Smith.");
        appointment.Start = new DateTime(new Date(2016, 3, 1, 9, 0, 0));
        appointment.End = appointment.Start.Add(2, "hour");
        appointment.Save(SendInvitationsMode.SendToNone).then(() => {
            console.log("------------");
        }, (ei) => {
            EwsLogging.Log(ei, true, true);
            console.log(ei.stack, ei.stack.split("\n"));
            console.log("------------");
        });
        return;


        //exch.TimeZoneDefinition = new TimeZoneDefinition();


        var att1 = new AttendeeInfo("gs@singhspro.onmicrosoft.com");
        var att2 = new AttendeeInfo("gstest@singhspro.onmicrosoft.com");
        // var att1 = new AttendeeInfo("gautamsi@microsoft.com");
        // var att2 = new AttendeeInfo("abhijitp@microsoft.com");
        // var att3 = new AttendeeInfo("pardeb@microsoft.com");
        // var att4 = new AttendeeInfo("bakul.jais@microsoft.com");
        var tmw = new TimeWindow(DateTime.Now, new DateTime(DateTime.Now.TotalMilliSeconds + TimeSpan.FromHours(48).TotalMilliseconds));
        var ats = [att1, att2];//, att3, att4];
        exch.GetUserAvailability(ats, tmw, AvailabilityData.FreeBusyAndSuggestions)
            .then((fi) => {
                //console.log("------found folder------" + fi.DisplayName + "--" + WellKnownFolderName[sr.ParentFolderId.FolderName]);
                EwsLogging.Log(fi, true, true);
                console.log("------------");
            }, (ei: any) => {
                EwsLogging.Log(ei, true, true);
                console.log(ei.stack, ei.stack.split("\n"));
                console.log("------------");
            });
        console.log("------------");
        return;


        var mockXhr = new MockXHRApi();
        exch.XHRApi = mockXhr
        mockXhr.requestXml = [MockXHRData.Operations.ItemOperations.FindItemRequest1ItemView];
        mockXhr.responseXml = [MockXHRData.Operations.ItemOperations.FindItemRequest1ItemViewResponse];
        var PR_TRANSPORT_MESSAGE_HEADERS = new ExtendedPropertyDefinition(MapiPropertyType.String, 0x007D);
        var EX_normalized_Subject = new ExtendedPropertyDefinition(MapiPropertyType.String, 0x0E1D); //https://willcode4foodblog.wordpress.com/2012/04/14/understanding-sharing-invitation-requests-ews-managed-api-1-2-part-2/
        var EX_prop2 = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "Content-Class", MapiPropertyType.String);
        var psPropSet = new PropertySet(BasePropertySet.IdOnly, [PR_TRANSPORT_MESSAGE_HEADERS, EX_normalized_Subject]);
        exch.FindItems(WellKnownFolderName.Inbox, new ItemView(1))
            .then((response) => {
                for (var item of response.Items) {
                    mockXhr.requestXml = [MockXHRData.Operations.ItemOperations.GetItemRequestWithIDandExtendedPropertyHeader];
                    mockXhr.responseXml = [MockXHRData.Operations.ItemOperations.GetItemRequestWithIDandExtendedPropertyHeaderResponse];

                    var MyPropertySetId: Guid = new Guid("{C11FF724-AA03-4555-9952-8FA248A11C3E}");
                    var extendedPropertyDefinition: ExtendedPropertyDefinition = new ExtendedPropertyDefinition(MyPropertySetId, "Expiration Date", MapiPropertyType.String);
                    item.SetExtendedProperty(extendedPropertyDefinition, DateTime.Now.Add(2, "days").ToISOString());

                    item.Update(ConflictResolutionMode.AutoResolve)
                    item.Load(psPropSet)
                        .then((loadResp) => {
                            var outval = { outValue: null };
                            //EwsLogging.Log(item,true,true);
                            if (item.TryGetExtendedProperty(PR_TRANSPORT_MESSAGE_HEADERS, outval)) {
                                EwsLogging.Log(outval.outValue, true, true);
                            }
                        }, (err) => {
                            EwsLogging.Log(err, true, true);
                            EwsLogging.Log("-------------- error in loading item ----------", true, true);
                        });
                }
            }, (err) => {
                EwsLogging.Log(err, true, true);
                EwsLogging.Log("-------------- error in finditem ----------", true, true);
            });




        return;
        mockXhr.requestXml = [MockXHRData.Operations.ADOperations.DLExpansionRequest];
        mockXhr.responseXml = [MockXHRData.Operations.ADOperations.DLExpansionMultipleMembersSMTPtypeResponse];
        exch.ExpandGroup("group@contoso.com").then((response) => {
            EwsLogging.Log(response, true, true);
            EwsLogging.Log("-------------- request complete ----------", true, true);
        });

        return;




        mockXhr.requestXml = [MockXHRData.Operations.ADOperations.GetPasswordExpirationRequest];
        mockXhr.responseXml = [MockXHRData.Operations.ADOperations.GetPasswordExpirationResponse_NeverExpire];
        exch.GetPasswordExpirationDate("gstest@singhs.pro").then((response) => {
            EwsLogging.Log(response, true, true);
            EwsLogging.Log("-------------- request complete ----------", true, true);
        });

        return;


        exch.ResolveName("gstest", ResolveNameSearchLocation.DirectoryOnly, true, PropertySet.IdOnly)
            .then((response) => {
                EwsLogging.Log(response.GetEnumerator()[0].Mailbox.MailboxType, true, true);
                console.log(response._getItem(0).Contact.DirectoryPhoto);
                EwsLogging.Log("-------------- request complete ----------", true, true);
            });
        return;

        var items: Item[] = [];
        var item0: Item = null;
        exch.FindItems(WellKnownFolderName.SentItems, new ItemView(3))
            .then((response) => {
                items = response.Items;
                EwsLogging.Log(items[0], true, true);
            })
            .then(() => {
                exch.BindToItem(items[0].Id, PropertySet.IdOnly).then((response) => {
                    item0 = response;
                    EwsLogging.Log(item0, true, true);
                });
            })
            .then(() => {
                item0.Load()
                    .then((response) => {
                        EwsLogging.Log(item0, true, true);
                    });
            });

        return;
        //EwsLogging.DebugLogEnabled = true;
        //var dd = new ext.DOMParser()
        //var domdata = dd.parseFromString('<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>Invalid input</faultstring> <faultactor >http://sseely2/AYS17Sept2002/Service1.asmx</faultactor> <detail> <PersonErrorInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ItemInError TextValue="FirstError"></ItemInError> <CorrectRegularExpression >^([A-Z])([a-z])+</CorrectRegularExpression> </PersonErrorInfo> <PersonErrorInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ItemInError>LastName</ItemInError> <CorrectRegularExpression >^([A-Z])([a-z])+</CorrectRegularExpression> </PersonErrorInfo> <PersonErrorInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ItemInError>EmailAddress</ItemInError> <CorrectRegularExpression >^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$</CorrectRegularExpression> </PersonErrorInfo> </detail> </soap:Fault> </soap:Body></soap:Envelope>', "text/xml");
        //var objdata = ext.Parsers.xml2js.parseXMLNode(domdata.documentElement, true);

        //var vv = objdata;
        //return;
        var colorName: string = Color[2];
        var cname = Object.prototype.toString.call(Color).slice(8, -1);;
        var rawXML = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Header> <h:ServerVersionInfo MajorVersion="15" MinorVersion="1" MajorBuildNumber="154" MinorBuildNumber="18" Version="V2_42" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> </s:Header> <s:Body> <m:GetFolderResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> <m:ResponseMessages> <m:GetFolderResponseMessage ResponseClass="Success"> <m:ResponseCode>NoError</m:ResponseCode> <m:Folders> <t:CalendarFolder> <t:FolderId Id="AAMkADVmNzUzM2M2LTY1ODgtNGIwNS05NWUwLTE5MzJhNWRhNWIzZQAuAAAAAAAt9OU5vf4nTaa38x9WV1pGAQB0vGFf3HZOSb1IxPAYl2sPAAAAAAENAAA=" ChangeKey="AgAAABYAAAB0vGFf3HZOSb1IxPAYl2sPAAAAAAA3"/> <t:ParentFolderId Id="AAMkADVmNzUzM2M2LTY1ODgtNGIwNS05NWUwLTE5MzJhNWRhNWIzZQAuAAAAAAAt9OU5vf4nTaa38x9WV1pGAQB0vGFf3HZOSb1IxPAYl2sPAAAAAAEIAAA=" ChangeKey="AQAAAA=="/> <t:FolderClass>IPF.Appointment</t:FolderClass> <t:DisplayName>Calendar</t:DisplayName> <t:TotalCount>0</t:TotalCount> <t:ChildFolderCount>0</t:ChildFolderCount> <t:EffectiveRights> <t:CreateAssociated>true</t:CreateAssociated> <t:CreateContents>true</t:CreateContents> <t:CreateHierarchy>true</t:CreateHierarchy> <t:Delete>true</t:Delete> <t:Modify>true</t:Modify> <t:Read>true</t:Read> <t:ViewPrivateItems>true</t:ViewPrivateItems> </t:EffectiveRights> <t:PermissionSet> <t:CalendarPermissions> <t:CalendarPermission> <t:UserId> <t:DistinguishedUser>Default</t:DistinguishedUser> </t:UserId> <t:CanCreateItems>false</t:CanCreateItems> <t:CanCreateSubFolders>false</t:CanCreateSubFolders> <t:IsFolderOwner>false</t:IsFolderOwner> <t:IsFolderVisible>false</t:IsFolderVisible> <t:IsFolderContact>false</t:IsFolderContact> <t:EditItems>None</t:EditItems> <t:DeleteItems>None</t:DeleteItems> <t:ReadItems>TimeOnly</t:ReadItems> <t:CalendarPermissionLevel>FreeBusyTimeOnly</t:CalendarPermissionLevel> </t:CalendarPermission> <t:CalendarPermission> <t:UserId> <t:DistinguishedUser>Anonymous</t:DistinguishedUser> </t:UserId> <t:CanCreateItems>false</t:CanCreateItems> <t:CanCreateSubFolders>false</t:CanCreateSubFolders> <t:IsFolderOwner>false</t:IsFolderOwner> <t:IsFolderVisible>false</t:IsFolderVisible> <t:IsFolderContact>false</t:IsFolderContact> <t:EditItems>None</t:EditItems> <t:DeleteItems>None</t:DeleteItems> <t:ReadItems>None</t:ReadItems> <t:CalendarPermissionLevel>None</t:CalendarPermissionLevel> </t:CalendarPermission> </t:CalendarPermissions> </t:PermissionSet> </t:CalendarFolder> </m:Folders> </m:GetFolderResponseMessage> </m:ResponseMessages> </m:GetFolderResponse> </s:Body> </s:Envelope>';
        var parser = new DOMParser();
        //var xmlDoc = parser.parseFromString(rawXML, "text/xml");
        //this.treeWalker = this.xmlDoc.createTreeWalker(this.xmlDoc, NodeFilter.SHOW_ELEMENT, null, false);
        //this.currentNode = this.treeWalker.root;

        //var objjt = ext.xml2JsObject.parseXMLNode(xmlDoc.documentElement, true);
        //EwsLogging.DebugLog(objjt, true);

        //return;
        //var autod = new Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService("https://autodiscover-s.coutlook.com/autodiscover/autodiscover.svc", "singhspro.onmicrosoft.com", Microsoft.Exchange.WebServices.Data.ExchangeVersion.Exchange2013);
        //var autod = new AutodiscoverService();//"https://pod51045.outlook.com/autodiscover/autodiscover.svc", "singhspro.onmicrosoft.com", ExchangeVersion.Exchange2013);
        //autod.RedirectionUrlValidationCallback = (val) => { return true };
        //var autod = new AutodiscoverService("https://pod51045.outlook.com/autodiscover/autodiscover.svc", "microsoft.com", ExchangeVersion.Exchange2013);
        //var x = new Microsoft.Exchange.WebServices.Data.ExchangeService(Microsoft.Exchange.WebServices.Data.ExchangeVersion.Exchange2010_SP2);
        //autod.Credentials = new ExchangeCredentials(credentials.userName, credentials.password);
        //EwsLogging.DebugLog(exch.Credentials, true);
        //exch.TimeZoneDefinition = new TimeZoneDefinition();


        var att1 = new AttendeeInfo("gs@singhspro.onmicrosoft.com");
        var att2 = new AttendeeInfo("gstest@singhspro.onmicrosoft.com");
        // var att1 = new AttendeeInfo("gautamsi@microsoft.com");
        // var att2 = new AttendeeInfo("abhijitp@microsoft.com");
        // var att3 = new AttendeeInfo("pardeb@microsoft.com");
        // var att4 = new AttendeeInfo("bakul.jais@microsoft.com");
        var tmw = new TimeWindow(DateTime.Now, new DateTime(DateTime.Now.TotalMilliSeconds + TimeSpan.FromHours(48).TotalMilliseconds));
        var ats = [att1, att2];//, att3, att4];
        exch.GetUserAvailability(ats, tmw, AvailabilityData.FreeBusyAndSuggestions)
            .then((fi) => {
                //console.log("------found folder------" + fi.DisplayName + "--" + WellKnownFolderName[sr.ParentFolderId.FolderName]);
                EwsLogging.Log(fi, true, true);
                for (var res in fi.SuggestionsResponse)
                    console.log("------------");
            }, (ei: any) => {
                EwsLogging.Log(ei, true, true);
                console.log(ei.stack, ei.stack.split("\n"));
                console.log("------------");
            });
        console.log("------------");
        return;
        return;

        var view = new ItemView(3);
        view.PropertySet = PropertySet.FirstClassProperties;
        //var sf = new SearchFilter.ContainsSubstring(ItemSchema.Subject,"test");
        var groupBy = new Grouping();
        groupBy.GroupOn = EmailMessageSchema.Instance.Subject;
        groupBy.AggregateOn = ItemSchema.Instance.DateTimeReceived;
        groupBy.AggregateType = AggregateType.Minimum;
        groupBy.SortDirection = SortDirection.Descending;
        exch.FindItems(new FolderId(WellKnownFolderName.SentItems), view, groupBy)
            .then((fi) => {
                //console.log("------found folder------" + fi.DisplayName + "--" + WellKnownFolderName[sr.ParentFolderId.FolderName]);
                EwsLogging.Log(fi, true, true);
                console.log("------------");
            }, (ei: any) => {
                EwsLogging.Log(ei, true, true);
                console.log(ei.stack, ei.stack.split("\n"));
                console.log("------------");
            });
        console.log("------------");
        return;


        var fid: FolderId = new FolderId(WellKnownFolderName.SentItems);
        exch.BindToFolder(fid, PropertySet.FirstClassProperties)
            .then((sr) => {
                console.log("------found folder------" + sr.DisplayName + "--");
                //EwsLogging.Log(sr, true, true);
                sr.FindItems(new ItemView(3))
                    .then((fi) => {
                        //console.log("------found folder------" + fi.DisplayName + "--" + WellKnownFolderName[sr.ParentFolderId.FolderName]);
                        EwsLogging.Log(fi, true, true);
                        console.log("------------");
                    }, (ei: any) => {
                        EwsLogging.Log(ei, true, true);
                        console.log("------------");
                    });
                console.log("------------");
            }, (e: any) => {
                EwsLogging.Log(e, true, true);
                console.log("------------");
            });



        return;
        //        var util = require('util');
        //        exch.AutodiscoverUrl("gs@singhspro.onmicrosoft.com",(url) => { return true; }).then((resp) => {
        //            console.log(util.inspect(exch.Url, { showHidden: false, depth: null, colors: true }));
        //            exch.BindToFolder
        //            console.log("------------");
        //        },(err) => {
        //                
        //                console.log(util.inspect(err, { showHidden: false, depth: null, colors: true }));
        //                console.log("------------");
        //
        //            });
        //
        //        return;

        // var autod = new AutodiscoverService();//new Uri("https://pod51045.outlook.com/autodiscover/autodiscover.svc"), ExchangeVersion.Exchange2013);
        // autod.RedirectionUrlValidationCallback = (val) => { return true };      
        // autod.Credentials = new ExchangeCredentials(credentials.userName, credentials.password);
        // var s: UserSettingName[] = [];
        // s.push(UserSettingName.InternalEwsUrl);
        // s.push(UserSettingName.ExternalEwsUrl);

        // s.push(UserSettingName.UserDisplayName);
        // s.push(UserSettingName.UserDN);
        // s.push(UserSettingName.EwsPartnerUrl);
        // s.push(UserSettingName.DocumentSharingLocations);
        // s.push(UserSettingName.MailboxDN);
        // s.push(UserSettingName.ActiveDirectoryServer);
        // s.push(UserSettingName.CasVersion);
        // s.push(UserSettingName.ExternalWebClientUrls);
        // s.push(UserSettingName.ExternalImap4Connections);
        // s.push(UserSettingName.AlternateMailboxes);
        // //autod.GetUserSettings(["gstest@singhspro.onmicrosoft.com", "gstest@singhspro.onmicrosoft.com"], s)
        // autod.GetUserSettings("gstest@singhspro.onmicrosoft.com", UserSettingName.InternalEwsUrl, UserSettingName.ExternalEwsUrl, UserSettingName.AlternateMailboxes, UserSettingName.MailboxDN, UserSettingName.CasVersion, UserSettingName.DocumentSharingLocations, UserSettingName.ActiveDirectoryServer, UserSettingName.EwsPartnerUrl)
        //     .then((sr) => {
        //         var util = require('util');
        //         console.log(util.inspect(sr, { showHidden: false, depth: null, colors: true }));
        //         console.log(autod.Url.ToString());
        //         //console.log(sr);
        //         console.log("------------");
        //     }, (e: any) => {
        //         var util = require('util');
        //         console.log(util.inspect(e, { showHidden: false, depth: null, colors: true }));
        //         console.log("------------");
        //     });
        // return;
        ////var d: DomainSettingName[] = [];
        //////return;
        ////d.push(DomainSettingName.ExternalEwsUrl);
        ////d.push(DomainSettingName.ExternalEwsVersion);
        ////autod.GetDomainSettings("singhspro.onmicrosoft.com", d).then((dr) => {
        ////    var util = require('util');
        ////    console.log(util.inspect(dr, { showHidden: false, depth: null, colors: true }));
        ////    console.log("------------");
        ////},(e: any) => {
        ////        console.log(e);
        ////        console.log("------------");
        ////    });


        //this.span.innerHTML = "";
        //this.div.innerHTML = "";
        //this.timerToken = setInterval(() => this.span.innerHTML = new Date().toUTCString() + " " + colorName + " " + cname, 500);
    }

    stop() {
        clearTimeout(this.timerToken);

    }

}

enum Color { Red = 1, Green, Blue };
var greeter = new Greeter();
greeter.start();


//{ "Body" : 
//    { "FolderIds" : 
//        [ 
//        { "Id" : "inbox",
//            "__type" : "DistinguishedFolderId:#Exchange"
//          } 
//      ],
//      "FolderShape" : 
//        { "BaseShape" : "AllProperties" 
//        }
//    },
//  "Header" : 
//    { "RequestServerVersion" : "Exchange2013_SP1" 
//    }
//}
// -----------fault code
//{ __prefix: 's',
//  __xmlns:
//   { s: 'http://schemas.xmlsoap.org/soap/envelope/',
//     a: 'http://schemas.microsoft.com/exchange/services/2006/types',
//     e: 'http://schemas.microsoft.com/exchange/services/2006/errors',
//     t: 'http://schemas.microsoft.com/exchange/services/2006/types' },
//  Body:
//   { __prefix: 's',
//     Fault:
//      { __prefix: 's',
//        faultcode: 'a:ErrorSchemaValidation',
//        faultstring:
//         { 'xml:lang': 'en-US',
//           faultstring: 'The request failed schema validation: The required attribute \'Id\' is missing.' },
//        detail:
//         { ResponseCode: 'ErrorSchemaValidation',
//           Message: 'The request failed schema validation.',
//           MessageXml:
//            { __prefix: 't',
//              LineNumber: '1',
//              LinePosition: '472',
//              Violation: 'The required attribute \'Id\' is missing.' } } } } }
