﻿// JScript 文件
function SmartDataSelect_HideCityPanel(CID)
{
    var frame = document.getElementById("iframe_"+CID);
    var panel = document.getElementById("div_"+CID);
    frame.style.display = panel.style.display = "none";
}
function SmartDataSelect_DisplayCityPanel(CID,txtName,txtID,isControlColumn)
{
    var frame = document.getElementById("iframe_"+CID);
    var panel = document.getElementById("div_"+CID);
    var inputName = document.getElementById(txtName);
    var posInfo = SmartDataSelect_GetPosition(inputName);
    frame.style.display = "block";
    panel.style.display = "block";
    frame.style.posLeft = panel.style.posLeft = posInfo.left;
    frame.style.posTop = panel.style.posTop = posInfo.top + posInfo.height;

   
    if(posInfo.top + posInfo.height + panel.clientHeight > document.body.clientHeight)
    {
        frame.style.posTop = panel.style.posTop = posInfo.top - panel.clientHeight;
    }
    if(panel.style.posLeft + panel.clientWidth > document.body.clientWidth)
    {
        frame.style.posLeft = panel.style.posLeft = document.body.clientWidth - panel.clientWidth; 
    }
    SmartDataSelect_LoadSearchCity(CID,txtName,txtID,isControlColumn);
}
//获得控件的绝对坐标，和宽度。
function SmartDataSelect_GetPosition( e )
{
	l = e.offsetLeft;
	t = e.offsetTop;
	w = e.offsetWidth;
	h = e.offsetHeight;
	while( e=e.offsetParent )
	{
		if(e.nodeName == "FIELDSET")
		{
			l +=2;
			t +=2;
		}
		l += e.offsetLeft;
		t += e.offsetTop;
	}
	return {left:l,top:t,width:w,height:h};
}
//名称|拼音|ID
//var sCityList = "";
var forwardMark = ">";
var backMark = "<";
function SmartDataSelect_LoadSearchCity(CID,txtName,txtID,isControlColumn)
{    
    if(event.keyCode != 37 && event.keyCode != 38 && event.keyCode != 39 && event.keyCode != 40 && event.keyCode != 13 && event.keyCode != 27)
    {
        var inputName = document.getElementById(txtName);
        var inputID = document.getElementById(txtID);
        var panel = document.getElementById("div_"+CID);
        //获得数据源
        var souceFun = CID + "_ReturnDataSource()";
        //****************
        if(inputName.value.length > 0 && inputName.value != "请输入拼音首字母或汉字")
        {                
            var sTemp = eval(souceFun);
            var citys = sTemp.split("@");
            var str = "";
            for(var i=0;i<citys.length;i++)
            {
                //alert(citys[i].substr(0,citys[i].lastIndexOf("|")));
                if(citys[i].substr(0,citys[i].lastIndexOf("|")).toLowerCase().indexOf(inputName.value.replace(" ","").toLowerCase()) != -1)
                {
                    if(str != "")
                        str += "@";
                    str += citys[i];
                }
            }
            //如果没有匹配不改变以前的结果
            //if(str != "")
            //{
                panel.innerHTML = CreateInnerTable(CID,str,txtName,txtID,true,isControlColumn);
            //}
        }
        else
        {          
            //如果是清空cityName，同样清空cityID
            inputName.value = "";
            inputName.style.color="";
            inputID.value = "";
            panel.innerHTML = CreateInnerTable(CID,inputName.HotCityList,txtName,txtID,false,isControlColumn);        
        }
        SmartDataSelect_KeyUpDownHandle(CID);
    }    
}

function CreateInnerTable(CID,str,txtName,txtID,isSearch,isControlColumn)
{    
    var inputName = document.getElementById(txtName);
    var citys = str.split("@");
    var iIndex = 1;
    var tipMessage = "输拼音首字母或汉字";
    var tipSearch = "&nbsp;"
    if(isSearch)
    {
        tipMessage = inputName.value;
        tipSearch = "(拼音排序)";
    }
    var table = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"table-layout:fixed;width:100%;height:300px;\"><col width=\"99%\"/><col width=\"90px\"/><tr><td align=\"left\" height=\"24px\" class=\"CityListTitle\" nowrap>"+tipMessage+"</td><td class=\"CityListTitle\" nowrap>"+tipSearch+"</td></tr><tr><td colspan=\"2\" id=\""+CID+"_CityListCell\" valign=\"top\" height=\"250px\">";    
    if(str != "")
    {     
        //iIndex = parseInt(citys.length / 12);
        //if(citys.length % 12 != 0)
        //    iIndex++;     
        var sct;  
        var spellColDisplay = "block";
        table += "<table id=\""+CID+"_"+iIndex+"\" class=\"CityListPanel\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"table-layout:fixed;width:100%;display:block;\">";
        for(var i=1;i<=citys.length;i++)
        {
            if(i>12)
            {            
                if((i-1) % 12 == 0)
                {
                    iIndex++;
                    table += "</table>";
                    table += "<table id=\""+CID+"_"+iIndex+"\" class=\"CityListPanel\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"table-layout:fixed;width:100%;display:none;\">";
                }
            }
            sct = citys[i-1].split("|");
            if(isControlColumn)
                spellColDisplay = "none";
            table += "<tr id=\""+CID+"_"+sct[2]+"\" KeyClass=\"KeyMoveRow\" onclick=\"SmartDataSelect_InputCityInfo(this,'"+CID+"','"+txtName+"','"+txtID+"',true);\" onmouseover=\"SmartDataSelect_RowHover(this,'"+CID+"')\" onmouseout=\"SmartDataSelect_RowRestor(this,'"+CID+"')\" ><td nowrap align=\"left\" class=\"CityListCell\" DefaultClass=\"CityListCell\" HoverClass=\"CityListCellHover\">"+sct[0]+"</td><td nowrap style=\"display:"+spellColDisplay+"\" align=\"right\" class=\"CityListCell\" DefaultClass=\"CityListCell\" HoverClass=\"CityListCellHover\">"+sct[1].replace("㊣","'")+"</td></tr>";            
        }        
        table += "</table>";
    }
    var sPageLink = "&nbsp;";
    var sPageIndexClick="onclick=\"SmartDataSelect_PageIndexChange(this,'"+CID+"','"+txtName+"')\"";
    if(iIndex != 1)
    {
        sPageLink = "<table id='"+CID+"_PageIndex' class=\"CityListPage\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\"><tr>"
        sPageLink += "<td id='"+CID+"_Page_Back' style='display:none;'><a style=\"text-decoration:underline;color:#919191;cursor:hand;\" "+sPageIndexClick+">"+backMark+"</a></td>";
        for(var i=1;i<=iIndex;i++)
        {                        
            if(i<=5)
            {             
                if(i==1)
                {
                    sPageLink += "<td id='"+CID+"_Page_"+i+"' IsCurrentPage='true'><a "+sPageIndexClick+">"+i+"</a></td>";
                }
                else
                {
                    sPageLink += "<td id='"+CID+"_Page_"+i+"'><a style=\"text-decoration:underline;color:#919191;cursor:hand;\" "+sPageIndexClick+">"+i+"</a></td>";
                }
            }
            else
            {
                
                sPageLink += "<td id='"+CID+"_Page_"+i+"' style=\"display:none;\"><a style=\"text-decoration:underline;color:#919191;cursor:hand;\" "+sPageIndexClick+">"+i+"</a></td>";
                if(i==iIndex)
                    sPageLink += "<td id='"+CID+"_Page_Forward'><a style=\"text-decoration:underline;color:#919191;cursor:hand;\" "+sPageIndexClick+">"+forwardMark+"</a></td>";
            }
        }
        sPageLink += "</tr></table>"
    }
    table += "</td></tr><tr><td height=\"24px\" class=\"CityListFooter\" align=\"center\" colspan=\"2\">"+sPageLink+"</td></tr></table>";     
    return table;
}
//翻页事件
function SmartDataSelect_PageIndexChange(send,CID,txtName)
{        
    var pageIndexCells = document.getElementById(CID + "_PageIndex").getElementsByTagName("TD");
    var alink = null;
    //小于7的表示当前总页数未超过5页
    if(pageIndexCells.length <= 7)
    {
        for(var i=0;i<pageIndexCells.length;i++)
        {
            if(pageIndexCells[i].IsCurrentPage != null)
            {
                alink = pageIndexCells[i].getElementsByTagName("A")[0];  
                pageIndexCells[i].removeAttribute("IsCurrentPage");
                alink.style.textDecoration = "underline";
                alink.style.cursor = "hand";
                alink.style.color = "#919191";
                document.getElementById(pageIndexCells[i].id.replace("_Page","")).style.display = "none";
            }    
        }
        send.parentElement.setAttribute("IsCurrentPage","true");
        send.removeAttribute("style");
        document.getElementById(send.parentElement.id.replace("_Page","")).style.display = "block";
    }
    else
    {     
        //debugger;   
        var selectedPageIndex;
        var iMax = 0,iIndex = 0;
        for(var i=0;i<pageIndexCells.length;i++)
        {
            if(pageIndexCells[i].id != CID+"_Page_Forward" && pageIndexCells[i].id != CID+"_Page_Back")
            {
                iIndex = Number(pageIndexCells[i].id.replace(CID+"_Page_",""));
                if(iIndex > iMax)
                {
                    iMax = iIndex;
                }
                if(pageIndexCells[i].IsCurrentPage != null)
                {
                    selectedPageIndex = iIndex;
                }
            }   
        }
        var currentPageIndex = send.parentElement.id.replace(CID+"_Page_","");
        //对翻页按钮进行控制，不会出现类型转换无效的情况
        if(currentPageIndex == "Forward")
        {
            currentPageIndex = selectedPageIndex + 1;
        }
        else if(currentPageIndex == "Back")
        {
            currentPageIndex = selectedPageIndex - 1;
        }
        else
        {
            currentPageIndex = Number(currentPageIndex);
        }
        //控制翻页按钮显示
        if(currentPageIndex + 2 >= iMax)
        {
            document.getElementById(CID + "_Page_Forward").style.display = "none";
            document.getElementById(CID + "_Page_Back").style.display = "block";            
        }
        else if(currentPageIndex - 2 <= 1)
        {
            document.getElementById(CID + "_Page_Forward").style.display = "block";
            document.getElementById(CID + "_Page_Back").style.display = "none";
        }
        else
        {
            document.getElementById(CID + "_Page_Forward").style.display = "block";
            document.getElementById(CID + "_Page_Back").style.display = "block";
        }
        if(currentPageIndex + 2 > iMax)
        {
            for(var i=1;i<=iMax;i++)
            {
                document.getElementById(CID + "_Page_" + i).style.display = "none";
                if(i > iMax-5) 
                    document.getElementById(CID + "_Page_" + i).style.display = "block";
            }
        }
        else if(currentPageIndex - 2 < 1)
        {
            for(var i=1;i<=iMax;i++)
            {
                document.getElementById(CID + "_Page_" + i).style.display = "none";
                if(i <= 5) 
                    document.getElementById(CID + "_Page_" + i).style.display = "block";
            }
        }
        else
        {
            for(var i=1;i<=iMax;i++)
            {
                document.getElementById(CID + "_Page_" + i).style.display = "none";
                if(i <= currentPageIndex + 2 && i >= currentPageIndex-2) 
                    document.getElementById(CID + "_Page_" + i).style.display = "block";
            }
        }
        var cPage = document.getElementById(CID + "_Page_" + selectedPageIndex);
        alink = cPage.getElementsByTagName("A")[0];  
        cPage.removeAttribute("IsCurrentPage");
        alink.style.textDecoration = "underline";
        alink.style.cursor = "hand";
        alink.style.color = "#919191";
        document.getElementById(cPage.id.replace("_Page","")).style.display = "none";
        var sPage = document.getElementById(CID + "_Page_" + currentPageIndex);
        alink = sPage.getElementsByTagName("A")[0];  
        sPage.setAttribute("IsCurrentPage","true");
        alink.removeAttribute("style");
        document.getElementById(sPage.id.replace("_Page","")).style.display = "block";        
    }
    //翻页后焦点获得
    SmartDataSelect_KeyUpDownHandle(CID);
    //文本输入框获得焦点后把光标置在文字的最后面
    var inputNameObj = document.getElementById(txtName);
    inputNameObj.focus();
    var txt = inputNameObj.createTextRange();
    txt.collapse(false);
    txt.select();
}
function SmartDataSelect_RowHover(send,CID)
{
    for(var i=0;i<send.cells.length;i++)
    {
        send.cells[i].className = send.cells[i].HoverClass;
    }   
    var _CurrentHover = document.getElementById(CID + "_CurrentHoverIndex");
    _CurrentHover.value = send.sectionRowIndex;
}
function SmartDataSelect_RowRestor(send,CID)
{
    for(var i=0;i<send.cells.length;i++)
    {
        send.cells[i].className = send.cells[i].DefaultClass;
    }
    var _CurrentHover = document.getElementById(CID + "_CurrentHoverIndex");
    _CurrentHover.value = "";
}

//键盘操作
function SmartDataSelect_KeyUpDownHandle(CID)
{    
    //当前键盘移动到的行
    var _CurrentKeyBox = document.getElementById(CID + "_CurrentKeyIndex");
    var _CurrentHoverBox = document.getElementById(CID + "_CurrentHoverIndex");
    //记录当前键盘焦点行ID
    var _CurrentCityIDBox = document.getElementById(CID + "_CurrentCityID");
    if(_CurrentKeyBox != null)
    {
        _CurrentKeyIndex = Number(_CurrentKeyBox.value);        
        var list = document.getElementById(CID + "_CityListCell");
        var tables = list.getElementsByTagName("TABLE");
        for(var i=0;i<tables.length;i++)
        {
            if(tables[i].style.display == "block")
            {                
                for(var j=0;j<tables[i].rows.length;j++)
                {
                    tables[i].rows[j].className = "";
                    //鼠标
                    tables[i].rows[j].cells[0].className = tables[i].rows[j].cells[0].DefaultClass;
                    tables[i].rows[j].cells[1].className = tables[i].rows[j].cells[1].DefaultClass;
                }
                //键盘焦点
                if( tables[i].rows.length - 1 >= _CurrentKeyIndex)
                {
                    tables[i].rows[_CurrentKeyIndex].className = tables[i].rows[_CurrentKeyIndex].KeyClass;
                    //记录当前键盘焦点行
                    _CurrentCityIDBox.value = tables[i].rows[_CurrentKeyIndex].id;
                }
                else
                {
                    tables[i].rows[tables[i].rows.length - 1].className = tables[i].rows[tables[i].rows.length - 1].KeyClass;
                    //记录当前键盘焦点行
                    _CurrentCityIDBox.value = tables[i].rows[tables[i].rows.length - 1].id;
                    
                    _CurrentKeyBox.value = tables[i].rows.length - 1;
                }
                //鼠标焦点                
                if(_CurrentHoverBox != null)
                {
                    if(_CurrentHoverBox.value != "")
                    {
                        var _CurrentHoverIndex = Number(_CurrentHoverBox.value);
                        if( tables[i].rows.length - 1 >= _CurrentHoverIndex)
                        {
                            tables[i].rows[_CurrentHoverIndex].cells[0].className = tables[i].rows[_CurrentHoverIndex].cells[0].HoverClass;
                            tables[i].rows[_CurrentHoverIndex].cells[1].className = tables[i].rows[_CurrentHoverIndex].cells[1].HoverClass;
                        }
                    }
                }
            }
        }
    }
}

function SmartDataSelect_InputCityInfo(send,CID,txtName,txtID,isInput)
{    
    var inputName = document.getElementById(txtName);
    var inputID = document.getElementById(txtID);
    var sourceFun = CID + "_ReturnDataSource()";
    var sDataSource = "@" + eval(sourceFun);       
    if(isInput)
    {        
        if(inputName.value != "" )
        {      
            if(send == null)            {
                
                if(sDataSource.indexOf("@" + inputName.value + "|") == -1)
                {
                    inputID.value = "";
                }                
            }
            else
            {
                inputName.value = send.cells[0].innerText;
                inputID.value = send.id.replace(CID+"_","");
            }
        }
        else
        {
            inputName.value = send.cells[0].innerText;
            inputID.value = send.id.replace(CID+"_","");
        }               
    }
    else 
    {          
        if(inputName.value != "")
        {  
            if(sDataSource.indexOf("@" + inputName.value + "|") == -1)
            {
                inputID.value = "";
            }
            else if(send != null)
            {
                inputName.value = send.cells[0].innerText;
                inputID.value = send.id.replace(CID+"_","");                
            }            
        }
        else
        {
            inputName.style.color="#919191";
            inputName.value = "请输入拼音首字母或汉字";
        }
    }
    var dataControl = document.getElementById(CID);
    dataControl.SelectedDataName = inputName.value;
    dataControl.SelectedDataID = inputID.value;
    SmartDataSelect_HideCityPanel(CID);
    //初始化全局变量
    var fct = CID + "_InitValue()";
    eval(fct);
    var methodName = CID + "_OnTextChangedMethod()";
    methodName = eval(methodName);
    if(methodName != "")
    {
        eval(methodName);
    }
    inputName.blur();    
    //alert(inputID.value);
}

function SmartDataSelect_KeyFireHandle(CID,txtName,txtID)
{
    if(event.keyCode == 27)
    {
       SmartDataSelect_InputCityInfo(null,CID,txtName,txtID,false);
        SmartDataSelect_HideCityPanel(CID);
        
    }
    else if(event.keyCode == 38 || event.keyCode == 40)
    {
        //向上键
        var _CurrentKeyBox = document.getElementById(CID + "_CurrentKeyIndex");
        if(_CurrentKeyBox != null)
        {
            var _CurrentKeyIndex = Number(_CurrentKeyBox.value);
            if(event.keyCode == 38)
            {
                if(_CurrentKeyIndex != 0)
                {
                    _CurrentKeyBox.value = _CurrentKeyIndex - 1;            
                }
            }
            else
            {
                _CurrentKeyBox.value = _CurrentKeyIndex + 1;     
            }
            SmartDataSelect_KeyUpDownHandle(CID);
        }     
        event.returnValue = false;     
    }
    else if(event.keyCode == 37 || event.keyCode == 39)
    {
        //左键//右键
        if(document.getElementById(CID + "_PageIndex") != null)
        {
            var pageIndexCells = document.getElementById(CID + "_PageIndex").getElementsByTagName("TD");
            var currentPage;
            var send;
            for(var i=0;i<pageIndexCells.length;i++)
            {
                if(pageIndexCells[i].IsCurrentPage != null)
                {
                    currentPage = Number(pageIndexCells[i].id.replace(CID+"_Page_",""));
                }                
            }
            var changeIndex;
            if(event.keyCode == 37)
            {
                changeIndex = currentPage-1;
            }
            else
            {
                changeIndex = currentPage+1;
            }
            if(document.getElementById(CID + "_Page_" + changeIndex ) != null)
            {
                send = document.getElementById(CID + "_Page_" + changeIndex).getElementsByTagName("A")[0];
                SmartDataSelect_PageIndexChange(send,CID,txtName);
            }
        }      
        event.returnValue = false;  
    }    
    else if(event.keyCode == 13)
    {        
        SmartDataSelect_EnterInputValue(CID,txtName,txtID,true);
    }
}
//isInput一定需要getValue,不判断是否cityName为空的情况
function SmartDataSelect_EnterInputValue(CID,txtName,txtID,isInput)
{    
    var panel = document.getElementById("div_"+CID);
    if(panel.style.display == "block")
    {
        var _CurrentCityIDBox = document.getElementById(CID + "_CurrentCityID");
        if(_CurrentCityIDBox.value != "")
        {
            var _CurrentCityRow = document.getElementById(_CurrentCityIDBox.value);
            SmartDataSelect_InputCityInfo(_CurrentCityRow,CID,txtName,txtID,isInput);            
        }
        else
        {
            SmartDataSelect_InputCityInfo(null,CID,txtName,txtID,isInput);  
        }
    }
}
