/**
 * jQuery Opacity Rollover plugin
 *
 * Copyright (c) 2009 Trent Foley (http://trentacular.com)
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */
;(function($) {
	var defaults = {
		mouseOutOpacity:   0.3,
		mouseOverOpacity:  1.0,
		fadeSpeed:         1000
	};

	$.fn.opacityrollover = function(settings) {
		// Initialize the effect
		$.extend(this, defaults, settings);

		var config = this;

		function fadeTo(element, opacity) {
			var $target = $(element);
      var process_counts = parseInt($target.attr("in_process"), 10);
      $target.unbind('mouseleave', deactivateElement);
      //

      if (config.exemptionSelector)
				$target = $target.not(config.exemptionSelector);	
			
			$target.fadeTo(config.fadeSpeed, opacity, function(el){ 
        process_counts--;
        $target.attr("in_process", process_counts);
        if( process_counts < 0){ process_counts = 0; }
        if(process_counts <= 1){
          $target.bind('mouseenter', activateElement);
        }
      });
		}

		function fadeToOver(element, opacity) {
			var $target = $(element);
      var process_counts = parseInt($target.attr("in_process"), 10);
      $target.attr("in_process", ++process_counts);
      $target.unbind('mouseenter', activateElement);
      if(process_counts > 1){
        return false;
      };
      if (config.exemptionSelector)
        $target = $target.not(config.exemptionSelector);	
      
      $target.fadeTo(100, opacity, function(el){
        //$target.bind('mouseleave', deactivateElement);
        //$target.bind('mouseenter', activateElement);
      });
      $target.bind('mouseleave', deactivateElement);
		}

    function activateElement() {
      fadeToOver(this, config.mouseOverOpacity);
    };
    function deactivateElement() {
      fadeTo(this, config.mouseOutOpacity);
    };

    this.attr('in_process', 0);

		this.css('opacity', this.mouseOutOpacity);

    $(this).bind('mouseenter', activateElement);
    $(this).bind('mouseleave', deactivateElement);

/*
		this.css('opacity', this.mouseOutOpacity) 
			.hover(
				function () {
					fadeToOver(this, config.mouseOverOpacity);
				},
				function () {
					fadeTo(this, config.mouseOutOpacity);
				});
*/    
		return this;
	};
})(jQuery);

