Merge branch 'tizen_4.0' into tizen_5.0
[platform/core/api/webapi-plugins.git] / src / calendar / js / calendar.js
index af6ecdc..0aede5e 100755 (executable)
  */
 
 var _global = window || global || {};
+
 var CalendarType = {
-  EVENT: 'EVENT',
-  TASK: 'TASK'
+    EVENT: 'EVENT',
+    TASK: 'TASK'
 };
 
 /**
  * For internal use only.
  */
 var InternalCalendar = function(data) {
-  Object.defineProperties(this, {
-    accountId: {
-      value: -1,
-      writable: true,
-      enumerable: true
-    },
-    id: {
-      value: null,
-      writable: true,
-      enumerable: true
-    },
-    name: {
-      value: null,
-      writable: true,
-      enumerable: true
-    },
-    type: {
-      value: '',
-      writable: true,
-      enumerable: true
-    },
-    isUnified: {
-      value: false,
-      writable: true,
-      enumerable: true
-    }
-  });
+    Object.defineProperties(this, {
+        accountId: {
+            value: -1,
+            writable: true,
+            enumerable: true
+        },
+        id: {
+            value: null,
+            writable: true,
+            enumerable: true
+        },
+        name: {
+            value: null,
+            writable: true,
+            enumerable: true
+        },
+        type: {
+            value: '',
+            writable: true,
+            enumerable: true
+        },
+        isUnified: {
+            value: false,
+            writable: true,
+            enumerable: true
+        }
+    });
 
-  if (data instanceof _global.Object) {
-    for (var prop in data) {
-      if (this.hasOwnProperty(prop)) {
-        this[prop] = data[prop];
-      }
+    if (data instanceof _global.Object) {
+        for (var prop in data) {
+            if (this.hasOwnProperty(prop)) {
+                this[prop] = data[prop];
+            }
+        }
     }
-  }
 };
 
-
 // class Calendar
 var Calendar = function(accountId, name, type) {
-  var _data;
+    var _data;
 
-  validator_.isConstructorCall(this, Calendar);
+    validator_.isConstructorCall(this, Calendar);
 
-  if (arguments[0] instanceof InternalCalendar) {
-    _data = arguments[0];
-  } else {
-    var _accountId = converter_.toLong(accountId);
-    var _name = converter_.toString(name);
-    var _type = converter_.toString(type);
-
-    if (arguments.length < 3) {
-      _data = new InternalCalendar();
+    if (arguments[0] instanceof InternalCalendar) {
+        _data = arguments[0];
     } else {
-      _data = new InternalCalendar({
+        var _accountId = converter_.toLong(accountId);
+        var _name = converter_.toString(name);
+        var _type = converter_.toString(type);
+
+        if (arguments.length < 3) {
+            _data = new InternalCalendar();
+        } else {
+            _data = new InternalCalendar({
                 accountId: _accountId,
                 name: _name,
                 type: _type
-      });
-    }
-  }
-
-  Object.defineProperties(this, {
-    accountId: {
-      value: converter_.toLong(_data.accountId),
-      writable: false,
-      enumerable: true
-    },
-    id: {
-      get: function() {
-        return converter_.toString(_data.id, true);
-      },
-      set: function(v) {
-        if (v instanceof InternalCalendar) {
-          _data.id = v.id;
+            });
         }
-      },
-      enumerable: true
-    },
-    name: {
-      value: _data.name,
-      writable: false,
-      enumerable: true
-    },
-    type: {
-      value: _data.type,
-      writable: false,
-      enumerable: false
-    },
-    isUnified: {
-      value: _data.isUnified,
-      writable: false,
-      enumerable: false
     }
-  });
+
+    Object.defineProperties(this, {
+        accountId: {
+            value: converter_.toLong(_data.accountId),
+            writable: false,
+            enumerable: true
+        },
+        id: {
+            get: function() {
+                return converter_.toString(_data.id, true);
+            },
+            set: function(v) {
+                if (v instanceof InternalCalendar) {
+                    _data.id = v.id;
+                }
+            },
+            enumerable: true
+        },
+        name: {
+            value: _data.name,
+            writable: false,
+            enumerable: true
+        },
+        type: {
+            value: _data.type,
+            writable: false,
+            enumerable: false
+        },
+        isUnified: {
+            value: _data.isUnified,
+            writable: false,
+            enumerable: false
+        }
+    });
 };
 
 Calendar.prototype.get = function(id) {
-  var args;
-  if (this.type === CalendarType.TASK) {
-    if (!parseInt(id) || parseInt(id) <= 0) {
-      throw new WebAPIException(WebAPIException.NOT_FOUND_ERR);
+    var args;
+    if (this.type === CalendarType.TASK) {
+        if (!parseInt(id) || parseInt(id) <= 0) {
+            throw new WebAPIException(WebAPIException.NOT_FOUND_ERR);
+        }
+        args = validator_.validateArgs(arguments, [
+            {
+                name: 'id',
+                type: types_.STRING
+            }
+        ]);
+    } else {
+        args = validator_.validateArgs(arguments, [
+            {
+                name: 'id',
+                type: types_.PLATFORM_OBJECT,
+                values: tizen.CalendarEventId
+            }
+        ]);
     }
-    args = validator_.validateArgs(arguments, [{
-      name: 'id',
-      type: types_.STRING
-    }]);
-  } else {
-    args = validator_.validateArgs(arguments, [{
-      name: 'id',
-      type: types_.PLATFORM_OBJECT,
-      values: tizen.CalendarEventId
-    }]);
-  }
-
-  var result = native_.callSync('Calendar_get', {
-    calendarId: this.id,
-    id: args.id
-  });
-
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
-
-  _edit.allow();
-  var item;
-  var _item = native_.getResultObject(result);
-
-  if (this.type === CalendarType.TASK) {
-    item = new CalendarTask(_itemConverter.toTizenObject(_item, _item.isAllDay));
-  } else {
-    item = new CalendarEvent(_itemConverter.toTizenObject(_item, _item.isAllDay));
-  }
-  _edit.disallow();
-
-  return item;
+
+    var result = native_.callSync('Calendar_get', {
+        calendarId: this.id,
+        id: args.id
+    });
+
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
+    }
+
+    _edit.allow();
+    var item;
+    var _item = native_.getResultObject(result);
+
+    if (this.type === CalendarType.TASK) {
+        item = new CalendarTask(_itemConverter.toTizenObject(_item, _item.isAllDay));
+    } else {
+        item = new CalendarEvent(_itemConverter.toTizenObject(_item, _item.isAllDay));
+    }
+    _edit.disallow();
+
+    return item;
 };
 
 Calendar.prototype.add = function() {
-  var args = validator_.validateArgs(arguments, [
-    {
-      name: 'item',
-      type: types_.PLATFORM_OBJECT,
-      values: [CalendarEvent, CalendarTask]
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'item',
+            type: types_.PLATFORM_OBJECT,
+            values: [CalendarEvent, CalendarTask]
+        }
+    ]);
+
+    if (
+        (this.type === CalendarType.EVENT && !(args.item instanceof CalendarEvent)) ||
+        (this.type === CalendarType.TASK && !(args.item instanceof CalendarTask))
+    ) {
+        throw new WebAPIException(
+            WebAPIException.TYPE_MISMATCH_ERR,
+            'Invalid item type.'
+        );
     }
-  ]);
 
-  if ((this.type === CalendarType.EVENT && !(args.item instanceof CalendarEvent)) ||
-      (this.type === CalendarType.TASK && !(args.item instanceof CalendarTask))) {
-    throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR,
-        'Invalid item type.');
-  }
+    var tmp = _itemConverter.fromTizenObject(args.item);
+    tmp.calendarId = this.id;
 
-  var tmp = _itemConverter.fromTizenObject(args.item);
-  tmp.calendarId = this.id;
-
-  var result = native_.callSync('Calendar_add', {
-    item: tmp,
-    type: this.type
-  });
+    var result = native_.callSync('Calendar_add', {
+        item: tmp,
+        type: this.type
+    });
 
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
+    }
 
-  var _id = native_.getResultObject(result);
+    var _id = native_.getResultObject(result);
 
-  _edit.allow();
-  args.item.calendarId = this.id;
+    _edit.allow();
+    args.item.calendarId = this.id;
 
-  switch (this.type) {
+    switch (this.type) {
     case CalendarType.EVENT:
-      args.item.id = new CalendarEventId(_id.uid, _id.rid);
-      break;
+        args.item.id = new CalendarEventId(_id.uid, _id.rid);
+        break;
     case CalendarType.TASK:
-      args.item.id = _id.uid;
-      break;
-  }
-  _edit.disallow();
+        args.item.id = _id.uid;
+        break;
+    }
+    _edit.disallow();
 };
 
 Calendar.prototype.addBatch = function() {
-  var args = validator_.validateArgs(arguments, [
-    {
-      name: 'items',
-      type: types_.ARRAY,
-      values: (this.type === CalendarType.EVENT)
-                ? tizen.CalendarEvent : tizen.CalendarTask
-    }, {
-      name: 'successCallback',
-      type: types_.FUNCTION,
-      optional: true,
-      nullable: true
-    }, {
-      name: 'errorCallback',
-      type: types_.FUNCTION,
-      optional: true,
-      nullable: true
-    }
-  ]);
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'items',
+            type: types_.ARRAY,
+            values:
+                this.type === CalendarType.EVENT
+                    ? tizen.CalendarEvent
+                    : tizen.CalendarTask
+        },
+        {
+            name: 'successCallback',
+            type: types_.FUNCTION,
+            optional: true,
+            nullable: true
+        },
+        {
+            name: 'errorCallback',
+            type: types_.FUNCTION,
+            optional: true,
+            nullable: true
+        }
+    ]);
 
-  var callback = function(result) {
-    if (native_.isFailure(result)) {
-      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
-    } else {
-      _edit.allow();
-      var _ids = native_.getResultObject(result);
-      for (var i = 0; i < args.items.length; i++) {
-        args.items[i].calendarId = this.id;
-        switch (this.type) {
-          case CalendarType.EVENT:
-            args.items[i].id = new CalendarEventId(_ids[i].uid, _ids[i].rid);
-            break;
-          case CalendarType.TASK:
-            args.items[i].id = _ids[i].uid;
-            break;
+    var callback = function(result) {
+        if (native_.isFailure(result)) {
+            native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+        } else {
+            _edit.allow();
+            var _ids = native_.getResultObject(result);
+            for (var i = 0; i < args.items.length; i++) {
+                args.items[i].calendarId = this.id;
+                switch (this.type) {
+                case CalendarType.EVENT:
+                    args.items[i].id = new CalendarEventId(_ids[i].uid, _ids[i].rid);
+                    break;
+                case CalendarType.TASK:
+                    args.items[i].id = _ids[i].uid;
+                    break;
+                }
+            }
+            _edit.disallow();
+            native_.callIfPossible(args.successCallback, args.items);
         }
-      }
-      _edit.disallow();
-      native_.callIfPossible(args.successCallback, args.items);
+    }.bind(this);
+
+    var tmp = [];
+    var tmpItem;
+    for (var i = 0; i < args.items.length; i++) {
+        if (
+            (this.type === CalendarType.EVENT &&
+                !(args.items[i] instanceof CalendarEvent)) ||
+            (this.type === CalendarType.TASK && !(args.items[i] instanceof CalendarTask))
+        ) {
+            throw new WebAPIException(
+                WebAPIException.TYPE_MISMATCH_ERR,
+                'Invalid item type.'
+            );
+        }
+        tmpItem = _itemConverter.fromTizenObject(args.items[i]);
+        tmpItem.calendarId = this.id;
+        tmp.push(tmpItem);
     }
-  }.bind(this);
-
-  var tmp = [];
-  var tmpItem;
-  for (var i = 0; i < args.items.length; i++) {
-    if ((this.type === CalendarType.EVENT && !(args.items[i] instanceof CalendarEvent)) ||
-            (this.type === CalendarType.TASK && !(args.items[i] instanceof CalendarTask))) {
-      throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR,
-        'Invalid item type.');
+
+    var result = native_.call(
+        'Calendar_addBatch',
+        {
+            type: this.type,
+            items: tmp
+        },
+        callback
+    );
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
     }
-    tmpItem = _itemConverter.fromTizenObject(args.items[i]);
-    tmpItem.calendarId = this.id;
-    tmp.push(tmpItem);
-  }
-
-  var result = native_.call('Calendar_addBatch', {
-    type: this.type,
-    items: tmp
-  }, callback);
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
 };
 
 Calendar.prototype.update = function() {
-  var args = validator_.validateArgs(arguments, [
-    {
-      name: 'item',
-      type: types_.PLATFORM_OBJECT,
-      values: [tizen.CalendarEvent, tizen.CalendarTask]
-    },
-    {
-      name: 'updateAllInstances',
-      type: types_.BOOLEAN,
-      optional: true,
-      nullable: true
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'item',
+            type: types_.PLATFORM_OBJECT,
+            values: [tizen.CalendarEvent, tizen.CalendarTask]
+        },
+        {
+            name: 'updateAllInstances',
+            type: types_.BOOLEAN,
+            optional: true,
+            nullable: true
+        }
+    ]);
+
+    if (
+        (this.type === CalendarType.EVENT && !(args.item instanceof CalendarEvent)) ||
+        (this.type === CalendarType.TASK && !(args.item instanceof CalendarTask))
+    ) {
+        throw new WebAPIException(
+            WebAPIException.TYPE_MISMATCH_ERR,
+            'Invalid item type.'
+        );
     }
-  ]);
-
-  if ((this.type === CalendarType.EVENT && !(args.item instanceof CalendarEvent)) ||
-      (this.type === CalendarType.TASK && !(args.item instanceof CalendarTask))) {
-    throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR,
-      'Invalid item type.');
-  }
 
-  var tmp = _itemConverter.fromTizenObject(args.item);
-  tmp.calendarId = this.id;
+    var tmp = _itemConverter.fromTizenObject(args.item);
+    tmp.calendarId = this.id;
 
-  var result = native_.callSync('Calendar_update', {
-    item: tmp,
-    type: this.type,
-    updateAllInstances: (args.has.updateAllInstances)
+    var result = native_.callSync('Calendar_update', {
+        item: tmp,
+        type: this.type,
+        updateAllInstances: args.has.updateAllInstances
             ? converter_.toBoolean(args.updateAllInstances, true)
             : true
-  });
-
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
+    });
 
-  var _item = native_.getResultObject(result);
-  _edit.allow();
-  for (var prop in _item) {
-    if (args.item.hasOwnProperty(prop)) {
-      args.item[prop] = _item[prop];
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
     }
-  }
-  _edit.disallow();
 
+    var _item = native_.getResultObject(result);
+    _edit.allow();
+    for (var prop in _item) {
+        if (args.item.hasOwnProperty(prop)) {
+            args.item[prop] = _item[prop];
+        }
+    }
+    _edit.disallow();
 };
 
 Calendar.prototype.updateBatch = function() {
-  var args = validator_.validateArgs(arguments, [
-    {
-      name: 'items',
-      type: types_.ARRAY,
-      values: (this.type === CalendarType.EVENT)
-                ? tizen.CalendarEvent : tizen.CalendarTask
-    },
-    {
-      name: 'successCallback',
-      type: types_.FUNCTION,
-      optional: true,
-      nullable: true
-    },
-    {
-      name: 'errorCallback',
-      type: types_.FUNCTION,
-      optional: true,
-      nullable: true
-    },
-    {
-      name: 'updateAllInstances',
-      type: types_.BOOLEAN,
-      optional: true,
-      nullable: true
-    }
-  ]);
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'items',
+            type: types_.ARRAY,
+            values:
+                this.type === CalendarType.EVENT
+                    ? tizen.CalendarEvent
+                    : tizen.CalendarTask
+        },
+        {
+            name: 'successCallback',
+            type: types_.FUNCTION,
+            optional: true,
+            nullable: true
+        },
+        {
+            name: 'errorCallback',
+            type: types_.FUNCTION,
+            optional: true,
+            nullable: true
+        },
+        {
+            name: 'updateAllInstances',
+            type: types_.BOOLEAN,
+            optional: true,
+            nullable: true
+        }
+    ]);
 
-  var calendarType = this.type;
+    var calendarType = this.type;
 
-  var callback = function(result) {
-    if (native_.isFailure(result)) {
-      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
-      return;
+    var callback = function(result) {
+        if (native_.isFailure(result)) {
+            native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+            return;
+        }
+
+        native_.callIfPossible(args.successCallback);
+    }.bind(this);
+
+    var tmp = [];
+    var tmpItem;
+    for (var i = 0; i < args.items.length; i++) {
+        if (
+            (calendarType === CalendarType.EVENT &&
+                !(args.items[i] instanceof CalendarEvent)) ||
+            (calendarType === CalendarType.TASK &&
+                !(args.items[i] instanceof CalendarTask))
+        ) {
+            throw new WebAPIException(
+                WebAPIException.TYPE_MISMATCH_ERR,
+                'Invalid item type.'
+            );
+        }
+        tmpItem = _itemConverter.fromTizenObject(args.items[i]);
+        tmp.push(tmpItem);
     }
 
-    native_.callIfPossible(args.successCallback);
-  }.bind(this);
+    var result = native_.call(
+        'Calendar_updateBatch',
+        {
+            type: this.type,
+            items: tmp,
+            updateAllInstances: args.has.updateAllInstances
+                ? converter_.toBoolean(args.updateAllInstances, true)
+                : true
+        },
+        callback
+    );
 
-  var tmp = [];
-  var tmpItem;
-  for (var i = 0; i < args.items.length; i++) {
-    if ((calendarType === CalendarType.EVENT && !(args.items[i] instanceof CalendarEvent)) ||
-            (calendarType === CalendarType.TASK && !(args.items[i] instanceof CalendarTask))) {
-      throw new WebAPIException(WebAPIException.TYPE_MISMATCH_ERR,
-        'Invalid item type.');
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
     }
-    tmpItem = _itemConverter.fromTizenObject(args.items[i]);
-    tmp.push(tmpItem);
-  }
-
-  var result = native_.call('Calendar_updateBatch', {
-    type: this.type,
-    items: tmp,
-    updateAllInstances: (args.has.updateAllInstances)
-            ? converter_.toBoolean(args.updateAllInstances, true)
-            : true
-  }, callback);
-
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
 };
 
 Calendar.prototype.remove = function(id) {
-  var args;
-  if (this.type === CalendarType.TASK) {
-    if (!parseInt(id) || parseInt(id) <= 0) {
-      throw new WebAPIException(WebAPIException.NOT_FOUND_ERR);
+    var args;
+    if (this.type === CalendarType.TASK) {
+        if (!parseInt(id) || parseInt(id) <= 0) {
+            throw new WebAPIException(WebAPIException.NOT_FOUND_ERR);
+        }
+        args = validator_.validateArgs(arguments, [
+            {
+                name: 'id',
+                type: types_.STRING
+            }
+        ]);
+    } else {
+        args = validator_.validateArgs(arguments, [
+            {
+                name: 'id',
+                type: types_.PLATFORM_OBJECT,
+                values: tizen.CalendarEventId
+            }
+        ]);
     }
-    args = validator_.validateArgs(arguments, [{
-      name: 'id',
-      type: types_.STRING
-    }]);
-  } else {
-    args = validator_.validateArgs(arguments, [{
-      name: 'id',
-      type: types_.PLATFORM_OBJECT,
-      values: tizen.CalendarEventId
-    }]);
-  }
-
-  var result = native_.callSync('Calendar_remove', {
-    type: this.type,
-    id: args.id
-  });
-
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
-};
 
-Calendar.prototype.removeBatch = function() {
-  var args = validator_.validateArgs(arguments, [
-    {
-      name: 'ids',
-      type: types_.ARRAY,
-      values: (this.type === CalendarType.EVENT)
-                ? tizen.CalendarEventId : undefined
-    },
-    {
-      name: 'successCallback',
-      type: types_.FUNCTION,
-      optional: true,
-      nullable: true
-    },
-    {
-      name: 'errorCallback',
-      type: types_.FUNCTION,
-      optional: true,
-      nullable: true
-    }
-  ]);
+    var result = native_.callSync('Calendar_remove', {
+        type: this.type,
+        id: args.id
+    });
 
-  var callback = function(result) {
     if (native_.isFailure(result)) {
-      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
-    } else {
-      native_.callIfPossible(args.successCallback);
+        throw native_.getErrorObject(result);
     }
-  };
+};
+
+Calendar.prototype.removeBatch = function() {
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'ids',
+            type: types_.ARRAY,
+            values: this.type === CalendarType.EVENT ? tizen.CalendarEventId : undefined
+        },
+        {
+            name: 'successCallback',
+            type: types_.FUNCTION,
+            optional: true,
+            nullable: true
+        },
+        {
+            name: 'errorCallback',
+            type: types_.FUNCTION,
+            optional: true,
+            nullable: true
+        }
+    ]);
+
+    var callback = function(result) {
+        if (native_.isFailure(result)) {
+            native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+        } else {
+            native_.callIfPossible(args.successCallback);
+        }
+    };
 
-  var result = native_.call('Calendar_removeBatch', {
-    type: this.type,
-    ids: args.ids
-  }, callback);
+    var result = native_.call(
+        'Calendar_removeBatch',
+        {
+            type: this.type,
+            ids: args.ids
+        },
+        callback
+    );
 
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
+    }
 };
 
 Calendar.prototype.find = function(successCallback, errorCallback, filter, sortMode) {
-  var args = validator_.validateArgs(arguments, [
-    {
-      name: 'successCallback',
-      type: types_.FUNCTION
-    },
-    {
-      name: 'errorCallback',
-      type: types_.FUNCTION,
-      optional: true,
-      nullable: true
-    },
-    {
-      name: 'filter',
-      type: types_.PLATFORM_OBJECT,
-      values: [tizen.AttributeFilter, tizen.AttributeRangeFilter, tizen.CompositeFilter],
-      optional: true,
-      nullable: true
-    },
-    {
-      name: 'sortMode',
-      type: types_.PLATFORM_OBJECT,
-      values: tizen.SortMode,
-      optional: true,
-      nullable: true
-    }
-  ]);
-  args.filter = utils_.repackFilter(args.filter);
-  var calendarType = this.type;
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'successCallback',
+            type: types_.FUNCTION
+        },
+        {
+            name: 'errorCallback',
+            type: types_.FUNCTION,
+            optional: true,
+            nullable: true
+        },
+        {
+            name: 'filter',
+            type: types_.PLATFORM_OBJECT,
+            values: [
+                tizen.AttributeFilter,
+                tizen.AttributeRangeFilter,
+                tizen.CompositeFilter
+            ],
+            optional: true,
+            nullable: true
+        },
+        {
+            name: 'sortMode',
+            type: types_.PLATFORM_OBJECT,
+            values: tizen.SortMode,
+            optional: true,
+            nullable: true
+        }
+    ]);
+    args.filter = utils_.repackFilter(args.filter);
+    var calendarType = this.type;
 
-  var callback = function(result) {
-    if (native_.isFailure(result)) {
-      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
-    } else {
-      var _items = native_.getResultObject(result);
-      var c = [];
-      _edit.allow();
-      _items.forEach(function(i) {
-        if (calendarType === CalendarType.TASK) {
-          c.push(new CalendarTask(_itemConverter.toTizenObject(i, i.isAllDay)));
+    var callback = function(result) {
+        if (native_.isFailure(result)) {
+            native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
         } else {
-          c.push(new CalendarEvent(_itemConverter.toTizenObject(i, i.isAllDay)));
+            var _items = native_.getResultObject(result);
+            var c = [];
+            _edit.allow();
+            _items.forEach(function(i) {
+                if (calendarType === CalendarType.TASK) {
+                    c.push(new CalendarTask(_itemConverter.toTizenObject(i, i.isAllDay)));
+                } else {
+                    c.push(
+                        new CalendarEvent(_itemConverter.toTizenObject(i, i.isAllDay))
+                    );
+                }
+            });
+            _edit.disallow();
+            args.successCallback(c);
         }
-      });
-      _edit.disallow();
-      args.successCallback(c);
+    };
+    var result = native_.call(
+        'Calendar_find',
+        {
+            calendarId: this.id,
+            filter: args.filter,
+            sortMode: args.sortMode || null
+        },
+        callback
+    );
 
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
     }
-  };
-  var result = native_.call('Calendar_find', {
-    calendarId: this.id,
-    filter: args.filter,
-    sortMode: args.sortMode || null
-  }, callback);
-
-  if (native_.isFailure(result)) {
-    throw native_.getErrorObject(result);
-  }
 };
 
 var _listeners = {};
@@ -515,175 +566,190 @@ var _nativeListeners = {};
 var _nextId = 0;
 
 function _CalendarEventChangeCallback(event) {
-  _CalendarChangeCallback('EVENT', event);
+    _CalendarChangeCallback('EVENT', event);
 }
 function _CalendarTaskChangeCallback(event) {
-  _CalendarChangeCallback('TASK', event);
+    _CalendarChangeCallback('TASK', event);
 }
 function _CalendarChangeCallback(type, event) {
-  var invokeListeners = function(listeners, callbackName, items) {
-    var result = [];
-    _edit.allow();
-    for (var i = 0, length = items.length; i < length; i++) {
-      var item;
-
-      if (callbackName === 'onitemsremoved') {
-        if (type === 'EVENT') {
-          item = new CalendarEventId(items[i].id, null);
-        } else {
-          item = converter_.toString(items[i].id);
-        }
-      } else {
-        item = _itemConverter.toTizenObject(items[i], items[i].isAllDay);
-        if (type === 'EVENT') {
-          item = new CalendarEvent(item);
-        } else {
-          item = new CalendarTask(item);
+    var invokeListeners = function(listeners, callbackName, items) {
+        var result = [];
+        _edit.allow();
+        for (var i = 0, length = items.length; i < length; i++) {
+            var item;
+
+            if (callbackName === 'onitemsremoved') {
+                if (type === 'EVENT') {
+                    item = new CalendarEventId(items[i].id, null);
+                } else {
+                    item = converter_.toString(items[i].id);
+                }
+            } else {
+                item = _itemConverter.toTizenObject(items[i], items[i].isAllDay);
+                if (type === 'EVENT') {
+                    item = new CalendarEvent(item);
+                } else {
+                    item = new CalendarTask(item);
+                }
+            }
+
+            result.push(item);
         }
-      }
+        _edit.disallow();
 
-      result.push(item);
-    }
-    _edit.disallow();
+        for (var watchId in listeners) {
+            if (listeners.hasOwnProperty(watchId)) {
+                native_.callIfPossible(listeners[watchId][callbackName], result);
+            }
+        }
+    }.bind(this);
 
-    for (var watchId in listeners) {
-      if (listeners.hasOwnProperty(watchId)) {
-        native_.callIfPossible(listeners[watchId][callbackName], result);
-      }
-    }
-  }.bind(this);
+    var groupItemsByCalendar = function(items) {
+        var grouped = {};
 
-  var groupItemsByCalendar = function(items) {
-    var grouped = {};
+        for (var i = 0, length = items.length; i < length; i++) {
+            var item = items[i];
 
-    for (var i = 0, length = items.length; i < length; i++) {
-      var item = items[i];
+            // skip item if we are not listening on this calendarId
+            if (!_listeners.hasOwnProperty(item.calendarId)) {
+                continue;
+            }
 
-      // skip item if we are not listening on this calendarId
-      if (!_listeners.hasOwnProperty(item.calendarId)) {
-        continue;
-      }
+            if (!grouped.hasOwnProperty(item.calendarId)) {
+                grouped[item.calendarId] = [];
+            }
+            grouped[item.calendarId].push(item);
+        }
 
-      if (!grouped.hasOwnProperty(item.calendarId)) {
-        grouped[item.calendarId] = [];
-      }
-      grouped[item.calendarId].push(item);
+        return grouped;
+    }.bind(this);
+
+    var actions = ['added', 'updated', 'removed'];
+    for (var i = 0; i < actions.length; i++) {
+        var action = actions[i];
+        var callback = 'onitems' + action;
+
+        if (
+            event.hasOwnProperty(action) &&
+            type_.isArray(event[action]) &&
+            event[action].length
+        ) {
+            // invoke listeners for unified calendars
+            if (_listeners.hasOwnProperty(type)) {
+                invokeListeners(_listeners[type], callback, event[action]);
+            }
+
+            var groupedItems = groupItemsByCalendar(event[action]);
+            for (var calendarId in groupedItems) {
+                if (groupedItems.hasOwnProperty(calendarId)) {
+                    invokeListeners(
+                        _listeners[calendarId],
+                        callback,
+                        groupedItems[calendarId]
+                    );
+                }
+            }
+        }
     }
+}
 
-    return grouped;
-  }.bind(this);
-
-  var actions = ['added', 'updated', 'removed'];
-  for (var i = 0; i < actions.length; i++) {
-    var action = actions[i];
-    var callback = 'onitems' + action;
-
-    if (event.hasOwnProperty(action) && type_.isArray(event[action]) && event[action].length) {
+Calendar.prototype.addChangeListener = function() {
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'successCallback',
+            type: types_.LISTENER,
+            values: ['onitemsadded', 'onitemsupdated', 'onitemsremoved']
+        }
+    ]);
 
-      // invoke listeners for unified calendars
-      if (_listeners.hasOwnProperty(type)) {
-        invokeListeners(_listeners[type], callback, event[action]);
-      }
+    var listenerId = 'CalendarChangeCallback_' + this.type;
 
-      var groupedItems = groupItemsByCalendar(event[action]);
-      for (var calendarId in groupedItems) {
-        if (groupedItems.hasOwnProperty(calendarId)) {
-          invokeListeners(_listeners[calendarId], callback, groupedItems[calendarId]);
+    if (!_nativeListeners.hasOwnProperty(listenerId)) {
+        var result = native_.callSync('Calendar_addChangeListener', {
+            type: this.type,
+            listenerId: listenerId
+        });
+        if (native_.isFailure(result)) {
+            throw native_.getErrorObject(result);
         }
-      }
-    }
-  }
-}
 
-Calendar.prototype.addChangeListener = function() {
-  var args = validator_.validateArgs(arguments, [{
-    name: 'successCallback',
-    type: types_.LISTENER,
-    values: ['onitemsadded', 'onitemsupdated', 'onitemsremoved']
-  }]);
-
-  var listenerId = 'CalendarChangeCallback_' + this.type;
-
-  if (!_nativeListeners.hasOwnProperty(listenerId)) {
-    var result = native_.callSync('Calendar_addChangeListener', {
-      type: this.type,
-      listenerId: listenerId
-    });
-    if (native_.isFailure(result)) {
-      throw native_.getErrorObject(result);
+        native_.addListener(
+            listenerId,
+            this.type === 'EVENT'
+                ? _CalendarEventChangeCallback
+                : _CalendarTaskChangeCallback
+        );
+        _nativeListeners[listenerId] = this.type;
     }
 
-    native_.addListener(listenerId, (this.type === 'EVENT')
-            ? _CalendarEventChangeCallback
-            : _CalendarTaskChangeCallback);
-    _nativeListeners[listenerId] = this.type;
-  }
-
-  // we can't use id in case of unified calendar - which is null for both calendar types
-  var calendarId = (this.isUnified) ? this.type : this.id;
-  if (!_listeners.hasOwnProperty(calendarId)) {
-    _listeners[calendarId] = {};
-  }
+    // we can't use id in case of unified calendar - which is null for both calendar types
+    var calendarId = this.isUnified ? this.type : this.id;
+    if (!_listeners.hasOwnProperty(calendarId)) {
+        _listeners[calendarId] = {};
+    }
 
-  var watchId = ++_nextId;
-  _listeners[calendarId][watchId] = args.successCallback;
+    var watchId = ++_nextId;
+    _listeners[calendarId][watchId] = args.successCallback;
 
-  return watchId;
+    return watchId;
 };
 
 var Calendar_removeChangeListener = function() {
-  if (type_.isEmptyObject(_listeners)) {
-    utils_.checkPrivilegeAccess(privilege_.CALENDAR_READ);
-  }
-  var args = validator_.validateArgs(arguments, [
-    {
-      name: 'watchId',
-      type: types_.LONG
+    if (type_.isEmptyObject(_listeners)) {
+        utils_.checkPrivilegeAccess(privilege_.CALENDAR_READ);
     }
-  ]);
-
-  var watchId = converter_.toString(args.watchId);
-  var calendarId = (this.isUnified) ? this.type : this.id;
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'watchId',
+            type: types_.LONG
+        }
+    ]);
 
-  if (!_listeners[calendarId] || !_listeners[calendarId][watchId]) {
-    return;
-  }
+    var watchId = converter_.toString(args.watchId);
+    var calendarId = this.isUnified ? this.type : this.id;
 
-  delete _listeners[calendarId][watchId];
+    if (!_listeners[calendarId] || !_listeners[calendarId][watchId]) {
+        return;
+    }
 
-  if (type_.isEmptyObject(_listeners[calendarId])) {
-    delete _listeners[calendarId];
-  }
+    delete _listeners[calendarId][watchId];
 
-  if (type_.isEmptyObject(_listeners)) {
+    if (type_.isEmptyObject(_listeners[calendarId])) {
+        delete _listeners[calendarId];
+    }
 
-    var result;
-    // @todo consider listener unregister when we are not listening on this.type of calendar
-    var fail = false;
-    for (var listenerId in _nativeListeners) {
-      if (_nativeListeners.hasOwnProperty(listenerId)) {
-        result = native_.callSync('Calendar_removeChangeListener', {
-          type: _nativeListeners[listenerId]
-        });
-        if (native_.isFailure(result)) {
-          fail = native_.getErrorObject(result);
+    if (type_.isEmptyObject(_listeners)) {
+        var result;
+        // @todo consider listener unregister when we are not listening on
+        //          this.type of calendar
+        var fail = false;
+        for (var listenerId in _nativeListeners) {
+            if (_nativeListeners.hasOwnProperty(listenerId)) {
+                result = native_.callSync('Calendar_removeChangeListener', {
+                    type: _nativeListeners[listenerId]
+                });
+                if (native_.isFailure(result)) {
+                    fail = native_.getErrorObject(result);
+                }
+                native_.removeListener(
+                    listenerId,
+                    this.type === 'EVENT'
+                        ? _CalendarEventChangeCallback
+                        : _CalendarTaskChangeCallback
+                );
+
+                delete _nativeListeners[listenerId];
+            }
         }
-        native_.removeListener(listenerId, (this.type === 'EVENT')
-                    ? _CalendarEventChangeCallback
-                    : _CalendarTaskChangeCallback);
 
-        delete _nativeListeners[listenerId];
-      }
-    }
-
-    if (fail) {
-      throw fail;
+        if (fail) {
+            throw fail;
+        }
     }
-  }
 };
 
 Calendar.prototype.removeChangeListener = function() {
-  Calendar_removeChangeListener.apply(this, arguments);
+    Calendar_removeChangeListener.apply(this, arguments);
 };
 
 tizen.Calendar = Calendar;