﻿var m_aryToSet;
var m_xmlDoc;
//自动补全的方法,检索框方法入口
function AutoComplete(txt,strSql,strResId,aryToShow,aryToSet){ 
    try{
        m_aryToSet = aryToSet;       
       
        //alert(strSql); 
        //按下ESC键时，隐藏下拉框  
        var myEvent = event || window.event;  //捕捉各种事件   myEvent
        var keyCode = myEvent.keyCode;
        if(keyCode == 27 || keyCode == 13 ){
            ClearDivs(); 
            document.getElementById("autoBox").style.display = "none";
            document.getElementById("DivShim").style.display = "none";
        }else{
            if(keyCode == 38 || keyCode == 40){
                return false;
            }else{
                var xmlDoc = Getrows(strSql,strResId);          //得到xml文档 
                var xmlNodlength = F3GetXmlDocLength(xmlDoc, "F3AJAX_DATA");
                if(F3ParseInt(xmlNodlength) > 0){
                    DivSetVisible(true);
                    ClearDivs();  
                    m_xmlDoc = xmlDoc; 
                    Setdivs(xmlDoc,txt.id,aryToShow,aryToSet,xmlDoc); 
                    SetOffsets(txt.id);
                }else{
                    DivSetVisible(false);
                }
            }
        }                                   
    }catch(ex){
        return false;
    }  
}

//使用iframe 来放div,为了遮盖住下拉列表
function DivSetVisible(state){
    var DivRef = document.getElementById('autoBox');
    var IfrRef = document.getElementById('DivShim');//div 的id为 DivShim
    if(state){ 
        IfrRef.style.top = DivRef.style.top;
        IfrRef.style.left = DivRef.style.left;       
        IfrRef.style.width = DivRef.offsetWidth;
        IfrRef.style.height = DivRef.offsetHeight;       
        IfrRef.style.zIndex = DivRef.style.zIndex - 1;
        DivRef.style.display = "block";     
        IfrRef.style.display = "block";   
    }else{
        DivRef.style.display = "none";
        IfrRef.style.display = "none";
    }
}

//清除生成的tr
function ClearDivs(){
	try{
		var completeDiv=document.getElementById("autoBox");
		var completeBody = document.getElementById("autoBody");
		var completeFrm = document.getElementById("DivShim");
	    var ind=completeBody.childNodes.length;	   
	    for(var i=ind-1;i>=0;i--){	    
		    completeBody.removeChild(completeBody.childNodes[i]);
	    }
	    completeDiv.style.border="none";
	}catch(ex){
	    return false;
	}
}

//设置div和frm显示位置
function SetOffsets(txt){
    var completeDiv = document.getElementById("autoBox");
	var inputField = document.getElementById(txt);
	var left = GetOffset(inputField,"offsetLeft");
	var top = GetOffset(inputField,"offsetTop")+inputField.offsetHeight //文本框的height;
	completeDiv.style.width = "240px";
	completeDiv.style.border = "black 1px solid";
	completeDiv.style.left = left  + "px";
	completeDiv.style.top = top + "px";
    var IfrRef = document.getElementById('DivShim');   
    IfrRef.style.top = top + "px"; 
    IfrRef.style.left = left + "px";                                     
    IfrRef.style.width = completeDiv.offsetWidth;
    IfrRef.style.height = completeDiv.offsetHeight;       
    IfrRef.style.zIndex = completeDiv.style.zIndex - 1; 
    completeDiv.style.display = "block";     
    IfrRef.style.display = "block";   
}

//计算显示位置
// 会接受两个参数，一个参数是文本框对象，一个是offsetLeft参数，或者是offsetTop 参数，一个是文本框的左上角距离window(0,0)的x距离，一个是文本框左上角距离window(0,0)的y距离
function GetOffset(field,attr){
	var offset=0;
	while(field){
		offset += field[attr];
		field = field.offsetParent;
	}
	return offset;
}

//通过ajax 拿到需要的城市的列表的xml
function Getrows(strSql,strResId){
    try{      
        if(strSql && strResId){
            var xmlDoc = F3AjaxGetRowsBySql(strResId, strSql);    
            //alert(xmlDoc.documentElement.childNodes.length);    
            return xmlDoc;     
        }else{          
            return null;
        }               
    }catch(ex){
        return null;
    }
        //alert(F3XmlGetColValue(xmlDoc, 'C3_216256156406')); 指定列的值
}  

//给div中的各元素赋值
function Setdivs(xmlDoc,txt,aryToShow,aryToSet,xmlDoc){
    try{
        var rootNode = xmlDoc.documentElement;
        var completeDiv = document.getElementById("autoBox");     //找到检索数据显示的层
        completeDiv.style.backgroundColor = "#F1F4F7" ;
        var completeTable = document.getElementById('autoTable'); //找到检索数据显示的表
        var completeBody = document.getElementById("autoBody");  
        for(var i = 0;i < rootNode.childNodes.length; i++) {     //循环出所有行
            var sonNode = rootNode.childNodes[i];           //循环得到所有 row1,row2,row3.........各节点
            var row = document.createElement("tr");  
            if (i==0){
                row.style.backgroundColor = "#3A6EA5";
            } 
            row.onmouseover = function(){
                this.style.backgroundColor = "#3A6EA5";         
                this.style.cursor = "pointer" ;                
            };
            row.onmouseout = function(){
                this.style.backgroundColor = "#F1F4F7";         
                this.style.cursor = "default";
            };
            row.onclick = function(){
                CompleteField(this,aryToSet,xmlDoc);
            };
            for(var j = 0;j < sonNode.childNodes.length;j++){   //循环出所有列       
                var cellValue = sonNode.childNodes.item(j).text;
                var cellColName = sonNode.childNodes.item(j).nodeName;
                if (aryToShow.contains(cellColName)){
                    var cell = document.createElement("td"); 
                    var txtNode = document.createTextNode(cellValue);               
	                cell.appendChild(txtNode);  
                }
                row.appendChild(cell);                     //添加列到行                                      
            }                                       
            completeBody.appendChild(row);                 //将检索数据显示的表的tbody中。 
        }      
    }catch(ex){
        return null;
    }
}


document.onkeydown = function(){
    var divAuto = document.getElementById("autoBox");
    //alert(divAuto.style.display);
    var e1 = window.event || event ;
    var e2 = e1.keyCode;
    var index = document.getElementById("intIndex").value ;
    if (divAuto.style.display == "block" ){
        var aryRows = document.getElementById("autoTable").rows;
        var intCount = aryRows.length;
        ClearOtherBg();
        switch(e2){
            case 38://上
                index -- ;
                if(index < 0){
                    index = 0 ;
                }
                aryRows[index].style.backgroundColor = '#3a6ea5'; 
                document.getElementById("intIndex").value = index;
            break;
            case 40://下
                index ++ ;
                if(index>=intCount){
                    index = 0 ; 
                }
                aryRows[index].style.backgroundColor = '#3a6ea5'; 
                document.getElementById("intIndex").value = index;
            break;
            case 13: //回车
                CompleteField(aryRows[index],m_aryToSet,m_xmlDoc);
                document.getElementById("intIndex").value = 0 ;
            break;
        } 
     }
 }
 
function ClearOtherBg(){
    var aryRows = document.getElementById("autoTable").rows;
    var intCount = aryRows.length;
    for (var i = 0 ;i < intCount;i++){
        aryRows[i].style.backgroundColor = "#f1f4f7";
    }
}

//隐藏域赋值,要改进的地方
function CompleteField(row,aryToSet,xmlDoc){ 
    var rootNode = xmlDoc.documentElement;
    var strSelect1 = row.childNodes.item(0).innerText;
    var strSelect2 = row.childNodes.item(1).innerText;     
    for(var i = 0;i<rootNode.childNodes.length;i++){ //从f3client 传过来的xmlDoc文档,进行循环,找出用户选中的某条.
        var sonNode = rootNode.childNodes.item(i);
        var aryCols = new Array();
        for(var j = 0 ;j<sonNode.childNodes.length;j++){
            aryCols.push(sonNode.childNodes.item(j).text);    
        }
        if(aryCols.contains(strSelect1) && aryCols.contains(strSelect2)){ //在xmlDoc 中找到选中的哪一行,将这行中的数据赋值给表单元素(封装在二维数组中)
            for(var m = 0;m<sonNode.childNodes.length;m++){   //循环所有列,
                var strColName = sonNode.childNodes.item(m).nodeName; //列名
                var strColValue = sonNode.childNodes.item(m).text;   //值
                for(var n = 0;n < aryToSet.length;n++){
                    if (strColName == aryToSet[n][1]) {
                        document.getElementById(aryToSet[n][0]).value = strColValue ;
                    }                     
                }              
            }       
            break;           
        }else{
            continue; 
        }
    }
     DivSetVisible(false);
}

document.onclick = function(event){
    var event1 = window.event || event;
    var ele = event1.srcElement || event1.target;
    var calframe1 = document.getElementById("CalFrame");
    if(ele.id == "autoBox" ){    //|| ele.type=="text"   
        DivSetVisible(true);
    }else{
        DivSetVisible(false);
        if(calframe1){
            CancelCal();
        }
    }  
}



//给数组添加一个contains方法
Array.prototype.contains = function(obj) { 
    var i = this.length; 
    while (i--) { 
        if (this[i] === obj) { 
            return true; 
        } 
    } 
    return false; 
}

 





  
  
