jQuery.fn.initConfirmer=function(opts){if(!opts){opts=[];}
opts=jQuery.extend({initialText:"PLEASE SET .initialText='Button Label'",confirmText:"Confirm: "+opts.initialText,timeout:3000,onconfirm:null,ontimeout:null,onactivate:null,classInitial:'',classActivated:'',debuggering:false},opts);var dbgdiv=null;function dbg(msg){if(dbgdiv)dbgdiv.prepend("Confirmer debug: "+msg+"<br/>");};if(opts.debuggering){this.after("<div id='ConfirmerDebugDiv'>Confirmer debugging area</div>");dbgdiv=jQuery('#ConfirmerDebugDiv');dbgdiv.css('border','1px dashed #000');dbg("debugging activated.");}
function ConfirmHolder(target,opts){var me=this;me.target=target;me.opts=opts;me.timerID=null;var states={initial:0,waiting:1};me.state=states.initial;me.target.html(me.opts.initialText);me.setClasses=function(activated){if(activated){if(me.opts.classActivated){me.target.addClass(me.opts.classActivated);}
if(me.opts.classInitial){me.target.removeClass(me.opts.classInitial);}}else{if(me.opts.classInitial){me.target.addClass(me.opts.classInitial);}
if(me.opts.classActivated){me.target.removeClass(me.opts.classActivated);}}}
me.setClasses(false);me.doTimeout=function(){me.timerID=null;if(me.state!=states.waiting){return;}
me.setClasses(false);me.state=states.initial;dbg("Timeout triggered.");me.target.html(me.opts.initialText);if(me.opts.ontimeout){me.opts.ontimeout(me.target);}};me.target.click(function(){switch(me.state){case(states.waiting):if(null!==me.timerID)clearTimeout(me.timerID);me.state=states.initial;me.setClasses(false);dbg("Confirmed");me.target.html(me.opts.initialText);if(me.opts.onconfirm)me.opts.onconfirm(me.target);break;case(states.initial):me.setClasses(true);if(me.opts.onactivate)me.opts.onactivate(me.target);me.state=states.waiting;dbg("Waiting "+me.opts.timeout+"ms on confirmation...");me.target.html(me.opts.confirmText);me.timerID=setTimeout(function(){me.doTimeout();},me.opts.timeout);break;default:break;};});};var holder=new ConfirmHolder(this,opts);return this;};
