1 (function () {
  2   
  3   /**
  4    * Cross-browser wrapper for setting element's style
  5    * @method setStyle
  6    * @memberOf fabric.util
  7    * @param {HTMLElement} element
  8    * @param {Object} styles
  9    * @return {HTMLElement} Element that was passed as a first argument
 10    */
 11   function setStyle(element, styles) {
 12     var elementStyle = element.style, match;
 13     if (typeof styles === 'string') {
 14       element.style.cssText += ';' + styles;
 15       return styles.indexOf('opacity') > -1 
 16         ? setOpacity(element, styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) 
 17         : element;
 18     }
 19     for (var property in styles) {
 20       if (property === 'opacity') {
 21         setOpacity(element, styles[property]);
 22       }
 23       else {
 24         var normalizedProperty = (property === 'float' || property === 'cssFloat') 
 25           ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat') 
 26           : property;
 27         elementStyle[normalizedProperty] = styles[property];
 28       }
 29     }
 30     return element;
 31   }
 32 
 33   var parseEl = document.createElement('div'),
 34       supportsOpacity = typeof parseEl.style.opacity === 'string', 
 35       supportsFilters = typeof parseEl.style.filter === 'string',
 36       view = document.defaultView,
 37       supportsGCS = view && typeof view.getComputedStyle !== 'undefined',
 38       reOpacity = /alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,
 39       
 40       /** @ignore */
 41       setOpacity = function (element) { return element; };
 42 
 43   if (supportsOpacity) {
 44     /** @ignore */
 45     setOpacity = function(element, value) {
 46       element.style.opacity = value;
 47       return element;
 48     };
 49   }
 50   else if (supportsFilters) {
 51     /** @ignore */
 52     setOpacity = function(element, value) {
 53       var es = element.style;
 54       if (element.currentStyle && !element.currentStyle.hasLayout) {
 55         es.zoom = 1;
 56       }
 57       if (reOpacity.test(es.filter)) {
 58         value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')');
 59         es.filter = es.filter.replace(reOpacity, value);
 60       }
 61       else {
 62         es.filter += ' alpha(opacity=' + (value * 100) + ')';
 63       }
 64       return element;
 65     };
 66   }
 67 
 68   fabric.util.setStyle = setStyle;
 69   
 70 })();