﻿// JScript 文件
function CitySmartDataSelect_HideCityPanel(CID)
{
	var frame = document.getElementById("iframe_"+CID);
	var panel = document.getElementById("div_"+CID);
	frame.style.display = panel.style.display = "none";
}
function CitySmartDataSelect_DisplayCityPanel(CID,txtName,txtID,isControlColumn)
{
	var frame = document.getElementById("iframe_"+CID);
	var panel = document.getElementById("div_"+CID);
	var inputName = document.getElementById(txtName);
	var posInfo = CitySmartDataSelect_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; 
	}
	CitySmartDataSelect_LoadSearchCity(CID,txtName,txtID,isControlColumn);
}
//获得控件的绝对坐标，和宽度。
function CitySmartDataSelect_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 CitySmartDataSelect_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);        
		}
		CitySmartDataSelect_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:150px;height:100%;\"><col width=\"99%\"/><tr><td align=\"left\" height=\"20px\" class=\"CityListTitle\" nowrap>"+tipMessage+"</td><td class=\"CityListTitle\" nowrap>"+tipSearch+"</td></tr><tr><td colspan=\"2\" id=\""+CID+"_CityListCell\" valign=\"top\" height=\"100%\">";    
	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>6)
			{
				if((i-1) % 6 == 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=\"CitySmartDataSelect_InputCityInfo(this,'"+CID+"','"+txtName+"','"+txtID+"',true);\" onmouseover=\"CitySmartDataSelect_RowHover(this,'"+CID+"')\" onmouseout=\"CitySmartDataSelect_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=\"CitySmartDataSelect_PageIndexChange(this,'"+CID+"','"+txtName+"')\"";
	if(iIndex != 1)
	{
		sPageLink = "<table id='"+CID+"_PageIndex' class=\"CityListPage\" cellpadding=\"3\" cellspacing=\"0\" border=\"0\"><tr valign=\"top\">"
		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=\"20px\" class=\"CityListFooter\" align=\"center\" colspan=\"2\">"+sPageLink+"</td></tr></table>";     
	return table;
}
//翻页事件
function CitySmartDataSelect_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";
	}
	//翻页后焦点获得
	CitySmartDataSelect_KeyUpDownHandle(CID);
	//文本输入框获得焦点后把光标置在文字的最后面
	var inputNameObj = document.getElementById(txtName);
	inputNameObj.focus();
	var txt = inputNameObj.createTextRange();
	txt.collapse(false);
	txt.select();
}
function CitySmartDataSelect_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 CitySmartDataSelect_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 CitySmartDataSelect_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 CitySmartDataSelect_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;
	CitySmartDataSelect_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 CitySmartDataSelect_KeyFireHandle(CID,txtName,txtID)
{
	if(event.keyCode == 27)
	{
	   CitySmartDataSelect_InputCityInfo(null,CID,txtName,txtID,false);
		CitySmartDataSelect_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;
			}
			CitySmartDataSelect_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];
				CitySmartDataSelect_PageIndexChange(send,CID,txtName);
			}
		}
		event.returnValue = false;  
	}
	else if(event.keyCode == 13)
	{
		CitySmartDataSelect_EnterInputValue(CID,txtName,txtID,true);
	}
}
//isInput一定需要getValue,不判断是否cityName为空的情况
function CitySmartDataSelect_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);
			CitySmartDataSelect_InputCityInfo(_CurrentCityRow,CID,txtName,txtID,isInput);
		}
		else
		{
			CitySmartDataSelect_InputCityInfo(null,CID,txtName,txtID,isInput);
		}
	}
}

