﻿/*
* jQuery ifixpng plugin
* (previously known as pngfix)
* Version 2.0  (04/11/2007)
* @requires jQuery v1.1.3 or above
*
* Examples at: http://jquery.khurshid.com
* Copyright (c) 2007 Kush M.
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/

/**
*
* @example
*
* optional if location of pixel.gif if different to default which is images/pixel.gif
* $.ifixpng('media/pixel.gif');
*
* $('img[@src$=.png], #panel').ifixpng();
*
* @apply hack to all png images and #panel which icluded png img in its css
*
* @name ifixpng
* @type jQuery
* @cat Plugins/Image
* @return jQuery
* @author jQuery Community
*/

(function($) {

	/**
	* helper variables and function
	*/
	$.ifixpng = function(customPixel) {
		$.ifixpng.pixel = customPixel;
	};

	$.ifixpng.getPixel = function() {
		return $.ifixpng.pixel || '/whitewater/assets/images/pixel.gif';
	};

	var hack = {
		ltie7: $.browser.msie && $.browser.version < 7,
		filter: function(src) {
			return "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='" + src + "')";
		}
	};

	/**
	* Applies ie png hack to selected dom elements
	*
	* $('img[@src$=.png]').ifixpng();
	* @desc apply hack to all images with png extensions
	*
	* $('#panel, img[@src$=.png]').ifixpng();
	* @desc apply hack to element #panel and all images with png extensions
	*
	* @name ifixpng
	*/

	$.fn.ifixpng = hack.ltie7 ? function() {
		return this.each(function() {
			var $$ = $(this);
			var base = $('base').attr('href'); // need to use this in case you are using rewriting urls
			if ($$.is('img') || $$.is('input')) { // hack image tags present in dom
				if ($$.attr('src')) {
					if ($$.attr('src').match(/.*\.png([?].*)?$/i)) { // make sure it is png image
						// use source tag value if set 
						var source = (base && $$.attr('src').substring(0, 1) != '/') ? base + $$.attr('src') : $$.attr('src');
						// apply filter
						$$.css({ filter: hack.filter(source), width: $$.width(), height: $$.height() })
						  .attr({ src: $.ifixpng.getPixel() })
						  .positionFix();
					}
				}
			} else { // hack png css properties present inside css
				var image = $$.css('backgroundImage');
				if (image.match(/^url\(["']?(.*\.png([?].*)?)["']?\)$/i)) {
					image = RegExp.$1;
					$$.css({ backgroundImage: 'none', filter: hack.filter(image) })
					  .children().children().positionFix();
				}
			}
		});
	} : function() { return this; };

	/**
	* Removes any png hack that may have been applied previously
	*
	* $('img[@src$=.png]').iunfixpng();
	* @desc revert hack on all images with png extensions
	*
	* $('#panel, img[@src$=.png]').iunfixpng();
	* @desc revert hack on element #panel and all images with png extensions
	*
	* @name iunfixpng
	*/

	$.fn.iunfixpng = hack.ltie7 ? function() {
		return this.each(function() {
			var $$ = $(this);
			var src = $$.css('filter');
			if (src.match(/src=["']?(.*\.png([?].*)?)["']?/i)) { // get img source from filter
				src = RegExp.$1;
				if ($$.is('img') || $$.is('input')) {
					$$.attr({ src: src }).css({ filter: '' });
				} else {
					$$.css({ filter: '', background: 'url(' + src + ')' });
				}
			}
		});
	} : function() { return this; };

	/**
	* positions selected item relatively
	*/

	$.fn.positionFix = function() {
		return this.each(function() {
			var $$ = $(this);
			var position = $$.css('position');
			if (position != 'absolute' && position != 'relative') {
				$$.css({ position: 'relative' });
			}
		});
	};

})(jQuery);