/**
 * --------------------------------------------------------------------
 * jQuery-Plugin "pngFix"
 * Version: 1.2, 09.03.2009
 * by Andreas Eberhard, andreas.eberhard@gmail.com
 *                      http://jquery.andreaseberhard.de/
 *
 * Copyright (c) 2007 Andreas Eberhard
 * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
 *
 * Changelog:
 *    09.03.2009 Version 1.2
 *    - Update for jQuery 1.3.x, removed @ from selectors
 *    11.09.2007 Version 1.1
 *    - removed noConflict
 *    - added png-support for input type=image
 *    - 01.08.2007 CSS background-image support extension added by Scott Jehl, scott@filamentgroup.com, http://www.filamentgroup.com
 *    31.05.2007 initial Version 1.0
 * --------------------------------------------------------------------
 * @example $(function(){$(document).pngFix();});
 * @desc Fixes all PNG's in the document on document.ready
 *
 * jQuery(function(){jQuery(document).pngFix();});
 * @desc Fixes all PNG's in the document on document.ready when using noConflict
 *
 * @example $(function(){$('div.examples').pngFix();});
 * @desc Fixes all PNG's within div with class examples
 *
 * @example $(function(){$('div.examples').pngFix( { blankImg:'ext.gif' } );});
 * @desc Fixes all PNG's within div with class examples, provides blank gif for input with png
 * --------------------------------------------------------------------
 *
 * 09/07/28 ichi. notFindオプションで子孫を探さないように。
 * 09/07/07 ichi. もうだいぶ原型とどめてなし。
 *
 */

(function($) {

$.fn.pngFix = function(settings) {
	if(!$.browser.msie || $.browser.version - 0 >= 7) return this;
	
	// Settings
	settings = $.extend({
		  blankImg: ''
		, bgFix: 	true
		, notFind: 	false
	}, settings);
	
	var $this = this;
	
	var target_filter = function(filter){
		return settings.notFind ? $this.filter(filter) : $this.find(filter).add($this.filter(filter));
	};
	
	
	//img
	target_filter('img[src$=.png]').each(function(){
		
		var $png = $(this);
		var src = this.src;
		
		//blankImg
		if(settings.blankImg){
			this.src = settings.blankImg;
			this.runtimeStyle.filter = ["progid:DXImageTransform.Microsoft.AlphaImageLoader(src='", src, "',sizingMethod='scale')"].join('');
			
		//span
		}else{
			var span_attr = {
				  id: 		this.id
				, 'class': 	this.className
				, title: 	this.title
				, alt: 		$png.attr('alt')
				, align: 	$png.attr('align')
			};
			
			
			var span_css = {
				  display: 		'inline-block'
				//, 'white-space': 'pre-line'
				, background: 	'transparent'
				, position: 	'relative'
				, margin: 		this.style.margin
				, padding: 		this.style.padding
				, border: 		this.style.border
			};
			if($png.parents('a').length) span_css['cursor'] = 'pointer';
			
			var png_pos = $png.css("position");
			if(png_pos == "absolute" || png_pos == "relative"){
				span_css['position'] = png_pos;
				span_css['top'] = $png.css("top");
				span_css['left'] = $png.css("left");
				span_css['bottom'] = $png.css("bottom");
				span_css['right'] = $png.css("right");
				span_css['z-index'] = $png.css("z-index");
			}
			
			//width & height
			var png_width = this.width ;
			var png_height = this.height;
			if(!png_width || !png_height){
				var $png_clone = $png.clone();
				var png_clone = $png_clone.get(0);
				$png_clone.appendTo($('body')).show();
				png_width = png_clone.width;
				png_height = png_clone.height;
				$png_clone.remove();
			}
			span_css['width'] = png_width;
			span_css['height'] = png_height;
			
			
			//create span
			var $span = $('<span></span>');
			var span = $span.get(0);
			//span.cssText = this.style.cssText;
			$.each(span_attr, function(i, v){
				if(v) span[i] = v;
			});
			span.runtimeStyle.filter = ["progid:DXImageTransform.Microsoft.AlphaImageLoader(src='", src, "',sizingMethod='scale')"].join('');
			$span.css(span_css);
			
			
			$png.hide().after($span);
		}
	});
	
	
	//input
	if(settings.blankImg){
		target_filter('input[src$=.png]').each(function(){
			var src = this.src;
			this.runtimeStyle.filter = ["progid:DXImageTransform.Microsoft.AlphaImageLoader(src='", src, "',sizingMethod='scale')"].join('');
			this.src = settings.blankImg;
		});
	}
	
	
	//background
	if(settings.bgFix){
		this.find('*').andSelf().each(function(){
			var $all = $(this);
			var bgIMG = $all.css('background-image');
			if(bgIMG.indexOf(".png") != -1){
				var iebg = bgIMG.split('url("')[1].split('")')[0];
				$all.css('background-image', 'none');
				this.runtimeStyle.filter = ["progid:DXImageTransform.Microsoft.AlphaImageLoader(src='", iebg, "',sizingMethod='scale')"].join('');
			}
		});
	}
	
	
	return this;
};

})(jQuery);


$(document).ready(function(){
	$('.png').pngFix( );
});


