/*


Makes 32 bit PNG's transparency work in Internet Explorer 6

  * Dependent on "Prototype JavaScript framework (1.6.0)":http://www.prototypejs.org/2007/8/15/prototype-1-6-0-release-candidate
  * Works on *img elements* and on *background images of elements*
  * PNG's can be used as backgrounds. However, *image tiling will not work*
  * *Safe to use* - You don't have to make an exception or write separate code for IE6
  * Background PNG's used in :hover's might need another application of the method


Example Usages:
 
 $('yourPNG').pngHack();
 $$('div#fixMe', 'img#andMe', 'img.andUsTo').invoke('pngHack');
 
*/
Element.addMethods({
  pngHack: function(el){
    var el = $(el);
    if (!Prototype.Browser.IE) return el;
    var gif = 'http://cdn.rockyou.com/apps/likeness/PNGhack/s.gif';
    if ((el.match('img')) && (el.src.include('png'))){
      var alphaImgSrc  = el.src;
      el.writeAttribute({_osrc: alphaImgSrc});
      var sizingMethod = 'scale';
      el.src = gif;
    } else if (el.getStyle('backgroundImage').include('png')){
      var bgc = el.getStyle('backgroundColor') || '';
      var alphaImgSrc = el.getStyle('backgroundImage').gsub(/url\(|\)|'|"/, '');
      var sizingMethod = 'crop';
      el.setStyle({ background: [bgc, ' url(', gif, ') no-repeat'].join('') });
    } else {
      return el;
    }
    el.runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="#{al}",sizingMethod="#{sz}")'.interpolate({ al: alphaImgSrc, sz: sizingMethod });
    return el;
  },
  
  pngHack_setOpacity: function(el,opacity){
    var el = $(el);
    if (!Prototype.Browser.IE || parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5))!=6)
    {
        Element.setOpacity(el,opacity);   
        return el;
    }
    el.runtimeStyle.filter = "";
    //if (opacity <= 1) opacity *= 100;
    var gif = 'http://cdn.rockyou.com/apps/likeness/PNGhack/s.gif';
    var osrc = el.readAttribute('_osrc');
    if(osrc) el.src = osrc;
         
    if ((el.match('img')) && (el.src.include('png'))){
      var alphaImgSrc  = el.src;
      el.writeAttribute({_osrc: alphaImgSrc}); 
      var sizingMethod = 'image';
      //el.src = gif;
    } else if (el.getStyle('backgroundImage').include('png')){
      var bgc = el.getStyle('backgroundColor') || '';
      var alphaImgSrc = el.getStyle('backgroundImage').gsub(/url\(|\)|'|"/, '');
      var sizingMethod = 'crop';
      el.setStyle({ background: [bgc, ' url(', gif, ') no-repeat'].join('') });
    } else {
      Element.setOpacity(el,opacity);  
      return el;
    }
    //el.runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.BasicImage(opacity="'+opacity+'")';
    el.runtimeStyle.opacity = (opacity == 1 || opacity === '') ? '' : (opacity < 0.00001) ? 0 : opacity;
    el.runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="#{al}",sizingMethod="#{sz}")'.interpolate({ al: alphaImgSrc, sz: sizingMethod});
    if ((el.match('img')) && (el.src.include('png'))) el.src = gif;
    return el;
  }
});
