(function( $ ){
$.fn.mistakew = function(options){
    
    var settings = {
        'server_script' : '',
        'messages': {
            'ok': 'ok',
            'cancel': 'cancel',
            'thank': 'thank',
            'title': 'title'
        }
    };

    if ( options ) {
        $.extend( settings, options );
    }

    var d = '<div id="mistakew">'
          + '<span class="info_text"></span>'
          + '<hr>'          
          + '<span class="sel_text"></span>'
          + '<br><br>'
          + '<textarea rows="6"></textarea>'
          + '<br>'
          + '<input type="button" class="mw_btn" id="mw_ok" value="'+settings.messages.ok+'">'
          + '<input type="button" class="mw_btn" id="mw_cancel" value="'+settings.messages.cancel+'">'
          + '<span class="thank_text"></span>'
          + '</div>';      
    
    var getSelected = function(){        
        if (window.getSelection) {
        return window.getSelection();
        } else if (document.selection) {
            return document.selection.createRange().text
        }
        return null;        
    }

    var showDialog = function(){
        var dwin = jQuery(d);

        jQuery('.info_text', dwin).html(settings.messages.title);

        jQuery('body').append(dwin);

        var w = document.body.clientWidth;
        var h = document.body.clientHeight;
        var dw = dwin.width();
        var dh = dwin.height();
        
        dwin.css('left', (w-dw)/2+'px');
        dwin.css('top', (h-dh)/2+'px');        

        var sel = getSelected();
        sel= sel.toString();
        if (sel==null) sel="";
        
        jQuery('.sel_text', dwin).html(sel);

        jQuery("#mw_cancel", dwin).bind('click', function(){
            removeDialogs(true);
        });

        
        jQuery("#mw_ok", dwin).bind('click', function(){
            $(this).unbind('click');
            
           /**/
           jQuery.ajax({
               type     :     "POST",
               url      :     settings.server_script,
               data     :     {'page': window.location.toString(), 'user_comment': jQuery('textarea', dwin).val(), 'sel': sel},
               success  :     function(msg){                                
                                var d = jQuery("#mistakew");
                                jQuery('.thank_text', d).html('<br>' + settings.messages.thank);
                                setTimeout(function(){removeDialogs(true)}, 2000);                                
                              }
           });           
           /**/
           
        });
    }

    

    var removeDialogs = function (fade){        
        if (fade == true) jQuery("#mistakew").fadeOut('fast', function(){
            jQuery("#mistakew").remove();
        });
        else jQuery("#mistakew").remove();        
    }


    
    $(document).keypress(function(event, handler) {        
        if (event.keyCode == 27) removeDialogs();
        
        if((event.ctrlKey) && ((event.keyCode == 0xA)||(event.keyCode == 0xD))){
            removeDialogs();
            showDialog();
        }
    });


    
    
};
})( jQuery );
