function preventSelection(element){  var
    mouseDown = false;
    preventSelection = false;
      function addHandler(element, event, handler){

    if (element.attachEvent)

    element.attachEvent('on' + event, handler);

    else

    if (element.addEventListener)

    element.addEventListener(event, handler, false);

    }

    function removeSelection(){

      if (window.getSelection) { 
        window.getSelection().removeAllRanges(); 
      }
      else if (document.selection && document.selection.clear){
        //document.selection.clear();
        document.selection.empty();
      }
    }

    function killCtrlA(event){

    var event = event || window.event;

    var sender = event.target || event.srcElement;

    if (sender.tagName.match(/INPUT|TEXTAREA/i))

    return;

    var key = event.keyCode || event.which;

    if (event.ctrlKey && key == 'A'.charCodeAt(0))
      // 'A'.charCodeAt(0) можно заменить на 65

    {

    removeSelection();

    if (event.preventDefault)

    event.preventDefault();

    else

    event.returnValue = false;

    }

    }

    // не даем выделять текст мышкой

//     addHandler(element, 'select', function(event){
// 
//     var event = event || window.event;
// 
//     var sender = event.target || event.srcElement;
// 
//     p = sender;
//     tmp = false;
//     while (p) {
//       if ( p.className != undefined )
//         tmp = tmp || p.className.match(/tmain/i);
//       p = p.parentNode;
//     }
//     if((!tmp) {
//       removeSelection();
//     }
// 
// //     if(preventSelection)
// // 
// //       removeSelection();
// // 
// 
//      });
    addHandler(element, 'mousemove', function(event){

    var event = event || window.event;

    var sender = event.target || event.srcElement;

    p = sender;
    tmp = false;
    inBody = false;
    while (p) {
      if ( p.className != undefined )
        tmp = tmp || p.className.match(/tmain/i);
      if ( p.tagName != undefined )
        inBody = inBody || p.tagName.match(/body/i);
      p = p.parentNode;
    }
    if (!inBody)
      return;
    if(((!tmp)&&(mouseDown))||preventSelection) {
      removeSelection();
    }

//     if(preventSelection)
// 
//       removeSelection();
// 

     });

    addHandler(element, 'mousedown', function(event){

      mouseDown = true;
      
    var event = event || window.event;

    var sender = event.target || event.srcElement;
    
    p = sender;
    tmp = false;
    while (p) {
      if ( p.className != undefined )
        tmp = tmp || p.className.match(/tmain/i);
      p = p.parentNode;
    }
    
    preventSelection = (!sender.tagName.match
    (/INPUT|TEXTAREA/i))&&(!tmp);
    
//     preventSelection = (!sender.tagName.match
//     (/INPUT|TEXTAREA|P/i))&&(!sender.className.match(/tmain/i));
    

    });

    addHandler(element, 'mouseup', function(event){

      mouseDown = false;
      
    });

    // борем dblclick

    // если вешать функцию не на событие dblclick, можно избежать

    // временное выделение текста в некоторых браузерах

    addHandler(element, 'mouseup', function(){

    if (preventSelection)

    removeSelection();

    preventSelection = false;

    });

    // борем ctrl+A

    // скорей всего это и не надо, к тому же есть подозрение

    // что в случае все же такой необходимости функцию нужно

    // вешать один раз и на document, а не на элемент

    addHandler(element, 'keydown', killCtrlA);

    addHandler(element, 'keyup', killCtrlA);
}


