jQuery.fn.ritsConfirm = function(options, callback){
   
    var clickElement = this;
    var wrapper;
    var wrapperAlpha;
    var confirmBox;
    var messageBox;
    var confirmYes;
    var confirmNo;
    var cancel;
    
    var settings = jQuery.extend({
        wrapperId : null,
        wrapperWidth : null,
        wrapperHeight: null,
        message : 'Confirm ?',
        opacity : 0.5,
        color: '#000',
        zindex : 100,
        confirmBox: null,
        messageBox: null,
        confirmYes: null,
        confirmNo: null,
        cancel: null,
        reverseResponse: false,
        cursor: 'pointer',
        confirmBoxCSS : null,
        confirmMessageCSS : null,
        canCancel : false    
    }, options);
    
    this.showConfirm = function(jNode){ 
       if(settings.wrapperId != null)
            wrapper = jQuery(settings.wrapperId);
       else {
            wrapper = jQuery('<div class="confirm-wrapper"></div>');
            jQuery('body').append(wrapper);
       }
       
       wrapperAlpha = jQuery('<div class="confirm-wrapper-alpha"></div>');
       wrapper.append(wrapperAlpha);     
            
       
       if(settings.confirmBox == null){
           confirmBox = jQuery('<div class="confirm-box"></div>');
       } else {
           confirmBox = jQuery(settings.confirmBox);
       }
       
       if(settings.confirmBoxCSS != null)
          confirmBox.css(settings.confirmBoxCSS);
       
       wrapper.append(confirmBox);
       
       if(settings.messageBox == null){
           messageBox = jQuery('<div class="confirm-message">'+settings.message+'</div>');
       } else {
           messageBox = jQuery(settings.messageBox);
       }
       
       if(settings.confirmMessageCSS != null)
            messageBox.css(settings.confirmMessageCSS);
       
       confirmBox.append(messageBox);
       
       if(settings.confirmYes == null){
           confirmYes = jQuery('<input type="button" class="confirm-yes" value="Yes" />');
       } else {
           confirmYes = jQuery(settings.confirmYes);
       }
       confirmYes.css('cursor', settings.cursor);
       confirmBox.append(confirmYes);
       
       if(settings.confirmNo == null){
           confirmNo = jQuery('<input type="button" class="confirm-no" value="No" />');
       } else {
           confirmNo = jQuery(settings.confirmNo);
       }
       confirmNo.css('cursor', settings.cursor);
       confirmBox.append(confirmNo);
       
       if(settings.cancel == null){
           cancel = jQuery('<input type="button" class="confirm-cancel" value="Cancel" />');
       } else {
           cancel = jQuery(settings.cancel);
       }
       cancel.css('cursor', settings.cursor); 
       if(settings.canCancel)
            confirmBox.append(cancel);     
       
       
       if(wrapper.css('position') != 'fixed'){
           wrapper.css('position', 'fixed');
           wrapper.css('top', 0);
           wrapper.css('left', 0);
           wrapperAlpha.css('position', 'fixed');
           wrapperAlpha.css('top', 0);
           wrapperAlpha.css('left', 0);
       }
       
       if(settings.wrapperWidth == null){
           wrapper.css('width', screen.width);
           wrapperAlpha.css('width', screen.width);
       } else {
           wrapper.css('width', settings.wrapperWidth);
           wrapperAlpha.css('width', settings.wrapperWidth);
       }
       
       if(settings.wrapperHeight == null){
           wrapper.css('height', screen.height);
           wrapperAlpha.css('height', screen.height);
       } else {
           wrapper.css('height', settings.wrapperHeight);
           wrapperAlpha.css('height', settings.wrapperHeight);
       }
       
       wrapperAlpha.css('background-color', settings.color);
       
       wrapperAlpha.fadeTo(0, settings.opacity);
       
       if(wrapper.css('z-index') == 'auto'){
           wrapper.css('z-index', settings.zindex);
       }
       confirmBox.css('z-index', (settings.zindex+10));
       
       jQuery(confirmYes).click(function(){
           exit();
           var response = (settings.reverseResponse) ? 'no' : 'yes';
           callback(response);
       });
       
       jQuery(confirmNo).click(function(){
           exit();
           var response = (settings.reverseResponse) ? 'yes' : 'no';
           callback(response);
       });
       
       jQuery(wrapperAlpha).click(function(){
           if(settings.canCancel){
               exit();
               callback('cancel');
           }
       });
       
       jQuery(cancel).click(function(){
           exit();
           callback('cancel');
       });
       
       //var toWidth = wrapperAlpha.css('width');
       //var toHeight = wrapperAlpha.css('height');
       
       //wrapperAlpha.css('width', 0);
       //wrapperAlpha.css('height', 0);
       
       //wrapper.show();
       wrapper.hide();        
       wrapper.fadeIn();
       //wrapperAlpha.fadeIn(2000);
       //wrapperAlpha.animate({'width':toWidth, 'height':toHeight});
       
    }
    
    this.exit = function(){
        jQuery(wrapper).remove();
    }
    var exit = this.exit;
    
    /*
    this.each(function(){
       
       var jNode = jQuery(this);
       
       jNode.click(function(){
            clickElement.showConfirm(jNode);
       });
        
    }); 
    */
    
    this.showConfirm(this);
    
    return (this);
    
}
