﻿
var DH_Title = null;                    //对象数组，对象有三个属性,Field对应数据库字段名 Name表格标题行显示的中文名 IsShow是否显示
var DH_Control = null;                  //input控件
var DH_PostObj = null;                  //传到后台的参数
var DH_KeyStr = null;                   //按键值
var DH_CallBack = null;                 //回调函数，返回选择的对象
var DH_SendPage = "AjaxMethod.aspx";    //后台页面
var DH_LoadStr = "数据加载中...";       //数据载入时显示的html代码
var DH_Height = 300;                    //div高度

var DH_TitleBackground = "#51ADE6";     //标题行背景色

var DH_Data = null;                     //post返回的数据
var DH_Index = -1;                      //当前索引
var DH_MaxIndex = null;                 //最大索引
var DH_Div = null;                      //div层
var DH_DivTr = null;                    //层里表格下的所有行

function DH_Show()
{
    if(DH_KeyStr != 38 && DH_KeyStr != 40 && DH_KeyStr != 13 && DH_KeyStr != null)
    {
        if($("#hide_div").length < 1)  //层不存在则插入
            $("body").append("<div style=\"position:absolute;height:" + DH_Height + "px;overflow-y:auto;border:solid 2px #95B7F3;display: inline;\" id=\"hide_div\" ></div>");
        DH_Div = $("#hide_div");  
        DH_Div.empty();                //清空层 
        if(DH_PostObj != null && DH_Control != null)  
        {            
        	DH_Div.css("top", getAbsoluteTop(DH_Control) + DH_Control.offsetHeight + 2 ); //设置层的top left属性
		    DH_Div.css("left", getAbsoluteLeft(DH_Control) );
	        DH_Div.html(DH_LoadStr);                                                      //填入数据载入时显示的html
	        $.post(DH_SendPage ,DH_PostObj ,function(m){	                              //将准备好的参数post到后台面页，执行成功调用匿名函数
                eval(m);                                                                  //服务器返回的是一条javascript语句，这里执行它
                DH_Data = renObj;                                                         //将值赋给全局变量DH_Data
                DH_Div.html(JsonToTable());                                               //将DH_Data数据转换成table
                DH_Div.css("display","block");                                            //设置div的属性为显示
                DH_DivTr = DH_Div.find("tr");                                             //获取div下面的所有tr元素存入DH_DivTr
                DH_MaxIndex = DH_DivTr.length - 1;
                
                if(DH_MaxIndex > 0 )
                {
                    DH_Index = 1;
                    DH_DivTr.get(1).style.backgroundColor="#95B7F3";
                    DH_DivTr.get(1).style.color = "#0033FF";                   
                }
                else
                {
                    DH_Div.css("display","none");
                }
	        }); 
	    }
	    else 
	    {
	        DH_Div.css("display","none");
	    }
	} 
	else
	{
	    if (DH_Index == -1)
	        return;
	        
         if(DH_Div.css("display")=="block")  
         {             
             if(DH_KeyStr == 13) //回车
             {
                 if(DH_CallBack != null)
                    DH_CallBack(DH_Data[DH_Index - 1]);                 
		         DH_Div.css("display","none");
		         DH_Index = -1 ;
             }
             else
             {   
                 if(DH_Index == -1)
                    return
                 
                 DH_DivTr.get(DH_Index).style.backgroundColor="";
                 DH_DivTr.get(DH_Index).style.color = "";
	             //按下方向键
	             if(DH_KeyStr == 40)
	             {   
	                 DH_Index ++; 	             
	             }
	             //按上方向键
	             else if(DH_KeyStr==38)
	             {   
	                 DH_Index --; 
	             }
	             if(DH_Index == 0)
	                 DH_Index = DH_MaxIndex ;
	             if(DH_Index > DH_MaxIndex)
	                 DH_Index = 1;	             
	             DH_DivTr.get(DH_Index).style.backgroundColor="#95B7F3";
	             DH_DivTr.get(DH_Index).style.color = "#0033FF";
	             //控制滚动条相关
	             var div = DH_Div.get(0);
	             var tr = DH_DivTr.get(DH_Index);  
	             var scrollAreaMin = div.scrollTop;	            
	             var scrollAreaMax = div.scrollTop + div.offsetHeight;
	             if(tr.offsetTop - tr.offsetHeight < scrollAreaMin )
	                div.scrollTop = tr.offsetTop - DH_DivTr.get(0).offsetHeight;
	             if(tr.offsetTop + tr.offsetHeight > scrollAreaMax)
	                div.scrollTop = tr.offsetTop + tr.offsetHeight - div.offsetHeight;
	                
            }
	    }
	}
}

    //将返回的数据转换成table
    function JsonToTable()
    {
        var str = "<table>"        
        str += "<tr style=\"position: relative;top: expression(this.offsetParent.scrollTop);z-index: 10;background-color: " + DH_TitleBackground + ";\">"; 
        var temp = new Array();     
        for(var i = 0;i < DH_Title.length ; i++)
        {
            if( DH_Title[i].IsShow == 1 )
            {
                str += "<td>" + DH_Title[i].Name + "</td>";
                temp.push(DH_Title[i].Field);
            }
        }
        str += "</tr>";
        for(var i = 0;i< DH_Data.length ; i++)
        {
            str += "<tr onclick=\"DH_click(" + (i + 1) + ")\" ondblclick=\"DH_dbclick(" + i + ")\" >";
            for(var j = 0;j < temp.length ; j++)
            {
                str += "<td>" + DH_Data[i][temp[j]] + "</td>";
            }
            str += "</tr>"
        }            
        str += "</table>";

        return str;
    }
    //行单击
    function DH_click(i)
    {        
        DH_DivTr.get(DH_Index).style.backgroundColor="";
        DH_DivTr.get(DH_Index).style.color = "";
        DH_DivTr.get(i).style.backgroundColor = "#95B7F3";
        DH_DivTr.get(i).style.color = "#0033FF";
        DH_Index = i;
    }
    //半双击
    function DH_dbclick(i)
    {
	    DH_Div.css("display","none");
    	DH_CallBack(DH_Data[i]);
    	DH_Index = -1 ;
    }
    
    function getAbsoluteLeft(ob)
    {
        var mendingLeft = ob.offsetLeft;
        var mendingOb=ob;
        while( mendingOb != null && mendingOb.offsetParent != null && mendingOb.offsetParent.tagName != "BODY" )
        {
            mendingLeft += mendingOb.offsetParent.offsetLeft;
            mendingOb = mendingOb.offsetParent;
        }
        return mendingLeft ;
    }
    function getAbsoluteTop(ob)
    {
        var mendingTop = ob.offsetTop;
        var mendingOb=ob;
        while( mendingOb != null && mendingOb.offsetParent != null && mendingOb.offsetParent.tagName != "BODY" )
        {
            mendingTop += mendingOb.offsetParent.offsetTop;
            mendingOb = mendingOb.offsetParent;
        }
        return mendingTop ;
    }