function UserPicker(params)
{
  var m_element = null;
  var m_elfn = null;
  var m_elln = null;
  var m_elemail = null;
  var m_elclrbtn = null;
  var m_elresults = null;
  var m_UIbusy = 0;
  var m_ctxt = this;
  var m_params = params;
  if(params.action)
    var m_action = params.action;
  else
    var m_action = 'getusers';
  
  this.RegisterUI = function(el){
    m_element = el;
    if($(el).find(".usersearch").length){
      m_elfn = $(el).find(".fe_fn")[0];
      m_elln = $(el).find(".fe_ln")[0];
      m_elemail = $(el).find(".fe_email")[0];
      m_elresults = $(el).find(".usersearchresults")[0];
      $(m_elfn).keyup(function(){
        m_ctxt.onSearckKeyHit();
      });
      $(m_elln).keyup(function(){
        m_ctxt.onSearckKeyHit();
      });
      $(m_elemail).keyup(function(){
        m_ctxt.onSearckKeyHit();
      });
      $(el).find(".usersearch_clearbtn").click(function(){
        $(m_elfn).attr("value","");
        $(m_elln).attr("value","");
        $(m_elemail).attr("value","");
        $(m_element).find(".usersearchresults").empty();
        $("#newplayer").hide();
      });
    }
    $(".ui-icon").hover(function(){ $(this).addClass("ui-state-hover"); },
                        function(){ $(this).removeClass("ui-state-hover"); });
    /*$("#usersearch_clearbtn").click(function(){
      $(m_elfn).attr("value","");
      $(m_elln).attr("value","");
      $(m_elemail).attr("value","");
      //m_elresults.empty();
    });*/
  }
  
  this.onSearckKeyHit = function(){
    clearTimeout(t);
    t = setTimeout(this.procUserData, 300);
    //t = setTimeout('handleUserString("'+strFn+'","'+strLn+'","'+strEmail+'")',300);
  }
  this.procUserData = function(){
    var fn = m_elfn ? $(m_elfn).attr("value") : "";
    var ln = m_elln ? $(m_elln).attr("value"): "";
    var em = m_elemail ? $(m_elemail).attr("value"): "";
    if(fn || ln || em){
      postSingleAction('{"name":"'+m_action+'","params":{"fn":"'+fn+'","ln":"'+ln+'","email":"'+em+'"}}',m_ctxt.procFoundUsers,handleJSONFailure);
    }else{
      $(m_element).find(".usersearchresults").empty();
      $("#newplayer").hide();
    }
  }
  this.procFoundUsers = function(data, textStatus){
    var retData = eval( '(' +data+ ')' );
    var el = $(m_element).find(".usersearchresults")
    //var el = $("#usersearchres");
    el.empty();
    if(retData.s == "OK"){
      if(!retData.users.length){
        $("#newplayer").show();
      }else{
        $("#newplayer").hide();
        if(retData.users.length==1){
          //found just 1, so we are good to go
          $(".fe_uid").val(retData.users[0].id);
        }
        var row,career=null,temp,previd=0;
        for(var i=0; i<retData.users.length; i++){
          if(i>0)
            previd = retData.users[i-1].personid;
          if(m_params.container == 'smartdiv'){
            if(retData.users[i].personid != previd){
              row = $("<div id='pid_"+retData.users[i].personid+"' class='userfound'><button class='btnadd makeplayer ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'><span class='ui-button-text'>"+txt['add']+"</span></button></div>");
              if(!i) $(row).addClass('first'); 
              if(i%2) $(row).addClass('altrow');
              $(el).append(row);
              temp = "<div class='field fn'>"+unescape(retData.users[i].fn)+"</div>";
              $(row).append(temp);
              temp = "<div class='field ln'>"+unescape(retData.users[i].ln)+"</div>";
              $(row).append(temp);
              career = $("<div class='career'></div>");
              $(row).append(career);
              $(row).append("<div class='userfoundbottom'></div>");
            }
            if(retData.users[i].role){
              seasonline = $("<div class='seasonline'></div>");
              $(seasonline).append("<div class='field role'>"+retData.users[i].role+"</div>");
              $(seasonline).append("<div class='field seasonname'>"+retData.users[i].seasonname+"</div>");
              $(seasonline).append("<div class='field team'>"+retData.users[i].teamname+","+retData.users[i].gradename+" "+retData.users[i].levelname+"</div>");
              $(row).find(".career").append(seasonline);
            }
          }else if(m_params.container == 'parentsmartdiv'){
            if(retData.users[i].personid != previd){
              row = $("<div id='pid_"+retData.users[i].personid+"' class='userfound'><button class='btnadd ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'><span class='ui-button-text'>"+txt['addparent']+"</span></button></div>");
              if(!i) $(row).addClass('first'); 
              if(i%2) $(row).addClass('altrow');
              $(el).append(row);
              temp = "<div class='field fn'>"+unescape(retData.users[i].fn)+"</div>";
              $(row).append(temp);
              temp = "<div class='field ln'>"+unescape(retData.users[i].ln)+"</div>";
              $(row).append(temp);
              career = $("<div class='career'></div>");
              $(row).append(career);
              $(row).append("<div class='userfoundbottom'></div>");
            }
            if(retData.users[i].role){
              seasonline = $("<div class='seasonline'></div>");
              $(seasonline).append("<div class='field role'>"+retData.users[i].role+"</div>");
              $(seasonline).append("<div class='field seasonname'>"+retData.users[i].seasonname+"</div>");
              $(seasonline).append("<div class='field team'>"+retData.users[i].teamname+","+retData.users[i].gradename+" "+retData.users[i].levelname+"</div>");
              $(row).find(".career").append(seasonline);
            }            
          }else{
            row = el[0].insertRow(0);
            if(!i) row.className = "first userfound";
            row.className="userfound";
            row.id="user_"+retData.users[i].id;
            if(i%2){
              $(row).addClass('altrow');
            }
            var cellcnt = 0;
            var cell;
            for(var j=0; j<m_params.display.length; j++){
              cell = row.insertCell(cellcnt++);
              cell.innerHTML = retData.users[i][m_params.display[j]] ? unescape(retData.users[i][m_params.display[j]]) : "";
              $(cell).addClass(m_params.display[j]);
              $(cell).addClass('dataitem');
            }
          }
        }
        $(".userfound .btnadd.makeplayer").click(function(){
          pID = $(this).parents(".userfound").attr("id").split("_",2)[1];
          memberize(pID,teamid,'player');
          return false;
        });
        initBtns();
        if(m_params.doneCB)
          m_params.doneCB();
        else{
          m_ctxt.initSearchResTable();
        }
      }
    }
  }
  this.initSearchResTable = function(){
    $(m_element).find(".usersearchresults TR").hover(function(){
       $(this).children("TD").addClass("hover");
    },function(){
      $(this).children("TD").removeClass("hover");
    });
    $(m_element).find(".usersearchresults TR").click(function(){
      fname = $(this).children(".fn").html();
      lname = $(this).children(".ln").html();
      email = $(this).children(".email").html();
      uid = $(this).attr("id").split("_",2)[1];
      $(m_elfn).attr("value",fname);
      $(m_elln).attr("value",lname);
      $(m_elemail).attr("value",email);
      $(m_element).find(".fe_uid").attr("value",uid);
      $(".chosenUser").html(fname+" "+lname+", &lt;"+email+"&gt;");
      m_ctxt.onSearckKeyHit();
    });    
  }
  function handleUserString(fn,ln,em){
    postSingleAction('{"name":"getusers","params":{"fn":"'+fn+'","ln":"'+ln+'","email":"'+em+'"}}',handleFoundUsers,handleJSONFailure);  
  }

}


