/*
 * 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 General purpose utilities that gadgets can use.
 */


/**
 * @class Provides general-purpose utility functions.
 */
gadgets.util = gadgets.util || {};

(function() {

  var features = {},
      services = {},
      undef,
      isDebug;

  /**
   * Checks injected feature script to see if it's debug mode.
   */
  function checkIsDebug(config) {
    var coreio = config['core.io'],
        jsPath = coreio && coreio.jsPath,
        scripts = document.getElementsByTagName('script');

    for (var i = 0; jsPath && i < scripts.length; i++) {
      var src = scripts[i].src;
      if (src && src.indexOf(jsPath) > -1) {
        return isDebug = gadgets.util.getUrlParameters(src).debug == '1';
      }
    }
    isDebug = false;
  }

  /**
   * Initializes feature parameters.
   */
  function init(config) {
    features = config['core.util'] || {};
  }

  if (gadgets.config) {
    gadgets.config.register('core.util', null, init);
    gadgets.config.register('core.io', undef, checkIsDebug, checkIsDebug);
  }

  /**
   * Gets the feature parameters.
   *
   * @param {string} feature The feature to get parameters for.
   * @return {Object} The parameters for the given feature, or null.
   */
  gadgets.util.getFeatureParameters = function(feature) {
    return typeof features[feature] === 'undefined' ? null : features[feature];
  };

  /**
   * Returns whether the current feature is supported.
   *
   * @param {string} feature The feature to test for.
   * @return {boolean} True if the feature is supported.
   */
  gadgets.util.hasFeature = function(feature) {
    return typeof features[feature] !== 'undefined';
  };

  /**
   * Returns the list of services supported by the server
   * serving this gadget.
   *
   * @return {Object} List of Services that enumerate their methods.
   */
  gadgets.util.getServices = function() {
    return services;
  };

  /**
   * @return {boolean} If gadget is being rendered in debug mode.
   */
  gadgets.util.isDebug = function() {
    return isDebug;
  };
})();
