/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);




$(function(){

	$.fn.outerHTML = function() {
		return $(this).wrap('<div></div>').parent().html();
	}
	
	/**
	 * function which handles the "hover" state for the front page boxes.
	 * It uses the Flip! plugin to flip the content over, and set a data
	 * val "flipped" upon completion of the flip event.
	 * It also clears the timeout timer as set in the flipout handler.
	 */
	$.divFlipOver = function() {
	
		var elem = $(this);

		clearTimeout($(elem).data('timeoutId'));
		
		if(!elem.data('flipped')) {
			
			elem.flip({
				direction:'rl',
				speed: 300,
				color:'#0A4E71',
				onBefore: function(){
					elem.data('original_html', elem.html()); //.outerHTML());
					elem.data('original_bg_color', elem.css('background-color'));
				},
				onEnd: function() {
					elem.data('flipped', (elem.data('flipped')) ? false : true);
				},
				content: elem.find('div.divData').html()
			});	
		}
	};
	
	/**
	 * function which handles the "mouseout/out" state for the front page boxes.
	 * It doesn't fire straight away, but rather sets a small delay for the event,
	 * reducing jerky flip backs, ect.
	 * It uses the hidden "revertFlip" function provided by the Flip! plugin,
	 */
	$.divFlipOut = function() {
	
		var elem = $(this);
		var timeoutId = setTimeout(function() {
			if (elem.data('flipped')) elem.revertFlip();
		}, 1000);
		$(elem).data('timeoutId', timeoutId);	

	};
	
	/**
	 * Set up the hover intent events... we don't want the boxes flipping
	 * immediately upon mouse hover, as this would mean a user moving their mouse
	 * over the screen and passing over the boxes accidently would trigger the flip... ugly
	 * We only have a very short hover intent, but it should handle most cases!
	 */
	$('.divFlip').hoverIntent({
		over: $.divFlipOver,
		out: $.divFlipOut,
		timeout: 150
	});

	
});

