rem: getFreeBusyTimes_resp: function( wcapResponse, calId, listener, requestId ) { try { var xml = wcapResponse.data; if (listener != null) { var ret = []; var nodeList = xml.getElementsByTagName("FB"); for ( var i = 0; i < nodeList.length; ++i ) { var node = nodeList.item(i); var str = node.textContent; var slash = str.indexOf( '/' ); var start = getDatetimeFromIcalString(str.substr(0, slash)); var end = getDatetimeFromIcalString(str.substr(slash + 1)); var entry = { isBusyEntry: (node.attributes.getNamedItem("FBTYPE").nodeValue == "BUSY"), dtRangeStart: start, dtRangeEnd: end }; ret.push( entry ); 
add: function getFreeBusyTimes_resp(request, err, data) { switch (getResultCode(err)) { case Components.results.NS_OK: break; case calIWcapErrors.WCAP_NO_ERRNO: case calIWcapErrors.WCAP_ACCESS_DENIED_TO_CALENDAR: case calIWcapErrors.WCAP_CALENDAR_DOES_NOT_EXIST: log("getFreeBusyTimes_resp() error: " + errorToString(err), this_); break; default: this_.notifyError(err); break; 
context:     getFreeBusyTimes_resp:    function( wcapResponse, calId, listener, requestId )    {        try {            var xml = wcapResponse.data; // first statement, may throw            if (listener != null) {                var ret = [];                var nodeList = xml.getElementsByTagName("FB");                for ( var i = 0; i < nodeList.length; ++i ) {                    var node = nodeList.item(i);                    var str = node.textContent;                    var slash = str.indexOf( '/' );                    var start = getDatetimeFromIcalString(str.substr(0, slash));                    var end = getDatetimeFromIcalString(str.substr(slash + 1));                    var entry = {                        isBusyEntry:                        (node.attributes.getNamedItem("FBTYPE").nodeValue                         == "BUSY"),                        dtRangeStart: start,                        dtRangeEnd: end                    };                    ret.push( entry );                }                listener.onGetFreeBusyTimes(                    Components.results.NS_OK,                    requestId, calId, ret.length, ret );            }            if (LOG_LEVEL > 0) {                this.log( "calId=" + calId + ", " +                          getWcapRequestStatusString(xml),                          "getFreeBusyTimes_resp()" );            }        }        catch (exc) {            const calIWcapErrors = Components.interfaces.calIWcapErrors;            switch (getResultCode(exc)) {            case calIWcapErrors.WCAP_NO_ERRNO: // workaround            case calIWcapErrors.WCAP_ACCESS_DENIED_TO_CALENDAR:            case calIWcapErrors.WCAP_CALENDAR_DOES_NOT_EXIST:                this.log("ignored error: " + errorToString(exc),                         "getFreeBusyTimes_resp()");                break;            default:                this.notifyError( exc );                break;            }            if (listener != null)                listener.onGetFreeBusyTimes( exc, requestId, calId, 0, [] );        }    },
meta: 9421	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/9421/5f32e44ee9e35bc03083914348887f8453206bf7/calWcapSession.js/buggy/calendar/providers/wcap/calWcapSession.js