// create our transition as a plugin
$.fn.crossfade = function () {
  return this.each(function () { 
    // cache the copy of jQuery(this) - the start image
    var $$ = $(this);
    
    // get the target from the backgroundImage + regexp
    var target = $$.css('backgroundImage').replace(/^url|[\(\)"']/g, '');
    //alert(target);
    
    // nice long chain: wrap img element in span
    $$.wrap('<span style="position: relative;"></span>')
	// change selector to parent - i.e. newly created span
      .parent()
	// prepend a new image inside the span
      .prepend('<img>')
	// change the selector to the newly created image
      .find(':first-child')
	// set the image to the target
      .attr('src', target)
	// set the style
      .css('border', 'none');
    
	// the CSS styling of the start image needs to be handled
    // differently for different browsers
    if ($.browser.mozilla) {
    	//alert("msie");
        $$.css({
            'position' : 'absolute', 
            'left' : 0,
            'background' : '',
            'top' : this.offsetTop,
            'border' : 'none'
            
            
        });
    } else if ($.browser.msie) {                   
        $$.css({
            'position' : 'absolute', 
            'left' : 0,
            'background' : ''
        });
    } else if ($.browser.opera && $.browser.version < 9.5) {
        // Browser sniffing is bad - however opera < 9.5 has a render bug 
        // so this is required to get around it we can't apply the 'top' : 0 
        // separately because Mozilla strips the style set originally somehow...                    
        $$.css({
            'position' : 'absolute', 
            'left' : 0,
            'background' : '',
            'top' : '0'
        });
    }  else { // Safari
        $$.css({
            'position' : 'absolute', 
            'left' : 0,
            'background' : ''
        });
    }

    
    // similar effect as single image technique, except using .animate 
    // which will handle the fading up from the right opacity for us
    $$.hover(function () {
      $$.stop().animate({
          opacity: 0
      }, 500);
    }, function () {
      $$.stop().animate({
          'opacity': 1
      }, 500);
    });
  });
};
// Not only when the DOM is ready, but when the images have finished loading,
// important, but subtle difference to $(document).ready();
$(window).bind('load', function () {
  // run the cross fade plugin against selector
  $('img.fade').crossfade();
});
