(function($) {
  var 
  dl = this,
  table = null,
  settings = {  
    preWievSelector : null, // ".jobListDetail",
    preWievBannedClass : "datalistitempreviewbanned"
  }, 
  actionTimeout = null,    
  hideTimeout = null,
  show = function(){
    var tr = table.find('tbody tr.hover');
    if (tr.length == 1) {
      var o = getOffsets(tr.get(0));
      var href = $(tr).children(':eq(0)').children('a').attr('href');
      var title = $(tr).children(':eq(0)').text();
      var content = $(tr).children(':last').children('span.description').text();
      var id = $(tr).children(':last').children('span.id').text();
      var adinfo = new Array();
      var cat = $.trim($(tr).children(':last').children('span.category').text());
      if (cat.length > 0)
        adinfo.push(cat);
      $(settings.preWievSelector).find('div.buttons a').attr('href', href);
      $(settings.preWievSelector).find('h2').text(title);
      $(settings.preWievSelector).find('p.text').text(content);
      $(settings.preWievSelector).find('span.id').text(id);
      $(settings.preWievSelector).find('div.conditions').text(adinfo.join(' / '));
      $(settings.preWievSelector)
      .css({
        left : (o.x + 10) + "px",
        top  : (o.y + $(tr).height()) + "px"
      })
      .slideDown('fast', function(){
        });
    }
  },  
  close = function(){

    var tr = table.find('tbody tr.hover');
    if (tr.length == 1) {
      $(tr).addClass(settings.preWievBannedClass);
      $(tr).next()
      .addClass(settings.preWievBannedClass)
      .bind('mousemove', function(){
        $(this).removeClass(settings.preWievBannedClass).unbind('mousemove');
        $(this).prev().removeClass(settings.preWievBannedClass);
        actionTimeout = setTimeout(function(){
          show();
        }, 500);
      });
      $(settings.preWievSelector).slideUp('fast');
    }
  },
  init = function(tr, e, type) {
    if (actionTimeout)
      clearTimeout(actionTimeout);
    if (type == 'show') {
      if (!$(tr).hasClass('hover')) {
        table.find('tbody tr.hover').removeClass('hover');
        $(tr).addClass('hover');
        if (settings.preWievSelector && !$(tr).hasClass(settings.preWievBannedClass))
          actionTimeout = setTimeout(function(){
            show();
          }, 1000);
      }
    } else {
      if ($(tr).hasClass('hover')) {
        if (settings.preWievSelector && ($(e.relatedTarget).is(settings.preWievSelector) || $(e.relatedTarget).parent().is(settings.preWievSelector))) {

        } else {
          $(tr).removeClass('hover');
          if (settings.preWievSelector) {
            $(tr).removeClass(settings.preWievBannedClass);
            $(settings.preWievSelector).slideUp('fast');
          }
        }
      }
    }
  };
      
    
  $.fn.datalist = function(options){
    settings = $.extend({}, settings, options);
    if (settings.preWievSelector) {
      $('body').append($(settings.preWievSelector));//move TB content end of body
      $(settings.preWievSelector + " .close").click(function(e) {
        e.preventDefault();
        close();
      });
      $(settings.preWievSelector).mouseleave(function(e) {
        if (!e.relatedTarget || e.relatedTarget.nodeName.toLowerCase() != 'td')
          init(table.find('tbody tr.hover').get(0), e, 'hide');
      });
    }
    $(this).find('tbody tr:not(.noover)')
      
    .mouseenter(function(e) {
      init(this, e, 'show');
    })
    .mouseleave(function(e) {
      init(this, e, 'hide');
    })
    .click(function(e) {
      e.preventDefault();
      var nn = e.target.nodeName.toLowerCase();
      if (nn != 'img' || nn == 'td' || (nn == 'a' && !$(e.target).parent().hasClass('save'))) {
        var a = $(this).find('a:first');
        var href = $(a).attr('href');
        var t = $(a).attr('target');
        if (t && (t.indexOf('blank') != -1 || t.indexOf('new') != -1))
          window.open(href)
        else
          document.location.href = href;
      }
                      
    });
    table = $(this);
    return this;
  }  
                
})($)      

