(function($){$.c4tooltip={toolTipClass:"c4tooltip",buttonClass:"c4TooltipButton",options:{},createTooltip:function($button){if($button instanceof jQuery===false){return null
}$button.after("<div class='"+$.c4tooltip.toolTipClass+"'><div class='"+$.c4tooltip.toolTipClass+"Inner'/></div>");
return $button.next("."+$.c4tooltip.toolTipClass)
},populate:function($tooltip){if($tooltip instanceof jQuery===false){return null
}var $tooltipInner=$tooltip.find("."+$.c4tooltip.toolTipClass+"Inner");
$tooltipInner.html($.c4tooltip.options.html);
return $tooltip
},hideTooltip:function($tooltip,duration){if(duration===0){$tooltip.css("visibility","hidden");
$tooltip.css("opacity",0)
}else{$tooltip.animate({opacity:0},duration,function(){$(this).css("visibility","hidden")
})
}},fadeUp:function($el){$el.css("visibility","visible");
$el.animate({opacity:1},300,function(){$(this).css("visibility","visible")
})
},showTooltip:function(button){var $tooltip;
$.c4tooltip.hideTooltip($("."+$.c4tooltip.toolTipClass),0);
$tooltip=$.c4tooltip.getTooltip(button);
$.c4tooltip.fadeUp($tooltip);
$tooltip.attr("tabindex",-1).focus()
},setDisplayOptions:function($tooltip){if($.c4tooltip.options.ttClass){$tooltip.addClass($.c4tooltip.options.ttClass)
}},getTooltipPosition:function($tooltip,$button){var positionObject={tooltipHeight:$tooltip.outerHeight(),tooltipWidth:$tooltip.outerWidth(),xOffset:$button.outerWidth(),buttonHeight:$button.outerHeight()};
positionObject.pos=$button.position();
positionObject.nPos=positionObject.pos;
return positionObject
},setTooltipPosition:function(positionObject){var tooltipHeight=positionObject.tooltipHeight,tooltipWidth=positionObject.tooltipWidth,xOffset=positionObject.xOffset,buttonHeight=positionObject.buttonHeight,pos=positionObject.pos,nPos=positionObject.nPos;
switch($.c4tooltip.options.ttPosition){case"leftTop":nPos.top=pos.top+1;
nPos.left=pos.left-tooltipWidth;
break;
case"leftBottom":nPos.top=(pos.top-tooltipHeight)+(buttonHeight/2)+10;
nPos.left=pos.left-tooltipWidth;
break;
case"rightTop":nPos.top=pos.top+1;
nPos.left=pos.left+xOffset+10;
break;
case"rightBottom":nPos.top=(pos.top-tooltipHeight)+(buttonHeight/2)+10;
nPos.left=pos.left+xOffset+10;
break;
default:nPos.top=(pos.top-tooltipHeight)+(buttonHeight/2)+10;
nPos.left=pos.left+xOffset+10
}return nPos
},getTooltip:function(button){return $(button).next("."+$.c4tooltip.toolTipClass)
},bindKeyup:function(thisKeyCode){$("body").keyup(function(event){if(event.keyCode===thisKeyCode){$.c4tooltip.hideTooltip($("."+$.c4tooltip.toolTipClass),300)
}})
},bindBodyClick:function(){$("body").bind("click keypress",function(event){if(event.type==="keypress"&&event.keyCode!==13){return 
}var isTooltip,isButton,$parents=$(event.target).parents(),$thisAndAncestors=$(event.target).add($parents),numAncestors=$thisAndAncestors.length;
$thisAndAncestors.each(function(i){isTooltip=$(this).hasClass($.c4tooltip.toolTipClass);
isButton=$(this).hasClass($.c4tooltip.buttonClass);
if(isTooltip||isButton){if(isButton){event.preventDefault();
if($.c4tooltip.getTooltip(this).css("visibility")!=="visible"){$.c4tooltip.showTooltip(this)
}}return false
}else{if(i===numAncestors-1){$.c4tooltip.hideTooltip($("."+$.c4tooltip.toolTipClass),300)
}}})
})
},bind:function(eventType,bindFunc,param){if(window.eventTypeBound===eventType){}else{bindFunc(param);
window.eventTypeBound=eventType
}},initialiseEvents:function(){$.c4tooltip.bind("bodyClick",$.c4tooltip.bindBodyClick)
},init:function($buttons){$buttons.each(function(){var $tooltip,pos;
$tooltip=$.c4tooltip.createTooltip($(this));
$tooltip=$.c4tooltip.populate($tooltip);
posObj=$.c4tooltip.getTooltipPosition($tooltip,$(this));
pos=$.c4tooltip.setTooltipPosition(posObj);
$tooltip.css(pos);
$.c4tooltip.hideTooltip($tooltip,0);
$.c4tooltip.setDisplayOptions($tooltip);
$(this).addClass($.c4tooltip.buttonClass)
});
$.c4tooltip.initialiseEvents()
}};
$.fn.c4tooltip=function(options){$.c4tooltip.options=options||{};
$.c4tooltip.options.html=options.html||"";
$.c4tooltip.options.ttClass=options.ttClass||"";
$.c4tooltip.options.ttPosition=options.ttPosition||"";
if($.c4tooltip.options.html){new $.c4tooltip.init(this)
}return this
}
})(jQuery);
