/**
 *  jquery.popupt
 *  (c) 2008 Semooh (http://semooh.jp/)
 *
 *  Dual licensed under the MIT (MIT-LICENSE.txt)
 *  and GPL (GPL-LICENSE.txt) licenses.
 *
 **/
function getRelativeOffset(node)
{
	 var offset = node.offset();

	var parent = node.parent();
 	if(parent.length > 0)
 		parent = $(parent[0]);
 	else
 		parent = null;
 		
	while(parent!=null)
    {               	
      	if(parent.css('position') == 'relative' || parent.css('position') == 'absolute' )
      	{
      		
      		var offsetRelativeParent = parent.offset();
      		
      		offset.left -= offsetRelativeParent.left;
      		offset.top -= offsetRelativeParent.top;
      		break;
      	}
      
      	var parent = parent.parent();
 		if(parent.length > 0)
 			parent = $(parent[0]);
 		else
 			parent = null;

    }

	return offset;
}

(function($){
	$.fn.extend({
		imghover: function(opt){
			return this.each(function() {
        opt = $.extend({
            prefix: '',
            suffix: '_o',
            src: '',
            btnOnly: true,
            fade: false,
            fadeSpeed: 500
          }, opt || {});

        var node = $(this);
				if(!node.is('img')&&!node.is(':image')){
          var sel = 'img,:image';
          if (opt.btnOnly) sel = 'a '+sel;
          node.find(sel).imghover(opt);
          return;
        }

        var orgImg = node.attr('src');

        var hoverImg;
        if(opt.src){
          hoverImg = opt.src;
        }else{
          hoverImg = orgImg;
          if(opt.prefix){
            var pos = hoverImg.lastIndexOf('/');
            if(pos>0){
              hoverImg = hoverImg.substr(0,pos-1)+opt.prefix+hoverImg.substr(pos-1);
            }else{
              hoverImg = opt.prefix+hoverImg;
            }
          }
          if(opt.suffix){
            var pos = hoverImg.lastIndexOf('.');
            if(pos>0){
              hoverImg = hoverImg.substr(0,pos)+opt.suffix+hoverImg.substr(pos);
            }else{
              hoverImg = hoverImg+opt.suffix;
            }
          }
        }

        if(opt.fade){
          var offset = getRelativeOffset(node);
          var hover = node.clone(true);
          hover.attr('src', hoverImg);
          hover.css({
            position: 'absolute',
            left: offset.left,
            top: offset.top,
            zIndex: 1000
          }).hide().insertAfter(node);
          node.mouseover(
            function(){
              var offset=getRelativeOffset(node);
              hover.css({left: offset.left, top: offset.top});
              //hover.fadeIn(opt.fadeSpeed);
              //node.fadeOut(opt.fadeSpeed,function(){node.show()});
              hover.stop().fadeIn(opt.fadeSpeed);
              node.stop().fadeTo(opt.fadeSpeed,0);
            }
          );
          hover.mouseout(
            function(){
              node.stop().fadeTo(opt.fadeSpeed,1);
              hover.stop().fadeTo(opt.fadeSpeed,0);
            }
          );
          hover.mouseover(
            function(){
              node.stop().fadeTo(opt.fadeSpeed,0);
              hover.stop().fadeTo(opt.fadeSpeed,1);
            }
          );
        }else{
          node.hover(
            function(){node.attr('src', hoverImg)},
            function(){node.attr('src', orgImg)}
          );
        }
			});
		}
	});
})(jQuery);
