

(function(){

	var divContainer=document.createElement("div");
	divContainer.innerHTML="<div id=\"tuna_address\" style=\"display:none;position:absolute;z-index:120;overflow:hidden;\"><div id=\"address_warp\"><div id=\"address_message\">&nbsp;<\/div><div id=\"address_list\"><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><a class=\"a1\" href=\"###\"><span>&nbsp;<\/span>&nbsp;<\/a><\/div><div class=\"address_pagebreak\" id=\"address_p\"><a id=\"address_arrowl\" href=\"javascript:;\" name=\"p\">&lt;-<\/a><a id=\"address_p1\" href=\"javascript:;\" name=\"1\" class=\"address_current\">1<\/a><a id=\"address_p2\" href=\"javascript:;\" name=\"2\">2<\/a><a id=\"address_p3\" href=\"javascript:;\" name=\"3\">3<\/a><a id=\"address_p4\" href=\"javascript:;\" name=\"4\">4<\/a><a id=\"address_p5\" href=\"javascript:;\" name=\"5\">5<\/a><a id=\"address_arrowr\" href=\"javascript:;\" name=\"n\">-&gt;<\/a><\/div><\/div><\/div>";

	$(divContainer).prependTo('body');

	var $Panel_main=$$$$("tuna_address");

	var idr=$$$$("address_warp"),$Panel_titleMsg=$$$$('address_message'),$Panel_items=$$$$('address_list'),$Array_pageBreak=[$$$$('address_p'),$$$$('address_p1'),$$$$('address_p2'),$$$$('address_p3'),$$$$('address_p4'),$$$$('address_p5')],
	$Btn_pageUp=$$$$('address_arrowl'),$Btn_pageDown=$$$$('address_arrowr'),$Array_$Controls=$Panel_items.getElementsByTagName("a");

	function _m_init(){
		function _c_address(obj){

			var show=0,setPosFlag;
			var list,clock,lastselectindex=null,lastvalue,data=[];
			obj.setAttribute("autoComplete","off");

			$attachEvent(this,"beforeunload",function(){
				obj.setAttribute("autoComplete","on");
			});

			var _t_source=JcSource[obj.getAttribute('sourcetype')],_t_suggest=JcSource[obj.getAttribute('suggesttype')];

			//focus
			function _m_focus(){
				if(show){
					show=0;
					return;
				}
				setPosFlag=false;
				$Panel_items.style.display=$Panel_titleMsg.style.display=$Array_pageBreak[0].style.display="none";

				function _m_click(i){
						$Array_$Controls[i].onmousedown=function(e){
							_m_mousedown(i);
							$stopEvent(e);
							if($Array_$Controls[i].outerHTML) $Array_$Controls[i].outerHTML = $Array_$Controls[i].outerHTML + ' ';
							obj.blur();
						};
				}

				$Panel_main.onmousedown=function(){show=1;};
				for (var i=0;i<$Array_$Controls.length;i++)
					new _m_click(i);
				$Btn_pageUp.onmousedown=$Btn_pageDown.onmousedown=_m_page_click;
				for (var i=1;i<$Array_pageBreak.length;i++)
					$Array_pageBreak[i].onmousedown=_m_page_click;
				lastvalue=null;
				if (lastselectindex!==null)
					$Array_$Controls[lastselectindex].className="address_selected";
				setTimeout(_m_change,0);
				clock=setInterval(_m_change,150);

			}

			//page_click
			function _m_page_click(e){
				show=1;
				if (e) $stopEvent(e);
				switch (this){
					case $Btn_pageUp:_m_list.m_get(_m_list.page-1);break;
					case $Btn_pageDown:_m_list.m_get(_m_list.page+1);break;
					default:_m_list.m_get(parseInt(this.firstChild.nodeValue));
				}
			}

			//change

			//items
			var _m_list=new function(){
				var list;
				this.page=1;
				this.pagelist;

				this.maxpage=1;
				//get data of page
				this.m_get=function(_t_page){
					if (!list||!_t_page||_t_page<1||_t_page>this.maxpage) return null;
					this.page=_t_page;
					this.pagelist=list.slice((_t_page-1)*12,Math.min(_t_page*12,list.length));
					//set page visible
					for (var i=0;i<$Array_$Controls.length;i++){
						if (i<this.pagelist.length){
							$Array_$Controls[i].style.display="block";
							var _t_data=this.pagelist[i].replace(/@/g,"").split("|");
							$Array_$Controls[i].lastChild.nodeValue=_t_data[1];
							$Array_$Controls[i].firstChild.firstChild.nodeValue=((_t_data[3]||"")+"["+_t_data[0]+"]");
							data[i]=_t_data;
						}
						else{
							$Array_$Controls[i].style.display="none";
							data[i]=null;
						}
					}

					if (lastselectindex!==null){
						if (lastselectindex>=this.pagelist.length){
							$Array_$Controls[lastselectindex].className="";
							lastselectindex=this.pagelist.length-1;
							$Array_$Controls[lastselectindex].className="address_selected";
						}
					}

					else{
						lastselectindex=0;
						$Array_$Controls[0].className="address_selected";
					}
					_m_showpage.call(this);
					$Panel_items.style.display=$Panel_titleMsg.style.display="";
					if (!setPosFlag){
						$Panel_main.style.display="";
						$setPos($Panel_main,obj);
						setPosFlag=true;
					}
					_m_resize.call(this);

				};
				//set datalist
				this.m_set=function(_t_list){
					list=_t_list;
					this.maxpage=Math.ceil(_t_list.length/12);
					this.page=1;
					this.m_get(1);
				};
				//show page break panel
				function _m_showpage(){
					var st=this.maxpage<6||this.page<3?1:this.page>this.maxpage-2?this.maxpage-4:this.page-2;
					var ed=Math.min(st+4,this.maxpage);
					var obj;
					$Btn_pageUp.style.display=this.page==1?"none":"";
					$Btn_pageDown.style.display=this.page==this.maxpage?"none":"";
					for (var i=st;i<st+5;i++){
						obj=$Array_pageBreak[i-st+1];
						if (i<=ed){
							obj.firstChild.nodeValue=i;
							obj.className=i==this.page?"address_current":"";
							obj.style.display="";
						}
						else
							obj.style.display="none";
					}
					$Array_pageBreak[0].style.display=this.maxpage>1?"block":"none";
				}
			};

			//resize
			function _m_resize(){
				with($Panel_main.style){
					width=idr.offsetWidth+"px";
					height=idr.offsetHeight+"px";
				}
			}
			//suggest
			function _m_suggest(){

				var s_hot=_t_suggest;

				var s_suggest=s_hot.match(/[^@]+@/gi);
				if (s_suggest.length>12)
					s_suggest=s_suggest.slice(0,12);

				_m_list.m_set(s_suggest);
				$Panel_titleMsg.lastChild.nodeValue=$constants.address.b;
			}

			//change
			function _m_change(){
				var value=$.trim(obj.value);
				if (value===lastvalue) return;
				lastvalue=value;
				value=value.replace(/([\(\)\\\[\]\.\+\?\*\|\^\$])/gi,"\\$1").replace(/@|\|/gi,"");
				if(!value){
					_m_suggest();
					_m_resize();
					return;
				}
				$Panel_main.style.display="";
				var source=_t_source;
				var re1=new RegExp("@([^@]*\\|)?"+value+"[^@]*","gi");
				var re2=new RegExp("@[^@]*"+value+"[^@]*","gi");
				var arr1=[],arr2=[];
				source=source.replace(re1,function(a){
					arr1.push(a);
					return "";
				});
				if (arr1)
					arr1.sort($sortFunc);
				source=source.replace(re2,function(a){
					arr2.push(a);
					return "";
				});
				if (arr2)
					arr2.sort($sortFunc);
				if (arr1&&arr2)
					arr=arr1.concat(arr2);
				else
					arr=arr1||arr2;
				if(!arr||!arr.length){
					$Panel_titleMsg.lastChild.nodeValue=($constants.address.s+obj.value);
					if ($Panel_items.style.display=="none")
						_m_suggest();
					_m_resize();
				}else{
					$Panel_titleMsg.lastChild.nodeValue=$constants.address.h+obj.value+", "+$constants.address.o;
					_m_list.m_set(arr);
				}
			}
			//key down
			function _m_keydown(e){
				var code=e?e.keyCode:event.charCode;
				var _t_code="|"+code+"|";
				if (lastselectindex==null){
					if ("|13|".indexOf(_t_code)!=-1){
						$stopEvent(e,1);
					}
					return true;
				}
				if ("|13|".indexOf(_t_code)!=-1){
					$stopEvent(e,1);
					_m_mousedown(lastselectindex);
					obj.blur();
				}
				if ("|33|37|109|188|219|".indexOf(_t_code)!=-1){
					_m_page_click.call($Btn_pageUp);
					$stopEvent(e,1);
				}
				if ("|34|39|61|190|221|".indexOf(_t_code)!=-1){
					_m_page_click.call($Btn_pageDown);
					$stopEvent(e,1);
				}
				if ("|38|40|".indexOf(_t_code)!=-1){
					$Array_$Controls[lastselectindex].className="";
					lastselectindex+=_m_list.pagelist.length-39+code;
					lastselectindex%=_m_list.pagelist.length;
					$Array_$Controls[lastselectindex].className="address_selected";
					$stopEvent(e,1);
				}
			}

			//mouse down
			function _m_mousedown(i,flag){
				show=2;
				obj.value=data[i][0];//data[i][1]||data[i][0];
			}

			//blur

			function _m_blur(){
				if(show==1){
					setTimeout(function(){obj.focus()},1);
					return;
				}
				clearInterval(clock);
				clock=null;
				$Panel_main.style.display="none";
				if (lastselectindex!==null){
					$Array_$Controls[lastselectindex].className="";
					lastselectindex=null;
				}
				show=0;
				$Panel_main.onmousedown=null;

			}
			$attachEvent(obj,"focus",_m_focus);
			obj.blur();
			$attachEvent(obj,"blur",_m_blur);
			$attachEvent(obj,"keydown",_m_keydown);
		}
		var obj;

		for (var c = 0;c < $Autocomplete_controls.length;c++){
			obj=$Autocomplete_controls[c];
			new _c_address(obj);
		}


	}

	_m_init();


})();
