var MTOBJ = null;
function MTypeAhead(id, cityname) {
	this.m_objInput = "";
	this.m_objList = "";
	this.m_fi = 0;//初始化样式循环长度
	this.m_fii = 0;//初始化记录当前样式的变量
	this.id = id;
	this.cityname = cityname;
	this.elementId = "";
	this.exec();
	MTOBJ = this;
}

function m_$(){
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);

		if (arguments.length == 1) 
			return element;

		elements.push(element);
	}
	return elements;
}

MTypeAhead.prototype.exec = function() {
	var K = this;
	document.write("<div id=\"m_list\" ></div>");
	document.write("<style>#m_list{position:absolute;color:#004a80;padding-bottom:7px;display:none;background:url(../images/shadow.png) no-repeat right bottom;font-size:12px;font-weight:normal;} ");//写入隐藏DIV，用于显示快速搜索结果列表。
	document.write(" *html #m_list{ padding-bottom:4px;background:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale ,src=images/shadow.png); }");//写入隐藏DIV，用于显示快速搜索结果列表。
	document.write(".icont div { width:100%;text-indent:12px;text-decoration:underline;background-image:url(../images/dot2.gif);background-repeat:no-repeat;cursor:pointer;}   .m_sel{background-color:#dbe5ff;} ");
	document.write( ".icont{ position:relative;background:#fff;filter:Alpha(opacity=90);Opacity:0.9;margin-left:0;margin-top:1px;margin-right:4px;border: 1px solid #144387;}   </style>  ");//写入隐藏DIV，用于显示快速搜索结果列表。

	this.m_objInput = m_$(this.id); //设置文本框obj(textfield为初始化设置)
	this.m_objList = m_$("m_list");//设置默认下拉框obj
	this.m_objList.style.width = (this.m_objInput.offsetWidth-2) + "px";//兼容页面显示，将用于显示结果列表的宽度减少2像素，可自行根据页面设置
	this.m_objInput.onkeyup = function (F) {
		K.m_getFocal(F, K);//文本框得到焦点
	}
	//this.m_objInput.onfocus = this.m_setFocal;//文本框按键抬起
	this.m_objInput.onblur=function(){//文本框失去焦点
		K.m_objList.style.display = "none";//设置m_list隐藏
	}
}

MTypeAhead.prototype.m_getFocal = function(evt, obj)//判断用户操作
{
	var K = obj;
	evt = evt || window.event;
	var keyCode = window.event ? evt.keyCode : evt.which;
	if (keyCode==40||keyCode==38)
	{//用户操作：下&上
	   if(keyCode==40){//下
			if (K.divType != K.m_objInput)
			{
				this.m_fii = 0;
				this.m_setDivstyle("40");
				K.divType = K.m_objInput;
			} else {
				this.m_setDivstyle("40");
			}
			
	   }else{//上
			if (K.divType != K.m_objInput)
			{
				this.m_fii = 0;
				this.m_setDivstyle("38");
				K.divType = K.m_objInput;
			} else {
				this.m_setDivstyle("38");
			}
		}
	} else if (keyCode==13)	{//用户操作：回车
	   m_mySearch(this.m_objInput.value);//执行总回调
	} else {
		K.m_setFocal(evt, K);
	}
	K.m_divPosition(evt, K);//控制DIV显示位置，默认设置跟随输入框
}
MTypeAhead.prototype.m_setFocal = function(evt, obj){
	var K = obj;
	if (MSISIsIE())
	{
		MTOBJ.elementId = evt.srcElement.id;
	} else if (MSISIsFirefox())
	{
		MTOBJ.elementId = evt.target.id
	}
	var strInput = K.m_objInput.value;
	if(strInput==""||strInput==null){
		K.m_objList.style.display = "none";
	}else{
		K.m_divPosition(evt, K);
		var m_ct_temp = m_$(this.cityname).value;
		var sis = new MSISSearch();
		var sp = new MSearchPointPara();
		//回调myfunc函数
		sis.setSISCallbackFunction(K.myfunc); 
		//调用封装类MSearchPointPara的citycode方法
		sp.setCitycode(m_ct_temp);
		//调用封装类MSearchPointPara的keyword方法
		sp.setKeyword(strInput);
		sis.typeAhead(sp);
	}
}
MTypeAhead.prototype.myfunc = function(data) {
	var K = MTOBJ;
	var resultstr = data.message;
	var mylist = resultstr.split(",");
	K.test(mylist);
}

MTypeAhead.prototype.test = function(mylist) {
	var K = this;
	var textlist = "";
	this.m_fi = mylist.length - 1;
	if(mylist.length == 1){
		this.m_objList.style.display = "none";
	}else{
		
		for(var i = 0; i < mylist.length -1; i++) {
			textlist = textlist + "<div onMouseOver=\"this.className='m_sel'\"  onMouseOut=\"this.className=''\" id='textfield_"+(i+1)+"' onmousedown=m_od('"+this.elementId+"','textfield_"+(i+1)+"')>"+ mylist[i]+"</div>";//将结果写入DIV
		}
		this.m_objList.style.display = "block";
		this.m_objList.innerHTML = "<div class=\"icont\">" +textlist+"</div>" ;
	}

}
MTypeAhead.prototype.m_setDivstyle = function(t){//设置用户选择样式
	var tempv = MTOBJ.m_objInput.value;
	for(var i=0 ; i<MTOBJ.m_fi ; i++){
		m_$("textfield_"+(i+1)).className = "";
	}
	if(t=="40"){
			if(MTOBJ.m_fii < MTOBJ.m_fi ){
				MTOBJ.m_fii = MTOBJ.m_fii + 1;
			}else{
				MTOBJ.m_fii = 1;
			}
			//alert(m_$("textfield_"+m_fii));
		m_$("textfield_"+MTOBJ.m_fii).className = "m_sel";//m_sel为初始化定义样式
		this.m_objInput.value = m_$("textfield_"+MTOBJ.m_fii).innerHTML;
	}else{//38
		//alert(MTOBJ.m_fii);
		if(MTOBJ.m_fii <= 1 ){
				MTOBJ.m_fii = MTOBJ.m_fi;
			}else{
				MTOBJ.m_fii = MTOBJ.m_fii - 1;
		}
		m_$("textfield_"+MTOBJ.m_fii).className = "m_sel";
		this.m_objInput.value = m_$("textfield_"+MTOBJ.m_fii).innerHTML;
	}
}

function m_od(elementId, id){//用户通过鼠标直接选中结果
	m_$(elementId).value = m_$(id).innerHTML;
	m_mySearch(m_$(id).innerHTML);
}

function m_mySearch(v){//设置一个统一的方法，用户可以在此对接自己的程序
	//alert("搜索关键字："+v);
}
MTypeAhead.prototype.m_lTrim = function(str)//ajax得到的结果有时会存在空格，该方法为删除字符串左侧空格
{
    if (str.charAt(0) == " ")
    {
		//如果字串左边第一个字符为空格
		str = str.slice(1);//将空格从字串中去掉
		//这一句也可改成 str = str.substring(1, str.length);
		str = this.m_lTrim(str);    //递归调用
    }
    return str;
}
MTypeAhead.prototype.m_divPosition = function(evt, obj)//定义div显示位置为跟随输入框
{
	var e = obj.m_objInput;
	var ie = (document.all)? true:false
	//定义列表区在不同浏览器中的位置
	if (ie)
	{
	   var top = 0;
	   var left = -1;
	}
	else
	{
	   var top = 3;
	   var left = 1;
	}
	while (e.offsetParent)
	{
	   left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
	   top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
	   e = e.offsetParent;
	}
	left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
	top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
	obj.m_objList.style.top = (top + obj.m_objInput.clientHeight) + "px";
	obj.m_objList.style.left = left + "px"; 
	obj.m_objList.style.width= obj.m_objInput.clientWidth+ 6 + "px";
}
Number.prototype.NaN0 = function()
{
	return isNaN(this)?0:this;
}