
function closeOpt(key,evt) {
	if(evt.keyCode==9) {
		$(key).style.display='none';
	}
}

function inputKeyDown(event) {
	if(event.keyCode == 13){
		doane(event);
	}
}
//定义变量

function sAutoPlace(objName, showID, ulID, valID, pidID, func) {
	this.items = [];
	this.showObj = $(showID);
	this.ulObj = $(ulID);
	this.valObj = $(valID);
	this.salert = $(valID+'_alert');
	this.pidObj = $(pidID);
	if (!this.showObj) return;
	this.obj = objName;
	this.sVal = null;
	this.currently = -1;
	this.func = isUndefined(func) ? '': func;
	this.isready = false;
	this.Num = 0;
	this.createXMLHttpRequest = function() {
			var request = false;
			if(window.XMLHttpRequest) {
				request = new XMLHttpRequest();
				if(request.overrideMimeType) {
					request.overrideMimeType('text/xml');
				}
			} else if(window.ActiveXObject) {
				var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
				for(var i=0; i<versions.length; i++) {
					try {
						request = new ActiveXObject(versions[i]);
						if(request) {
							return request;
						}
					} catch(e) {}
				}
			}
			return request;
		};
	this.XMLHttpRequest = this.createXMLHttpRequest();
	return this;
};

sAutoPlace.prototype.get = function(p) {	
	with (this) {
		var instance = eval(obj);
		XMLHttpRequest.abort();
		XMLHttpRequest.onreadystatechange = function () { instance.processHandle(); }
		if(window.XMLHttpRequest) {
			XMLHttpRequest.open('GET', "xml.php?ac=search&p="+p);
			XMLHttpRequest.send(null);
		} else {
			XMLHttpRequest.open("GET", "xml.php?ac=search&p="+p, true);
			XMLHttpRequest.send();
		}
	}
};
	
sAutoPlace.prototype.processHandle = function() {
	with (this) {
		var instance = eval(obj);
		if(XMLHttpRequest.readyState == 4 && XMLHttpRequest.status == 200) {
			instance.creatMenu(XMLHttpRequest.responseXML.lastChild.firstChild.nodeValue);
		}
	}
};

sAutoPlace.prototype.place_search = function(searchVal, event) 
{
	with(this) {
		var instance = eval(obj);
		salert.style.display = 'none';
		if ( instance.check(searchVal) ) {
			isready = false;
			showObj.style.display = "none";
			searchVal = addslashes(searchVal);
			sVal = searchVal;
			instance.get(searchVal);
		} else {
			if ( searchVal.length == 0 )	{				
				showObj.style.display = "none";
				salert.style.display = 'block';
			} else if (isready){
				instance.handleEvent(searchVal, event);
			}
		}
	}
};
sAutoPlace.prototype.check = function(searchVal)
{
	with(this) {
		if (searchVal.length < 2 || searchVal == sVal || searchVal.slice(0,4) == '输入地址') {
			return false;
		}
		if ( sVal ) {
			var length = searchVal.length>sVal.length?searchVal.length:sVal.length
			if (Num && Num<50 && sVal.slice(0,length) == searchVal.slice(0,length) )
				return false;
		}
		return true;
	}
};
sAutoPlace.prototype.creatMenu = function(pstr) 
{
	with(this) {
	 	var instance = eval(obj);
		var parr = eval('(' + pstr + ')');
		if (!parr[0][0]) {
			ulObj.innerHTML = '';
			var liObj = document.createElement("li");
			liObj.innerHTML = '<a href="addnew.php?name='+sVal+'">还没有 "<b>'+sVal+' </b>"，添加到自由行</a>';
			ulObj.appendChild(liObj);
			showObj.style.display = "";
			return;
		}
		Num = parr[0][0];
		items = [];
		for (var i=0; i < parr[0][0] && i <18; i++) {
			items.push([parr[1][i][0],parr[1][i][1],parr[1][i][4],parr[1][i][2]]);
		}
		isready = true;
		instance.handleEvent(valObj.value);
	}
};
sAutoPlace.prototype.doClick = function(vObj) {
	with(this) {
		if(typeof vObj == 'undefined') return false; 
		var val = valObj.value;
		var instance = eval(obj);
		var placearr = vObj.place;
		valObj.value = placearr[1];
		if(func) { func(placearr); }
		if (pidObj) { pidObj.value = placearr[0]; }
		showObj.style.display = "none";
	}
};
//
sAutoPlace.prototype.directionKeyDown = function(event) {
	with(this) {
		var e = event.keyCode ? event.keyCode : event.which;
		var allChild = ulObj.childNodes.length;

		if(e == 40) {//向下按键
			if(currently+1 >= allChild) currently = allChild - 2;
			currently++;
			if(currently != 0) showObj.childNodes[0].scrollTop += 16;//如果不是0 则向下滚动
			ulObj.childNodes[currently].childNodes[0].style.cssText = "background: #2782D6; color: #FFF; text-decoration: none;";
		} else if(e == 38) {
			if(currently - 1 <= -1) currently = 1;
			currently--;
			showObj.childNodes[0].scrollTop -= 16;
			ulObj.childNodes[currently].childNodes[0].style.cssText = "background: #2782D6; color: #FFF; text-decoration: none;";
		} else if(e == 13) {
			var instance = eval(obj);
			instance.doClick(ulObj.childNodes[currently]);
		}
		
	}
};
sAutoPlace.prototype.append = function(item, filtrate) {//注入查询词
	with(this) {
		var instance = eval(obj);
	 	var liObj = document.createElement("li");
		liObj.onclick = function(){instance.doClick(this)};//define click
		liObj.place = item;
		item = item[2] + "->" +item[1] + "<span>(" + item[3] + ")</span>";
		if(filtrate) {
			var reg  = new RegExp("(" + sVal + ")","ig");//定义正则语句
			if(sVal) liObj.innerHTML = '<a href="javascript:;">' + item.replace(reg , "<strong>$1</strong>") + '</a>';
		} else {
			liObj.innerHTML = '<a href="javascript:;">' + item + '</a>';
		}
		ulObj.appendChild(liObj);
	}
};
sAutoPlace.prototype.handleEvent = function(searchVal, event) {
	with(this) {
		var hidden = true;
		var strArr = new Array();
		var e = isUndefined(event) ? 0 : (event.keyCode ? event.keyCode : event.which);
		ulObj.innerHTML = "";
		var instance = eval(obj);
		if(searchVal != "") {
			showObj.style.display = "block";
			searchVal = addslashes(searchVal);
			sVal = searchVal;
			var reg = new RegExp(searchVal, "ig");
			var itemstr = '';
			for(var i = 0; i < items.length; i++) {
				var itemstr = items[i].join(',');
				if(itemstr.match(reg)) {
					instance.append(items[i], 1);
					hidden = false;
				}
			}
			var liObj = document.createElement("li");
			liObj.innerHTML = '<a href="addnew.php?name='+searchVal+'">还没有 "<b>'+searchVal+' </b>"，添加到自由行</a>';
			ulObj.appendChild(liObj);
		}
		if(e == 38 || e == 40 || e == 13) {
			instance.directionKeyDown(event);
		}
		if ( $('noval') ) {
			$('noval').innerHTML = "<a href='addnew.php?key="+searchVal+"' target='_blank'>"+searchVal+"</a>";
		}
	}
};
function addslashes(str) {
	return preg_replace(['\\\\', '\\\'', '\\\/', '\\\(', '\\\)', '\\\[', '\\\]', '\\\{', '\\\}', '\\\^', '\\\$', '\\\?', '\\\.', '\\\*', '\\\+', '\\\|'], ['\\\\', '\\\'', '\\/', '\\(', '\\)', '\\[', '\\]', '\\{', '\\}', '\\^', '\\$', '\\?', '\\.', '\\*', '\\+', '\\|'], str);
};
function preg_replace(search, replace, str) {
	var len = search.length;
	for(var i = 0; i < len; i++) {
		re = new RegExp(search[i], "ig");
		str = str.replace(re, typeof replace == 'string' ? replace : (replace[i] ? replace[i] : replace[0]));
	}
	return str;
};
