var $keyboard=new Object();
$keyboard.name="keyboard";
$keyboard.hidetimeout=null;
$keyboard.object=null;
$keyboard.input=null;
$keyboard.lowercase=true;
$keyboard.disabled=false;
$keyboard.selected=false;
$keyboard.keys=["1","2","3","4","5","6","7","8","9","0","q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","delete","z","x","c","v","b","n","m","switch"];
$keyboard.numbers=["1","2","3","4","5","6","7","8","9","0"];
$keyboard.verify_blank_error="\u5bc6\u7801\u952e\u76d8\u8d44\u6599\u4e0d\u5b8c\u6574.";

$keyboard.show=function(el){
  if(this.disabled){
    return ;
  }
  this.addListener();
  if(this.input!=el&&this.object!=null){
    this.hidden();
  }
  this.input=el;
  el.readOnly=true;
  setTimeout("$keyboard.display()",10);
};

$keyboard.addListener=function(){
  document.removeEvent("keyup",this.fn);
  document.removeEvent("click",this.fn);
  this.fn=function(event){
    $keyboard.remove(event);
  };
  document.addEvent("keyup",this.fn);
  document.addEvent("click",this.fn);
};

$keyboard.hide=function(el){
  var key=$(this.name+el.id);
  if(!$defined(key)){
    alert(this.verify_blank_error);
  }
  this.hidetimeout=setTimeout("$keyboard.hidden()",100);
  this.object=key;
  this.input=el;
};

$keyboard.hidden=function(){
  this.object.style.display="none";
  this.disabled=false;
};

$keyboard.display=function(){
  if(this.hidetimeout!=null){
    $clear(this.hidetimeout);
  }
  var key=$(this.name+this.input.id);
  var ns=this.numbers;
  var format=this.input.getAttribute("pa_keyboard");
  if(format!=null&&"random".equalsIgnoreCase(format)){
    ns=this.random(ns);
    if($defined(key)){
      /*
       * ex-pihanqing新增
       * 校准软键盘位置 start
       */
      var event=new Element(this.input);
	  var coord=event.getCoordinates();
	  var x=(coord.right-coord.width)+"px";
	  var y=(coord.top+coord.height+2)+"px";
	  key.style.top = y;
      /*
       * 校准软键盘位置 end
       */
    	
      key.style.display="";
      if(!this.name.equals(key.className)){
        key.addClass(this.name);
      }

    }else {
      var event=new Element(this.input);
      var coord=event.getCoordinates();
      var x=(coord.right-coord.width)+"px";
      var y=(coord.top+coord.height+2)+"px";
      key=new Element("div",{styles:{left:x,top:y,position:"absolute",zIndex:1000}}).addClass(this.name).injectInside(document.body);
      key.id=this.name+this.input.id;
      key.addClass(this.name);
    }

    this.object=key;
    var html="<div class=\"caption\"><button onclick=\"return $keyboard.switchkey();\"></button></div><div class=\"display\"><table><tr>";
    for(var i=0;i<ns.length;i++){
      html+="<td onclick=\"return $keyboard.select(this);\">"+ns[i]+"</td>";
    }
    html+="</tr><tr><td onclick=\"return $keyboard.select(this);\">q</td><td onclick=\"return $keyboard.select(this);\">w</td><td onclick=\"return $keyboard.select(this);\">e</td><td onclick=\"return $keyboard.select(this);\">r</td><td onclick=\"return $keyboard.select(this);\">t</td><td onclick=\"return $keyboard.select(this);\">y</td><td onclick=\"return $keyboard.select(this);\">u</td><td onclick=\"return $keyboard.select(this);\">i</td><td onclick=\"return $keyboard.select(this);\">o</td><td onclick=\"return $keyboard.select(this);\">p</td></tr><tr><td onclick=\"return $keyboard.select(this);\">a</td><td onclick=\"return $keyboard.select(this);\">s</td><td onclick=\"return $keyboard.select(this);\">d</td><td onclick=\"return $keyboard.select(this);\">f</td><td onclick=\"return $keyboard.select(this);\">g</td><td onclick=\"return $keyboard.select(this);\">h</td><td onclick=\"return $keyboard.select(this);\">j</td><td onclick=\"return $keyboard.select(this);\">k</td><td onclick=\"return $keyboard.select(this);\">l</td><td onclick=\"return $keyboard.del();\" class=\"delete\"></td></tr><tr><td onclick=\"return $keyboard.select(this);\">z</td><td onclick=\"return $keyboard.select(this);\">x</td><td onclick=\"return $keyboard.select(this);\">c</td><td onclick=\"return $keyboard.select(this);\">v</td><td onclick=\"return $keyboard.select(this);\">b</td><td onclick=\"return $keyboard.select(this);\">n</td><td onclick=\"return $keyboard.select(this);\">m</td><td onclick=\"return $keyboard.switchover(this);\" class=\"switch\" colspan=\"3\"></td></tr></table></div>";
    key.innerHTML=html;
    return ;
  }

  if($defined(key)){
  	/*
     * ex-pihanqing新增
     * 校准软键盘位置 start
     */
  	var event=new Element(this.input);
	var coord=event.getCoordinates();
	var x=(coord.right-coord.width)+"px";
	var y=(coord.top+coord.height+2)+"px";
	key.style.top = y;
  	/*
     * 校准软键盘位置 end
     */
  	
    key.style.display="";
    this.object=key;
    if(this.name.equals(key.className)){
      return ;
    }

  }else {
    var event=new Element(this.input);
    var coord=event.getCoordinates();
    var x=(coord.right-coord.width)+"px";
    var y=(coord.top+coord.height+2)+"px";
    key=new Element("div",{styles:{left:x,top:y,position:"absolute",zIndex:1000}}).addClass(this.name).injectInside(document.body);
    key.id=this.name+this.input.id;
    this.object=key;
  }

  key.addClass(this.name);
  var html="<div class=\"caption\"><button onclick=\"return $keyboard.switchkey();\"></button></div><div class=\"display\"><table><tr>";
  for(var i=0;i<ns.length;i++){
    html+="<td onclick=\"return $keyboard.select(this);\">"+ns[i]+"</td>";
  }
  html+="</tr><tr><td onclick=\"return $keyboard.select(this);\">q</td><td onclick=\"return $keyboard.select(this);\">w</td><td onclick=\"return $keyboard.select(this);\">e</td><td onclick=\"return $keyboard.select(this);\">r</td><td onclick=\"return $keyboard.select(this);\">t</td><td onclick=\"return $keyboard.select(this);\">y</td><td onclick=\"return $keyboard.select(this);\">u</td><td onclick=\"return $keyboard.select(this);\">i</td><td onclick=\"return $keyboard.select(this);\">o</td><td onclick=\"return $keyboard.select(this);\">p</td></tr><tr><td onclick=\"return $keyboard.select(this);\">a</td><td onclick=\"return $keyboard.select(this);\">s</td><td onclick=\"return $keyboard.select(this);\">d</td><td onclick=\"return $keyboard.select(this);\">f</td><td onclick=\"return $keyboard.select(this);\">g</td><td onclick=\"return $keyboard.select(this);\">h</td><td onclick=\"return $keyboard.select(this);\">j</td><td onclick=\"return $keyboard.select(this);\">k</td><td onclick=\"return $keyboard.select(this);\">l</td><td onclick=\"return $keyboard.del();\" class=\"delete\"></td></tr><tr><td onclick=\"return $keyboard.select(this);\">z</td><td onclick=\"return $keyboard.select(this);\">x</td><td onclick=\"return $keyboard.select(this);\">c</td><td onclick=\"return $keyboard.select(this);\">v</td><td onclick=\"return $keyboard.select(this);\">b</td><td onclick=\"return $keyboard.select(this);\">n</td><td onclick=\"return $keyboard.select(this);\">m</td><td onclick=\"return $keyboard.switchover(this);\" class=\"switch\" colspan=\"3\"></td></tr></table></div>";
  key.innerHTML=html;

};

$keyboard.switchover=function(el){
  var table=$parent(el,"table");
  var trs=table.rows;
  for(var i=0;i<trs.length;i++){
    var tr=trs[i];
    for(var j=0;j<tr.cells.length;j++){
      if(this.lowercase){
        tr.cells[j].innerHTML=tr.cells[j].innerHTML.toUpperCase();
      }else {
        tr.cells[j].innerHTML=tr.cells[j].innerHTML.toLowerCase();
      }
    }
  }

  if(this.lowercase){
    this.lowercase=false;
  }else {
    this.lowercase=true;
  }

};

$keyboard.select=function(el){
  this.input.value+=el.innerHTML;
};

$keyboard.switchkey=function(){
  this.disabled=true;
  this.input.readOnly=false;
  this.input.focus();
  this.hidetimeout=window.setTimeout("$keyboard.hidden();",100);
  return false;
};

$keyboard.del=function(){
  this.selected=true;
  var v=this.input.value;
  var len=v.length;
  if(len>0){
    this.input.value=v.substr(0,len-1);
  }
};

$keyboard.remove=function(e){
  var event=new Event(e);
  
  /*
   * ex-pihanqing新增
   * 软键盘点击时触发校验事件
   */	
  /*
  try{
  
	if($defined(event.target.tagName)&&"td".equalsIgnoreCase(event.target.tagName)){
		var nodevalue = event.target.innerHTML;
		var patn = /^[0-9a-zA-Z]{1}$/; 
		if(patn.test(nodevalue)) {
			showMyStatus.call(this.input);
			if("run"==document.getElementById('flagKeyboard').value && "v_password"==this.input.id){
				validateChar();
			}
		}
	}
	
  }
  catch(e){
  }	
  */

  if($defined(event.target.tagName)&&"input".equalsIgnoreCase(event.target.tagName)){
    if(event.target==this.input){
      return ;
    }
  }

  if(this.parent(event.target)==this.object){
    return ;
  }
  
  /*
   * ex-pihanqing新增
   * 软键盘关闭时触发校验事件
   */	
  try{	
    lostFocus.call(this.input);
  }
  catch(e){
  }

  this.hidetimeout=window.setTimeout("$keyboard.hidden();",100);

};

$keyboard.parent=function(el){
  if(el==null){
    return null;
  }else {
    if(el.nodeType==1&&el.tagName.equalsIgnoreCase("div")&&this.name.equals(el.className)){
      return el;
    }else {
      return this.parent(el.parentNode);
    }
  }
};

$keyboard.random=function(a){
  var randomNum;
  var times=a.length;
  for(var i=0;i<times;i++){
    randomNum=parseInt(Math.random()*times);
    var tmp=a[0];
    a[0]=a[randomNum];
    a[randomNum]=tmp;
  }
  return a;
};
