var MapSearch = function(obj_name,input_id,callback,search_callback,overflow,float_div){
	this._obj_name = obj_name;		// 当前对象自身的名称
	this._results = [];				// 搜索结果集
	this._input_id = input_id;		// 输入控件名
	this._callback = callback;			// 结果记录点击事件
	this._searchcomplete_callback = search_callback;
	//
	this._searcher = null;			// 搜索器
	this._input_obj = null;
	this._last_v = '';
	this._suggest_div = null;
	this._iframe = null;
	this._suggest_empty_div = null;
	this._float_div_obj = null;
	if( overflow==true ){
		this._overflow = true;
	}
	else{
		this._overflow = false;
	}
	if( float_div ){
		this._float_div_obj = getElementById(float_div);
	}
	
	
	// 初始化
	this.initialize = function(){
		if( this._obj_name=="" ){
			alert("MapSearch：未指定当前对象自身的名称");
			return false;
		}
		if( !getElementById(this._input_id) ){
			alert("MapSearch：未指定搜索关键词输入空间ID");
			return false;
		}
		this._input_obj = getElementById(this._input_id);
		// 
		var searcher = new google.search.LocalSearch();
		searcher.setNoHtmlGeneration();
		searcher.setResultSetSize(GSearch.LARGE_RESULTSET);
		searcher.setCenterPoint("98074");
		searcher.setSearchCompleteCallback(this,this._searchcomplete_callback,[searcher]);
		this._searcher = searcher;
		// 处理命名
		var cmd = 'window.'+this._input_id+'_obj_name';
		cmd += '="'+this._obj_name+'";';
		eval(cmd);
		// 绑定
		// 创建对象
		if( this._suggest_div==null ){
			// 处理对象的位置
			this.create();
			this.bindAutoSearch();
		}
	};
	
	// 创建层
	this.create = function(){
		if( !getElementById(this._input_id+'_suggest_div') ){
			this._suggest_div = document.createElement("div");
			this._suggest_div.setAttribute('id',this._input_id+'_suggest_div');
			this._suggest_div.className = "fsg_nl";
			this._suggest_div.style.display	= 'none';
			this._suggest_div.style.width	= '210px';
			this._suggest_div.style.backgroundColor = '#eeeeee';
			this._suggest_div.style.fontSize	= "12px";
			this._iframe = document.createElement("iframe");
			this._iframe.setAttribute('id','map_frameShim');
			this._iframe.setAttribute("src","about:blank",0);
			this._iframe.style.width	= '100%'; 
			this._iframe.style.height	= '100%'; 
			this._iframe.style.top	= 0; 
			this._iframe.style.left	= 0; 
			this._iframe.style.position	= "absolute";
			this._iframe.frameBorder	= 0;
			this._iframe.scrolling		= "no";
			this._iframe.style.zIndex	= '-1'; 
			this._suggest_div.style.display	= 'none';
			if( this._overflow ){
				this._suggest_div.style.zIndex	= "9000";
				this._suggest_div.style.position = "absolute";
				this._suggest_div.style.clear = "both";
				this._input_obj.parentNode.appendChild(this._suggest_div);
				//this._show_parent.appendChild(this._suggest_div);
			}
			else{
				this._suggest_div.style.position	= "absolute";
				this._suggest_div.style.zIndex	= "9100";
				this._suggest_div.style.left	= '0px';
				this._suggest_div.style.top		= '0px';
				document.body.appendChild(this._suggest_div);
			}
			
		}
		if( !getElementById(this._input_id+'_suggest_empty_div') ){
			this._suggest_empty_div = document.createElement("div");
			this._suggest_empty_div.setAttribute('id',this._input_id+'_suggest_empty_div');
			this._suggest_empty_div.className		= "fsg_nl";
			this._suggest_empty_div.style.position	= "absolute";
			this._suggest_empty_div.style.zIndex	= "8999";
			this._suggest_empty_div.style.display	= 'none';
			this._suggest_empty_div.style.left		= '0px';
			this._suggest_empty_div.style.width		= '220px';
			this._suggest_empty_div.style.top		= '0px';
			this._suggest_empty_div.style.fontSize	= '12px';
			this._suggest_empty_div.style.paddingLeft = '7px';
			this._suggest_empty_div.style.backgroundColor = '#eeeeee';
			this._suggest_empty_div.style.color = '#666666';
			this._suggest_empty_div.innerHTML = '请输入查询内容';
			document.body.appendChild(this._suggest_empty_div);
		}
	};
	
	// 绑定自动搜索
	this.bindAutoSearch = function(){
		//this._input_obj.autoComplete = 'off';
		this._input_obj.setAttribute('autocomplete','off');
		// onKeyDown
		this._input_obj.onkeydown = function(evnt){
			var obj_name = '';
			var cmd = 'obj_name = window.'+this.id+'_obj_name;';
			eval(cmd);
			if( obj_name ){
				var evnt = (evnt) ? evnt : ((window.event) ? window.event : "")
				if ( !evnt ) {
					return false;
				}
				cmd = obj_name+'.inputOnkeydown(evnt);';
				eval(cmd);
			}
		};
		// onKeyUp
		this._input_obj.onkeyup = function(evnt){
			var obj_name = '';
			var cmd = 'obj_name = window.'+this.id+'_obj_name;';
			eval(cmd);
			if( obj_name ){
				var evnt = (evnt) ? evnt : ((window.event) ? window.event : "")
				if ( !evnt ) {
					return false;
				}
				cmd = obj_name+'.inputOnkeyup(evnt);';
				eval(cmd);
			}
		};
		// onFocus
		this._input_obj.onfocus = function(){
			var obj_name = '';
			var cmd = 'obj_name = window.'+this.id+'_obj_name;';
			eval(cmd);
			if( obj_name ){
				cmd = obj_name+'.inputOnfocus();';
				eval(cmd);
			}
		};
		//onBlur
		this._input_obj.onblur = function(){
			var obj_name = '';
			var cmd = 'obj_name = window.'+this.id+'_obj_name;';
			eval(cmd);
			if( obj_name ){
				cmd = obj_name+'.inputOnblur();';
				eval(cmd);
			}
		};
	};
	
	// 获得当前选中的条目
	this.getHotNum = function(){
		var obj;
		var num = 0;
		var hotnum = -1;
		while((obj = getElementById(this._input_id+"_suggest_"+num)) != null){
			if(obj.className == "sgt_on"){
				hotnum = num;
			}
			num++;
		}
		return {"hotnum":hotnum,"totalnum":num};
	};
	
	// 获得输入焦点
	this.inputOnfocus = function(){
		//this._input_obj.className = 'in2';
		getElementById(this._input_id).select();
		this.startSearch();
	};
	
	// 失去焦点
	this.inputOnblur = function(){
		//this._input_obj.className = 'in1';
		this._suggest_div.style.display = 'none';
		this._suggest_empty_div.style.display = "none";
	};
	
	// 键按下
	this.inputOnkeydown = function(evnt){
		// 屏蔽回车
		if (evnt.keyCode == 13){
			return false;
		}
		//LEFT
		if(evnt.keyCode == 37 && getElementById(this._input_id).value==""){
			return;
		}
		//RIGHT
		if(evnt.keyCode == 39 && getElementById(this._input_id).value==""){
			return;
		}
		var hotinfo = this.getHotNum();
		var hotnum = hotinfo.hotnum;
		var num = hotinfo.totalnum;
		var suggest_name = this._input_id+'_suggest';
		//DOWN
		if(evnt.keyCode == 40){
			if(getElementById(suggest_name+"_0") != null && this._suggest_div.style.display == "block"){
				if(hotnum == -1){
					getElementById(suggest_name+"_0").className = "sgt_on";
				}
				else{
					var nextnum = hotnum == num-1 ? 0 : hotnum+1;
					getElementById(suggest_name+"_"+hotnum).className = "sgt_of";
					getElementById(suggest_name+"_"+nextnum).className = "sgt_on";
				}
				return false;
			}
		}
		//UP
		if(evnt.keyCode == 38){
			if(getElementById(suggest_name+"_0") != null && this._suggest_div.style.display == "block"){
				if(hotnum == -1){
					getElementById(suggest_name+"_"+(num-1)).className = "sgt_on";
				}
				else{
					var prevnum = hotnum == 0 ? num-1 : hotnum-1;
					getElementById(suggest_name+"_"+hotnum).className = "sgt_of";
					getElementById(suggest_name+"_"+prevnum).className = "sgt_on";
				}
			}
		}
	};
	
	// 键盘起来
	this.inputOnkeyup = function(evnt){
		//ENTER
		if (evnt.keyCode == 13){
			this.getRecord();
		}
		if(evnt.keyCode == 38 || evnt.keyCode == 40){
		}
		else{
			if( evnt.keyCode!=13 ){
				//this.setRecordEmpty();
			}
			this.startSearch();
		}
	};
	
	//设置位置
	this.setPosition = function(){
		var r = this._input_obj.getBoundingClientRect();
		//var r = getpos(this._input_obj);
		var left= parseInt(r.left,10);
		var top	= parseInt(r.top,10)+this._input_obj.offsetHeight;
		//alert(left+' '+top);
		this._suggest_div.style.left = left+'px';
		this._suggest_div.style.top = top+'px';
	};
	
	// 设置浮动位置
	this.setOverflowPosition = function(){
		var r = this._input_obj.getBoundingClientRect();
		var float_r = this._float_div_obj.getBoundingClientRect();
		var left= parseInt(r.left-float_r.left,10);
		var top	= parseInt(r.top-float_r.top,10)+this._input_obj.offsetHeight;
		//alert(left+' '+top);
		this._suggest_div.style.left = left+'px';
		this._suggest_div.style.top = top+'px';
	};
	
	// 开始搜索
	this.startSearch = function(){
		var v = this._input_obj.value.trim();
		if( v=="" ){
			this._results = [];
			this._last_v = '';
			this.updateResults();
			return ;
		}
		if( v==this._last_v ){
			this.updateResults();
			return ;
		}
		if( v=="例如：北京王府井" ){
			return ;
		}
		this._last_v = v;
		this._results = [];
		this._searcher.execute(v);
	};
	
	// 处理搜索结果
	this.searchComplete = function(searcher) {
		// 如果有结果，处理
		if (searcher.results && searcher.results.length > 0) {
			// print the result titles
			this._results = searcher.results;
			this.updateResults();
		}
	}
	
	// 将_result中的数据更新到层中
	this.updateResults = function(){
		this._suggest_empty_div.style.display = 'none';
		var html = '';
		var len = this._results.length;
		var suggest = this._input_id+'_suggest';
		if( len>0 ){
			var title = '';
			for(var i=0;i<len;i++){
				html += '<div id="'+suggest+'_'+i+'" class="sgt_of" style="width:200px;font-size:12px;cursor:pointer;" onmouseover="'+this._obj_name+'.onmouseover(this);" onmousedown="'+this._obj_name+'.onmousedown(this);">'+this._results[i].title+'</div>';
			}
			this._suggest_div.innerHTML = html;
			this._iframe.style.height = 28*len;
			this._suggest_div.appendChild(this._iframe);
			this._suggest_div.style.display = 'none';
			if(getElementById(suggest+"_0") != null){
				getElementById(suggest+"_0").className = "sgt_on";
			}
			var obj = document.activeElement;
			if( obj.id==this._input_id ){
				if( this._overflow==false ){
					this.setPosition();
				}
				else{
					this.setOverflowPosition();
				}
				this._suggest_div.style.display = 'block';
			}
		}
		else{
			this._suggest_div.style.display = 'none';
		}
	};
	
	// 鼠标划过的样式
	this.onmouseover = function(thisobj){
		var arr		= thisobj.id.split('_');
		var thisnum	= arr[arr.length-1];
		var obj;
		var num		= 0;
		var suggest = this._input_id+'_suggest';
		while( (obj = getElementById(suggest+'_'+num)) != null){
			if(thisnum == num){
				obj.className = "sgt_on";
			}
			else{
				obj.className = "sgt_of";
			}
			num++;
		}
	};
	
	//鼠标按下
	this.onmousedown = function(thisobj){
		var arr = thisobj.id.split('_');
		var num = arr[arr.length-1];
		this.setRecord(num);
	};
	
	// 选择到数据
	this.getRecord = function(){
		var hotinfo = this.getHotNum();
		var hotnum = hotinfo.hotnum;
		var totalnum = hotinfo.totalnum;
		this.setRecord(hotnum);
	};
	
	// 设置数据值
	this.setRecord = function(index){
		if( this._results[index] ){
			this._input_obj.value = this._results[index].title.replace(/<[^>]*>/g,"");
			var s = this._results[index].lat+' '+this._results[index].lng;
			this._callback(this._results[index].title,this._results[index].lat,this._results[index].lng);
		}
		this._suggest_div.style.display = 'none';
		this._input_obj.blur();
		this.inputOnblur();
	};
	
	// 创建SearchForm
	this.createSearchForm = function(){
		var search_form = document.createElement("div");
		search_form.id = this._obj_name+"_search_form";
	};
	
	// 清空搜索结果
	this.clearResult = function(){
		this._results = [];
	};
	// 初始化
	this.initialize();
};