/**
 * jQuery ()Image Scaler plugin
 *
 * @author 	Jochen Renner jochen.renner@tmp.de
 * @version 0.1.0
 */
(function($){
	  
  $.fn.imgscaler = function(o) {
  	  
	var defaults = {
		scale: 2,
		emptyimg:"img/empty.gif"
	};  
     
	var o = $.extend(defaults, o);  

	function url2src(url) {
		var ret= url.substring(4,url.lastIndexOf(")"));
		if (ret.charAt(0)=='"'||ret.charAt(0)=='\'')ret = ret.substring(1,ret.length-1);
		return ret;
	} 

    return this.each(function() {  
		var obj = $(this);
		var ow = obj.width();
		var oh = obj.height();
		
		// remove javascript hover class
		obj.removeClass(this.id+"-nojs");
		var src=url2src(obj.css("backgroundImage"));

		// wrap in a div as the images get positioned absolute
		var wrapper = $('<div style="position:relative;display:block;float:left;z-index:100;"></div>');
		obj.wrap(wrapper);
		
		// to get the hover image, insert image, read background image and remove afterwards.
		// ff/chrome would not need insertion, but ie/opera do.
		var di=$('<a style="display:none;" class="'+this.id+'-hover"></a>');
		di.insertAfter(obj);
		var overimgsrc = url2src(di.css("backgroundImage"));
		di.remove();
			
		// create images+ insert
		var img1 = $('<img src="'+src+'" style="z-index:5;width:'+ow+'px;height:'+oh+'px;">');
		
		var img2 = $('<img src="'+overimgsrc+'" style="z-index:6;display:none;width:'+ow+'px;height:'+oh+'px;">');
		
		img1.insertAfter(obj);
		img2.insertAfter(obj);

		// remove background from obj, put on z-top 
		obj.css({
			backgroundImage: jQuery.browser.msie ? 'url('+o.emptyimg+')' : 'none',
			zIndex: 100,
			position: "relative"
		});
		// calc margin to maintain center
		var mt = parseInt( ( oh * ( 0.5 - o.scale )) * 0.5) ;
		var ml = Math.max(-20,parseInt( ( ow * ( 0.5 - o.scale )) * 0.25));
		
		// set event handlers
		obj.mouseenter(function(){
			obj.stop();img1.stop();img2.stop();
			obj.animate({width:parseInt(o.scale*ow), height:parseInt(o.scale*oh), marginTop:mt, marginLeft:ml});
			img1.animate({width:parseInt(o.scale*ow), height:parseInt(o.scale*oh), marginTop:mt, marginLeft:ml});
			img2.animate({width:parseInt(o.scale*ow), height:parseInt(o.scale*oh), marginTop:mt, marginLeft:ml,opacity:1});
		});
		obj.mouseleave(function(){
			obj.stop();img1.stop();img2.stop();
			obj.animate({width:ow, height:oh, marginTop:0, marginLeft:0});
			img1.animate({width:ow, height:oh, marginTop:0, marginLeft:0});
			img2.animate({width:ow, height:oh, marginTop:0, marginLeft:0,opacity:0});
		});
     });  
  };  
})(jQuery);
