/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */

/**
 * @fileoverview view enhancement library for gadgets.
 */

gadgets.views = gadgets.views || {};

(function() {
  var resultCallbackMap = {},
      rcbnum = 0;

  gadgets.util.registerOnLoadHandler(function() {
    gadgets.rpc.register('gadgets.views.deliverResult', function(rcbnum, result) {
      if (this.f !== '..') {
        return;
      }
      var resultCallback;
      if (resultCallback = resultCallbackMap[rcbnum]) {
        delete resultCallbackMap[rcbnum];
        resultCallback(result);
      }
    });
  });

  gadgets.views.registerCallback_ = function(cb) {
    resultCallbackMap[rcbnum] = cb;
    return rcbnum++;
  };

  /**
   * Sets the return value for the current window. This method should only be
   * called inside those secondary view types defined in gadgets.views.ViewType.
   * For example, DIALOG or MODALDIALOG
   *
   * @param {object}
   *          returnValue: Return value for this window.
   */
  gadgets.views.setReturnValue = function(returnValue) {
    gadgets.rpc.call('..', 'gadgets.views.setReturnValue', null,
      returnValue
    );
  };
})();