jQuery.fn.confirm=function(options){options=jQuery.extend({msg:'Are you sure?',stopAfter:'never',wrapper:'<span></span>',eventType:'click',dialogShow:'show',dialogSpeed:'',timeout:0},options);options.stopAfter=options.stopAfter.toLowerCase();if(!options.stopAfter in['never','once','ok','cancel']){options.stopAfter='never';}
options.buttons=jQuery.extend({ok:'Yes',cancel:'No',wrapper:'<a href="#"></a>',separator:'/'},options.buttons);var type=options.eventType;return this.each(function(){var target=this;var $target=jQuery(target);var timer;var saveHandlers=function(){var events=jQuery.data(target,'events');if(!events&&target.href){$target.bind('click',function(){document.location=target.href});events=jQuery.data(target,'events');}else if(!events){return;}
target._handlers=new Array();for(var i in events[type]){target._handlers.push(events[type][i]);}}
var $ok=jQuery(options.buttons.wrapper).append(options.buttons.ok).click(function(){if(options.timeout!=0){clearTimeout(timer);}
$target.unbind(type,handler);$target.show();$dialog.hide();if(target._handlers!=undefined){jQuery.each(target._handlers,function(){$target.click(this.handler);});}
$target.click();if(options.stopAfter!='ok'&&options.stopAfter!='once'){$target.unbind(type);$target.one(type,handler);}
return false;})
var $cancel=jQuery(options.buttons.wrapper).append(options.buttons.cancel).click(function(){if(options.timeout!=0){clearTimeout(timer);}
if(options.stopAfter!='cancel'&&options.stopAfter!='once'){$target.one(type,handler);}
$target.show();$dialog.hide();return false;});if(options.buttons.cls){$ok.addClass(options.buttons.cls);$cancel.addClass(options.buttons.cls);}
var $dialog=jQuery(options.wrapper).append(options.msg).append($ok).append(options.buttons.separator).append($cancel);var handler=function(){jQuery(this).hide();if(options.dialogShow!='show'){$dialog.hide();}
$dialog.insertBefore(this);$dialog[options.dialogShow](options.dialogSpeed);if(options.timeout!=0){clearTimeout(timer);timer=setTimeout(function(){$cancel.click();$target.one(type,handler);},options.timeout);}
return false;};saveHandlers();$target.unbind(type);target._confirm=handler
target._confirmEvent=type;$target.one(type,handler);});}
