/**
 * jQuery Plugin Hoverable.
 * @author NOSE		
 */
jQuery.fn.hoverable = function(op) {	
	
	// defaults
	var defaults =  {
		classHoverable:"hoverable",
		classHover:"hover",
		classExclude:"modal"
	};
	jQuery.extend(defaults, op);
	
	// references
	var elHoverable = jQuery(this);
	
	
	// check
	if (jQuery("a",this).length <= 0) {
		return;
	}
		
	// tag
	jQuery(elHoverable).addClass(defaults.classHoverable);
	
	// events
	jQuery(elHoverable).bind("mouseenter",animateOver);
	jQuery(elHoverable).bind("mouseleave",animateOut);
	jQuery("a",elHoverable).bind("click",doLink);
	jQuery(elHoverable).bind("click",doLink);
	
	
	/**
	* Link.
	*/
	function doLink() {
		dlog("doLink");
		
		// exclude
		if (jQuery(this).hasClass(defaults.classExclude)) {
			return true;
		}		
		
		// link
		var h = jQuery(this).attr("href");
		if (h == null) {
			h = jQuery("a",elHoverable).attr("href");
		}
		
		// follow
		if (h != null) {
			window.location.href = h;
			return false;
		};
	}
	
	
	/**
	* Animates the mouse enter/leave states.
	*/
	function animateOver() {
		dlog("animateOver");
		
		// state
		jQuery(elHoverable).addClass(defaults.classHover);
		
		// animate
		if (! jQuery.browser.msie) {
			jQuery("img",elHoverable).animate({opacity: 0.93}, 180);
		}
		
	}
	function animateOut() {
		dlog("animateOut");
		
		// state
		jQuery(elHoverable).removeClass(defaults.classHover);
		
		// animate
		if (! jQuery.browser.msie) {
			jQuery("img",elHoverable).animate({opacity: 1.0}, 300);
		}
		
	}
	
	/*
	* Log.
	*/
	function dlog(msg) {
		//console.log(msg);
	}

			
    // chain
    return this;

};
