cordova.define("cordova-plugin-googlemaps.Common", function(require, exports, module) {

var BaseArrayClass = require('./BaseArrayClass');
var utils = require('cordova/utils');

var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve();
var nextTick = resolvedPromise ? function (fn) {
  resolvedPromise.then(fn);
} : function (fn) {
  setTimeout(fn);
};

//---------------------------
// Convert HTML color to RGB
//---------------------------
function isHTMLColorString(inputValue) {
  if (!inputValue || typeof inputValue !== 'string') {
    return false;
  }
  if (inputValue.match(/^#[0-9A-F]{3}$/i) ||
    inputValue.match(/^#[0-9A-F]{4}$/i) ||
    inputValue.match(/^#[0-9A-F]{6}$/i) ||
    inputValue.match(/^#[0-9A-F]{8}$/i) ||
    inputValue.match(/^rgba?\([\d,.\s]+\)$/) ||
    inputValue.match(/^hsla?\([\d%,.\s]+\)$/)) {
    return true;
  }

  inputValue = inputValue.toLowerCase();
  return inputValue in HTML_COLORS;
}

function HTMLColor2RGBA(colorValue, defaultOpacity) {
  defaultOpacity = !defaultOpacity ? 1.0 : defaultOpacity;
  if (colorValue instanceof Array) {
    return colorValue;
  }
  if (colorValue === 'transparent' || !colorValue) {
    return [0, 0, 0, 0];
  }
  var alpha = Math.floor(255 * defaultOpacity),
    matches;
  var colorStr = colorValue.toLowerCase();
  if (colorStr in HTML_COLORS) {
    colorStr = HTML_COLORS[colorStr];
  }
  if (colorStr.match(/^#([0-9A-F]){3}$/i)) {
    matches = colorStr.match(/([0-9A-F])/ig);

    return [
      parseInt(matches[0], 16),
      parseInt(matches[1], 16),
      parseInt(matches[2], 16),
      alpha
    ];
  }

  if (colorStr.match(/^#[0-9A-F]{4}$/i)) {
    alpha = colorStr.substr(4, 1);
    alpha = parseInt(alpha + alpha, 16);

    matches = colorStr.match(/([0-9A-F])/ig);
    return [
      parseInt(matches[0], 16),
      parseInt(matches[1], 16),
      parseInt(matches[2], 16),
      alpha
    ];
  }

  if (colorStr.match(/^#[0-9A-F]{6}$/i)) {
    matches = colorStr.match(/([0-9A-F]{2})/ig);
    return [
      parseInt(matches[0], 16),
      parseInt(matches[1], 16),
      parseInt(matches[2], 16),
      alpha
    ];
  }
  if (colorStr.match(/^#[0-9A-F]{8}$/i)) {
    matches = colorStr.match(/([0-9A-F]{2})/ig);

    return [
      parseInt(matches[0], 16),
      parseInt(matches[1], 16),
      parseInt(matches[2], 16),
      parseInt(matches[3], 16)
    ];
  }
  // convert rgb(), rgba()
  if (colorStr.match(/^rgba?\([\d,.\s]+\)$/)) {
    matches = colorStr.match(/([\d.]+)/g);
    alpha = matches.length == 4 ? Math.floor(parseFloat(matches[3]) * 255) : alpha;
    return [
      parseInt(matches[0], 10),
      parseInt(matches[1], 10),
      parseInt(matches[2], 10),
      alpha
    ];
  }

  // convert hsl(), hsla()
  if (colorStr.match(/^hsla?\([\d%,.\s]+\)$/)) {
    matches = colorStr.match(/([\d%.]+)/g);
    alpha = matches.length == 4 ? Math.floor(parseFloat(matches[3]) * 255) : alpha;
    var rgb = HLStoRGB(matches[0], matches[1], matches[2]);
    rgb.push(alpha);
    return rgb;
  }

  console.warn('Warning: "' + colorValue + '" is not available. The overlay is drew by black.');
  return [0, 0, 0, alpha];
}

/**
 * http://d.hatena.ne.jp/ja9/20100907/1283840213
 */
function HLStoRGB(h, l, s) {
  var r, g, b; // 0..255

  while (h < 0) {
    h += 360;
  }
  h = h % 360;

  // In case of saturation = 0
  if (s === 0) {
    // RGB are the same as V
    l = Math.round(l * 255);
    return [l, l, l];
  }

  var m2 = (l < 0.5) ? l * (1 + s) : l + s - l * s,
    m1 = l * 2 - m2,
    tmp;

  tmp = h + 120;
  if (tmp > 360) {
    tmp = tmp - 360;
  }

  if (tmp < 60) {
    r = (m1 + (m2 - m1) * tmp / 60);
  } else if (tmp < 180) {
    r = m2;
  } else if (tmp < 240) {
    r = m1 + (m2 - m1) * (240 - tmp) / 60;
  } else {
    r = m1;
  }

  tmp = h;
  if (tmp < 60) {
    g = m1 + (m2 - m1) * tmp / 60;
  } else if (tmp < 180) {
    g = m2;
  } else if (tmp < 240) {
    g = m1 + (m2 - m1) * (240 - tmp) / 60;
  } else {
    g = m1;
  }

  tmp = h - 120;
  if (tmp < 0) {
    tmp = tmp + 360;
  }
  if (tmp < 60) {
    b = m1 + (m2 - m1) * tmp / 60;
  } else if (tmp < 180) {
    b = m2;
  } else if (tmp < 240) {
    b = m1 + (m2 - m1) * (240 - tmp) / 60;
  } else {
    b = m1;
  }
  return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
}

function parseBoolean(boolValue) {
  return typeof (boolValue) === 'string' && boolValue.toLowerCase() === 'true' ||
    boolValue === true ||
    boolValue === 1;
}

function isDom(element) {
  return element &&
    element.nodeType === Node.ELEMENT_NODE &&
    element instanceof SVGElement === false &&
    typeof element.getBoundingClientRect === 'function';
}

function getDivRect(div) {
  if (!div) {
    return;
  }
  var rect;
  if (div === document.body) {
    rect = div.getBoundingClientRect();
    rect.left = Math.max(rect.left, window.pageOffsetX);
    rect.top = Math.max(rect.top, window.pageOffsetY);
    rect.width = Math.max(rect.width, window.innerWidth);
    rect.height = Math.max(rect.height, window.innerHeight);
    rect.right = rect.left + rect.width;
    rect.bottom = rect.top + rect.height;
  } else {
    rect = div.getBoundingClientRect();
    if ('right' in rect === false) {
      rect.right = rect.left + rect.width;
    }
    if ('bottom' in rect === false) {
      rect.bottom = rect.top + rect.height;
    }
  }
  return {
    left: rect.left,
    top: rect.top,
    width: rect.width,
    height: rect.height,
    right: rect.right,
    bottom: rect.bottom
  };
}

var ignoreTags = [
  'pre', 'textarea', 'p', 'input', 'caption', 'canvas', 'svg'
];

function shouldWatchByNative(node) {
  if (!node || node.nodeType !== Node.ELEMENT_NODE || !node.parentNode || node instanceof SVGElement) {
    if (node === document.body) {
      return true;
    }
    return false;
  }

  var tagName = node.tagName.toLowerCase();
  if (ignoreTags.indexOf(tagName) > -1) {
    return false;
  }

  var classNames = (node.className || '').split(' ');
  if (classNames.indexOf('_gmaps_cdv_') > -1) {
    return true;
  }

  var visibilityCSS = getStyle(node, 'visibility');
  var displayCSS = getStyle(node, 'display');

  // Do not check this at here.
  //var pointerEventsCSS = getStyle(node, 'pointer-events');

  //-----------------------------------------
  // no longer check the opacity property,
  // because the app might start changing the opacity later.
  //-----------------------------------------
  //var opacityCSS = getStyle(node, 'opacity');
  //opacityCSS = /^[\d.]+$/.test(opacityCSS + '') ? opacityCSS : 1;

  //-----------------------------------------
  // no longer check the clickable size,
  // because HTML still can display larger element inside one small element.
  //-----------------------------------------
  // var clickableSize = (
  //   node.offsetHeight > 0 && node.offsetWidth > 0 ||
  //   node.clientHeight > 0 && node.clientWidth > 0);
  return displayCSS !== 'none' &&
    visibilityCSS !== 'hidden';
}

// Get z-index order
// http://stackoverflow.com/a/24136505
var internalCache = {};

function _clearInternalCache() {
  internalCache = undefined;
  internalCache = {};
}

function _removeCacheById(elemId) {
  delete internalCache[elemId];
}

function getZIndex(dom) {
  if (dom === document.body) {
    internalCache = undefined;
    internalCache = {};
  }
  if (!dom) {
    return 0;
  }

  var z = 0;
  if (window.getComputedStyle) {
    z = document.defaultView.getComputedStyle(dom, null).getPropertyValue('z-index');
  }
  if (dom.currentStyle) {
    z = dom.currentStyle['z-index'];
  }
  var elemId = dom.getAttribute('__pluginDomId');
  var parentNode = dom.parentNode;
  var parentZIndex = 0;
  if (parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {
    var parentElemId = parentNode.getAttribute('__pluginDomId');
    if (parentElemId in internalCache) {
      parentZIndex = internalCache[parentElemId];
    } else {
      parentZIndex = getZIndex(dom.parentNode);
      internalCache[parentElemId] = parentZIndex;
    }
  }

  var isInherit = false;
  if (z === 'unset' || z === 'initial') {
    z = 0;
  } else if (z === 'auto' || z === 'inherit') {
    z = 0;
    isInherit = true;
  } else {
    z = parseInt(z);
  }
  //dom.setAttribute('__ZIndex', z);
  internalCache[elemId] = z + parentZIndex;
  return {
    isInherit: isInherit,
    z: z
  };
}

// Get CSS value of an element
// http://stackoverflow.com/a/1388022
function getStyle(element, styleProperty) {
  if (window.getComputedStyle) {
    return document.defaultView.getComputedStyle(element, null).getPropertyValue(styleProperty);
  } else if (element.currentStyle) {
    return element.currentStyle[styleProperty];
  }
  return;
}

var HTML_COLORS = {
  'aliceblue': '#f0f8ff',
  'antiquewhite': '#faebd7',
  'aqua': '#00ffff',
  'aquamarine': '#7fffd4',
  'azure': '#f0ffff',
  'beige': '#f5f5dc',
  'bisque': '#ffe4c4',
  'black': '#000000',
  'blanchedalmond': '#ffebcd',
  'blue': '#0000ff',
  'blueviolet': '#8a2be2',
  'brown': '#a52a2a',
  'burlywood': '#deb887',
  'cadetblue': '#5f9ea0',
  'chartreuse': '#7fff00',
  'chocolate': '#d2691e',
  'coral': '#ff7f50',
  'cornflowerblue': '#6495ed',
  'cornsilk': '#fff8dc',
  'crimson': '#dc143c',
  'cyan': '#00ffff',
  'darkblue': '#00008b',
  'darkcyan': '#008b8b',
  'darkgoldenrod': '#b8860b',
  'darkgray': '#a9a9a9',
  'darkgrey': '#a9a9a9',
  'darkgreen': '#006400',
  'darkkhaki': '#bdb76b',
  'darkmagenta': '#8b008b',
  'darkolivegreen': '#556b2f',
  'darkorange': '#ff8c00',
  'darkorchid': '#9932cc',
  'darkred': '#8b0000',
  'darksalmon': '#e9967a',
  'darkseagreen': '#8fbc8f',
  'darkslateblue': '#483d8b',
  'darkslategray': '#2f4f4f',
  'darkslategrey': '#2f4f4f',
  'darkturquoise': '#00ced1',
  'darkviolet': '#9400d3',
  'deeppink': '#ff1493',
  'deepskyblue': '#00bfff',
  'dimgray': '#696969',
  'dimgrey': '#696969',
  'dodgerblue': '#1e90ff',
  'firebrick': '#b22222',
  'floralwhite': '#fffaf0',
  'forestgreen': '#228b22',
  'fuchsia': '#ff00ff',
  'gainsboro': '#dcdcdc',
  'ghostwhite': '#f8f8ff',
  'gold': '#ffd700',
  'goldenrod': '#daa520',
  'gray': '#808080',
  'grey': '#808080',
  'green': '#008000',
  'greenyellow': '#adff2f',
  'honeydew': '#f0fff0',
  'hotpink': '#ff69b4',
  'indianred ': '#cd5c5c',
  'indigo  ': '#4b0082',
  'ivory': '#fffff0',
  'khaki': '#f0e68c',
  'lavender': '#e6e6fa',
  'lavenderblush': '#fff0f5',
  'lawngreen': '#7cfc00',
  'lemonchiffon': '#fffacd',
  'lightblue': '#add8e6',
  'lightcoral': '#f08080',
  'lightcyan': '#e0ffff',
  'lightgoldenrodyellow': '#fafad2',
  'lightgray': '#d3d3d3',
  'lightgrey': '#d3d3d3',
  'lightgreen': '#90ee90',
  'lightpink': '#ffb6c1',
  'lightsalmon': '#ffa07a',
  'lightseagreen': '#20b2aa',
  'lightskyblue': '#87cefa',
  'lightslategray': '#778899',
  'lightslategrey': '#778899',
  'lightsteelblue': '#b0c4de',
  'lightyellow': '#ffffe0',
  'lime': '#00ff00',
  'limegreen': '#32cd32',
  'linen': '#faf0e6',
  'magenta': '#ff00ff',
  'maroon': '#800000',
  'mediumaquamarine': '#66cdaa',
  'mediumblue': '#0000cd',
  'mediumorchid': '#ba55d3',
  'mediumpurple': '#9370db',
  'mediumseagreen': '#3cb371',
  'mediumslateblue': '#7b68ee',
  'mediumspringgreen': '#00fa9a',
  'mediumturquoise': '#48d1cc',
  'mediumvioletred': '#c71585',
  'midnightblue': '#191970',
  'mintcream': '#f5fffa',
  'mistyrose': '#ffe4e1',
  'moccasin': '#ffe4b5',
  'navajowhite': '#ffdead',
  'navy': '#000080',
  'oldlace': '#fdf5e6',
  'olive': '#808000',
  'olivedrab': '#6b8e23',
  'orange': '#ffa500',
  'orangered': '#ff4500',
  'orchid': '#da70d6',
  'palegoldenrod': '#eee8aa',
  'palegreen': '#98fb98',
  'paleturquoise': '#afeeee',
  'palevioletred': '#db7093',
  'papayawhip': '#ffefd5',
  'peachpuff': '#ffdab9',
  'peru': '#cd853f',
  'pink': '#ffc0cb',
  'plum': '#dda0dd',
  'powderblue': '#b0e0e6',
  'purple': '#800080',
  'rebeccapurple': '#663399',
  'red': '#ff0000',
  'rosybrown': '#bc8f8f',
  'royalblue': '#4169e1',
  'saddlebrown': '#8b4513',
  'salmon': '#fa8072',
  'sandybrown': '#f4a460',
  'seagreen': '#2e8b57',
  'seashell': '#fff5ee',
  'sienna': '#a0522d',
  'silver': '#c0c0c0',
  'skyblue': '#87ceeb',
  'slateblue': '#6a5acd',
  'slategray': '#708090',
  'slategrey': '#708090',
  'snow': '#fffafa',
  'springgreen': '#00ff7f',
  'steelblue': '#4682b4',
  'tan': '#d2b48c',
  'teal': '#008080',
  'thistle': '#d8bfd8',
  'tomato': '#ff6347',
  'turquoise': '#40e0d0',
  'violet': '#ee82ee',
  'wheat': '#f5deb3',
  'white': '#ffffff',
  'whitesmoke': '#f5f5f5',
  'yellow': '#ffff00',
  'yellowgreen': '#9acd32'
};

function defaultTrueOption(value) {
  return value === undefined ? true : value === true;
}

function createMvcArray(array) {
  if (!array) {
    return new BaseArrayClass();
  }
  if (array.type === 'BaseArrayClass') {
    return array;
  }

  var mvcArray;
  if (array.type === 'LatLngBounds') {
    array = [
      array.southwest,
      {
        lat: array.northeast.lat,
        lng: array.southwest.lng
      },
      array.northeast,
      {
        lat: array.southwest.lat,
        lng: array.northeast.lng
      },
      array.southwest
    ];
    array = array.map(getLatLng);
  }

  if (array && typeof array.getArray === 'function') {
    mvcArray = new BaseArrayClass(array.getArray());
    array.on('set_at', function (index) {
      var value = array.getAt(index);
      value = 'position' in value ? value.getPosition() : value;
      mvcArray.setAt(index, value);
    });
    array.on('insert_at', function (index) {
      var value = array.getAt(index);
      value = 'position' in value ? value.getPosition() : value;
      mvcArray.insertAt(index, value);
    });
    array.on('remove_at', function (index) {
      mvcArray.removeAt(index);
    });

  } else {
    mvcArray = new BaseArrayClass(array ? array.slice(0) : undefined);
  }
  return mvcArray;
}

function getLatLng(target) {
  return 'getPosition' in target ? target.getPosition() : {
    'lat': parseFloat(target.lat, 10),
    'lng': parseFloat(target.lng, 10)
  };
}

function convertToPositionArray(array) {
  array = array || [];

  if (!utils.isArray(array)) {
    if (array.type === 'LatLngBounds') {
      array = [
        array.southwest,
        {
          lat: array.northeast.lat,
          lng: array.southwest.lng
        },
        array.northeast,
        {
          lat: array.southwest.lat,
          lng: array.northeast.lng
        },
        array.southwest
      ];
    } else if (array && typeof array.getArray === 'function') {
      array = array.getArray();
    } else {
      array = [array];
    }
  }

  array = array.map(getLatLng);

  return array;
}

function markerOptionsFilter(markerOptions) {
  markerOptions = markerOptions || {};

  markerOptions.animation = markerOptions.animation || undefined;
  markerOptions.position = markerOptions.position || {};
  markerOptions.position.lat = markerOptions.position.lat || 0.0;
  markerOptions.position.lng = markerOptions.position.lng || 0.0;
  markerOptions.draggable = markerOptions.draggable === true;
  markerOptions.icon = markerOptions.icon || undefined;
  markerOptions.zIndex = markerOptions.zIndex || 0;
  markerOptions.snippet = typeof (markerOptions.snippet) === 'string' ? markerOptions.snippet : undefined;
  markerOptions.title = typeof (markerOptions.title) === 'string' ? markerOptions.title : undefined;
  markerOptions.visible = defaultTrueOption(markerOptions.visible);
  markerOptions.flat = markerOptions.flat === true;
  markerOptions.rotation = markerOptions.rotation || 0;
  markerOptions.opacity = markerOptions.opacity === 0 ? 0 : (parseFloat('' + markerOptions.opacity, 10) || 1);
  markerOptions.disableAutoPan = markerOptions.disableAutoPan === true;
  markerOptions.noCache = markerOptions.noCache === true; //experimental
  if (typeof markerOptions.icon === 'object') {
    if ('anchor' in markerOptions.icon &&
      !Array.isArray(markerOptions.icon.anchor) &&
      'x' in markerOptions.icon.anchor &&
      'y' in markerOptions.icon.anchor) {
      markerOptions.icon.anchor = [markerOptions.icon.anchor.x, markerOptions.icon.anchor.y];
    }
  }

  if ('infoWindowAnchor' in markerOptions &&
    !Array.isArray(markerOptions.infoWindowAnchor) &&
    'x' in markerOptions.infoWindowAnchor &&
    'y' in markerOptions.infoWindowAnchor) {
    markerOptions.infoWindowAnchor = [markerOptions.infoWindowAnchor.x, markerOptions.infoWindowAnchor.anchor.y];
  }

  if ('style' in markerOptions && !('styles' in markerOptions)) {
    markerOptions.styles = markerOptions.style;
    delete markerOptions.style;
  }
  if ('styles' in markerOptions) {
    markerOptions.styles = typeof markerOptions.styles === 'object' ? markerOptions.styles : {};

    if ('color' in markerOptions.styles) {
      markerOptions.styles.color = HTMLColor2RGBA(markerOptions.styles.color || '#000000');
    }
  }
  if (markerOptions.icon && isHTMLColorString(markerOptions.icon)) {
    markerOptions.icon = HTMLColor2RGBA(markerOptions.icon);
  }
  if (markerOptions.icon && markerOptions.icon.label &&
    isHTMLColorString(markerOptions.icon.label.color)) {
    markerOptions.icon.label.color = HTMLColor2RGBA(markerOptions.icon.label.color);
  }
  return markerOptions;
}

function quickfilter(domPositions, mapElemIDs) {
  //console.log('before', JSON.parse(JSON.stringify(domPositions)));
  var keys = Object.keys(domPositions);

  var tree = {};
  mapElemIDs.forEach(function (mapElemId) {
    var size = domPositions[mapElemId].size;
    var mapRect = {
      left: size.left,
      top: size.top,
      right: size.left + size.width,
      bottom: size.top + size.height
    };

    tree[mapElemId] = domPositions[mapElemId];

    keys.forEach(function (elemId) {
      if (domPositions[elemId].ignore) {
        return;
      }
      var domSize = {
        left: domPositions[elemId].size.left,
        top: domPositions[elemId].size.top,
        right: domPositions[elemId].size.left + domPositions[elemId].size.width,
        bottom: domPositions[elemId].size.bottom + domPositions[elemId].size.height
      };
      if (
        (domSize.left >= mapRect.left && domSize.left <= mapRect.right) ||
        (domSize.right >= mapRect.left && domSize.right <= mapRect.right) ||
        (domSize.top >= mapRect.top && domSize.top <= mapRect.bottom) ||
        (domSize.bottom >= mapRect.top && domSize.bottom <= mapRect.bottom)
      ) {
        tree[elemId] = domPositions[elemId];
      }
    });
  });

  //console.log('after', JSON.parse(JSON.stringify(tree)));
  return tree;
}

function getPluginDomId(element) {
  // Generates a __pluginDomId
  if (!element || !shouldWatchByNative(element)) {
    return;
  }
  var elemId = element.getAttribute('__pluginDomId');
  if (!elemId) {
    if (element === document.body) {
      elemId = 'root';
    } else {
      elemId = 'pgm' + Math.floor(Math.random() * Date.now());
    }
    element.setAttribute('__pluginDomId', elemId);
  }
  return elemId;
}

// Add hashCode() method
// https://stackoverflow.com/a/7616484/697856
function hashCode(text) {
  var hash = 0,
    i, chr;
  if (text.length === 0) return hash;
  for (i = 0; i < text.length; i++) {
    chr = text.charCodeAt(i);
    hash = ((hash << 5) - hash) + chr;
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
}

function createEvent(eventName, properties) {
  var evt;
  if (typeof CustomEvent === 'function') {
    evt = new CustomEvent(eventName, {
      bubbles: true,
      detail: properties || null
    });
  } else {
    evt = document.createEvent('Event');
    evt.initEvent(eventName, true, false);
    if (properties) {
      Object.keys(properties).forEach(function (key) {
        if (!(key in properties)) {
          evt[key] = properties[key];
        }
      });
    }
  }
  return evt;
}

function attachTransparentClass(div) {

  if (div.classList && !div.classList.contains('_gmaps_cdv_')) {
    div.classList.add('_gmaps_cdv_');
  } else if (div.className && div.className.indexOf('_gmaps_cdv_') === -1) {
    div.className = div.className + ' _gmaps_cdv_';
  }

  if (div.shadowRoot) {
    var styleAttr = div.getAttribute('style') || '';
    if (styleAttr && styleAttr.indexOf('--ion-background-color') === -1) {
      styleAttr = styleAttr + ' --ion-background-color: transparent;';
    }
    div.setAttribute('style', styleAttr);
  }
}
// function dettachTransparentClass(root) {
//
//   if (div.classList && div.classList.contains('_gmaps_cdv_')) {
//     div.classList.remove('_gmaps_cdv_');
//   } else if (div.className && div.className.indexOf('_gmaps_cdv_') === -1) {
//     div.className = div.className.replace('_gmaps_cdv_', '');
//   }
//
//   var visibilityCSS = getStyle(node, 'visibility');
//   if (getStyle(div, 'background-color') === 'transparent !important') {
//     div.style.backgroundColor = undefined;
//   }
//   if (getStyle(div, 'background') === 'transparent !important') {
//     div.style.backgroundColor = undefined;
//   }
//   if (getStyle(div, 'background-image') === 'transparent !important') {
//     div.style.backgroundImage = undefined;
//   }
//   if (div.shadowRoot) {
//     var hiddenChildren = div.querySelectorAll('*');
//     hiddenChildren = Array.prototype.splice(hiddenChildren, 0);
//     hiddenChildren.forEach(dettachTransparentClass);
//   }
// }

module.exports = {
  _clearInternalCache: _clearInternalCache,
  _removeCacheById: _removeCacheById,
  getZIndex: getZIndex,
  getDivRect: getDivRect,
  isDom: isDom,
  parseBoolean: parseBoolean,
  HLStoRGB: HLStoRGB,
  HTMLColor2RGBA: HTMLColor2RGBA,
  isHTMLColorString: isHTMLColorString,
  defaultTrueOption: defaultTrueOption,
  createMvcArray: createMvcArray,
  getStyle: getStyle,
  convertToPositionArray: convertToPositionArray,
  getLatLng: getLatLng,
  shouldWatchByNative: shouldWatchByNative,
  markerOptionsFilter: markerOptionsFilter,
  quickfilter: quickfilter,
  nextTick: nextTick,
  getPluginDomId: getPluginDomId,
  hashCode: hashCode,
  createEvent: createEvent,
  //dettachTransparentClass: dettachTransparentClass,
  attachTransparentClass: attachTransparentClass
};

if (cordova && cordova.platformId === 'browser') {
  require('cordova/exec/proxy').add('common', module.exports);
}

});
