//class 
var autosearch = Class.create();
autosearch.prototype = {
    initialize:function( _layer_id, _formName, _formInput, _codeInput, _className, _request, _input_id, _table_id, _view_size,_function){ 

        this._className = _className;
        this._request = _request;
        this._input_id = _input_id;
        this._layer_id = _layer_id; //document.getElementById("stockListBox");
        this._table_id = _table_id;
        this._function = _function;

		this.ResultEle = null;

		this.form = _formName;
		this.input_box = _formInput; //this.form.elements[fi];
		this.itemcode = _codeInput;
		this.inputTextColor = "#000000";
		this.resultbgcolor = "#e2ebf3";
 
        this._listSize = 0;
        this._idx = 0;
		this._listCnt = 5;
		this._view_size = 5;
		this._maxData = 15;
		this._scrolldivheight = 22;
		this._nodataheight = 36; 

        this._flag = false;

        this._itemCode = new Array();
        this._itemName = new Array();
        this._scroll = 0;
        this._cnt = 0;

		this._choSung = Array('¤¡', '¤¢', '¤¤', '¤§', '¤¨', '¤©', '¤±', '¤²', '¤³', '¤µ', '¤¶', '¤·', '¤¸', '¤¹', '¤º', '¤»', '¤¼', '¤½', '¤¾' );
		this._jungSung = Array('¤¿', '¤À', '¤Á', '¤Â', '¤Ã', '¤Ä', '¤Å', '¤Æ', '¤Ç', '¤È', '¤É', '¤Ê', '¤Ë', '¤Ì', '¤Í', '¤Î', '¤Ï', '¤Ð', '¤Ñ', '¤Ò', '¤Ó' );
		this._jongSung = Array('', '¤¡', '¤¢', '¤£', '¤¤', '¤¥', '¤¦', '¤§', '¤©', '¤ª', '¤«', '¤¬', '¤­', '¤®', '¤¯', '¤°', '¤±', '¤²', '¤´', '¤µ', '¤¶', '¤·', '¤¸', '¤º', '¤»', '¤¼', '¤½', '¤¾' );

		this.navi = this.getNavigatorType();
		this.createResult();
        this.addListener();
    },

	toKorean:function(str) {
		this.reg_h = "[rRseEfaqQtTdwWczxvg]"; 
		this.reg_b = "hk|ho|hl|nj|np|nl|ml|k|o|i|O|j|p|u|P|h|y|n|b|m|l"; 
		this.reg_f = "rt|sw|sg|fr|fa|fq|ft|fx|fv|fg|qt|r|R|s|e|f|a|q|t|T|d|w|c|z|x|v|g|";
		this.reg_exp = new RegExp("("+this.reg_h+")("+this.reg_b+")((?:"+this.reg_f+")(?=(?:"+this.reg_h+")(?:"+this.reg_b+"))|(?:"+this.reg_f+"))","g");

		return str.replace(this.reg_exp,this.replace);
	},

	replace:function(str,h,b,f) {
		this.en_h = "rRseEfaqQtTdwWczxvg"; 
		this.en_b = { k:0,o:1,i:2,O:3,j:4,p:5,u:6,P:7,h:8,hk:9,ho:10,hl:11,y:12,n:13,nj:14,np:15,nl:16,b:17,m:18,ml:19,l:20 };
		this.en_f = { "":0,r:1,R:2,rt:3,s:4,sw:5,sg:6,e:7,f:8,fr:9,fa:10,fq:11,ft:12,fx:13,fv:14,fg:15,a:16,q:17,qt:18,t:19,T:20,d:21,w:22,c:23,z:24,x:25,v:26,g:27 };

		return String.fromCharCode(this.en_h.indexOf(h)*21*28 + this.en_b[b]*28 + this.en_f[f] + 44032); 
	},

	addListener:function(){
        if(document.addEventListener){
            document.addEventListener('mousedown',this.EvtHide.bind(this),false);
        }else{ //IE?FF
            document.attachEvent('onmousedown',this.EvtHide.bind(this));
        }
    },

    EvtHide:function(evt){
        var _o=Event.element(evt); //evt.srcElement;
        var _id=_o.id;
		if(_id==''){
            if(Element.visible(this._layer_id)) Element.hide(this._layer_id);
        }
    },

    getNavigatorType:function(){
        if(navigator.appName == "Microsoft Internet Explorer"){
            return 1;
        }else if(navigator.appName == "Netscape"){
            return 2;
        }else return 3;
    },
	
	KeyListener:function(event) {
        var _event;
		var type=this.getNavigatorType();
        if(type==1){
            _event = window.event;
        }else if(type==2){
            _event = event;
        }
		this.ClearBgcolor();
		var keyCode=window.event.keyCode; // ? event.keycode : event.which;
		if(keyCode==38||keyCode==40){//arrow key top/bottom
			this.move(keyCode);
		}else if(keyCode == 32){//space key
            return _event.returnValue=false;
		}
		setTimeout(this.setFocus.bind(this), 10);
	},

    move:function(keyCode){
        switch (keyCode){
            case 40: //¡é
                if(this._listSize>this._idx){
					cursorpos = cursorpos + 1;
                    if(!Element.visible(this._layer_id)) $(this._layer_id).style.display = "block"; //	Element.show(this._layer_id);
					if(this._idx%this._view_size==0&&this._idx!=0) { 
						if((this._idx%this._view_size)==0&&this._idx!=0){
							this._cnt++;
							if(parseInt(this._listSize/this._view_size)==this._cnt){
								this._scroll = (this._listSize%this._view_size) * this._scrolldivheight;
							}else{
								this._scroll = this._scrolldivheight * this._view_size;
							}
							$(this.ResultEle).scrollTop += this._scroll;
						}
					}
					$(this.input_box).value = data[this._idx];
					$(this.itemcode).value = datacode[this._idx];
					this._idx++;
                }else{
                    return; 
                }
                break; 
            case 38: //¡è
                if (this._idx>1){
					cursorpos = cursorpos - 1;
                    if(!Element.visible(this.ResultEle)) 
					{ 
						Element.show(this.ResultEle);
						$(this._layer_id).style.display = "block";
					}
                    this._idx--;
                    if(this._idx%this._view_size==0&&this._idx!=0){
                        if(parseInt(this._listSize/this._view_size)==this._cnt){
                            this._scroll = (this._listSize%this._view_size) * this._scrolldivheight;
                        }else{
                            this._scroll = this._scrolldivheight * this._view_size;
                        }
                        $(this.ResultEle).scrollTop -= this._scroll;
                        this._cnt--;
                    }
					$(this.input_box).value=data[this._idx-1];
					$(this.itemcode).value = datacode[this._idx-1];
                }else{
                    Element.hide(this._layer_id);
                }
                break;
            default:
        }
    },
	
	setFocus:function() {
		var d = document.getElementById("sr_" + cursorpos);
		if(d) {
			$(d).style.backgroundColor = this.resultbgcolor;
		}
	},

	hiddenBox:function() {
		if(boxFucus == false) {			
			boxDiv.style.display = "none";
		}
	},

	checkInput:function() {
		if ( this._flag ) return;
		$(this.input_box).value = "";
		$(this.itemcode).value = "";
		this._flag=true;
	},

	inputstr:function(key) {
		var str = $(this.input_box).value;

		if(str.length == 0) {
			this.no_Str();
			data = new Array;
			return;
		}

		if(key == 8) {	 // Backspace
			data = new Array;
			cursorpos = -1;
		}
		
		if(cursorpos != -1 && (key == 38 || key == 40)) {
			this.KeyListener();
			return;
		}

		if(str.length > 1 && (str >= 0 && str <= 1000000)) {
			this._forCodegetSearch(str);
		} else {
			this.getSearchNew(str);
		}
		
		this.print_div();
		this.KeyListener();
	},

	list_close:function() {
		if(Element.visible(this._layer_id)) Element.hide(this._layer_id);
	},


	clearData:function() {
		cursorpos = -1;
		this._idx = 0;
		$(this.ResultEle).innerHTML = "";
	},

	OnClickEvnet_:function(idx) {
		this.setInputStr(idx);
		this.inputFocus();
		checkValue();
	},

	OnMouseDownEvent_:function(idx) {
		return;
	},

	OnMouseOverEvent_:function(idx) {
		this.ClearBgcolor();
		cursorpos = idx;
		this.setFocus();
		this.inputFocus();
	},

	OnMouseOutEvent_:function(idx) {
		this.ClearBgcolor();
		this.inputFocus();
	},

	createResult:function() {
		var tmp = document.createElement("div");
		tmp.id = "autolist";
		tmp.style.height = this._scrolldivheight * this._view_size;
		tmp.style.position = "absolute";
		$(this._layer_id).appendChild(tmp);
		this.ResultEle = document.getElementById("autolist");
	},

	trim:function(str) {
		str = str.replace(/^\s*/,'').replace(/\s*$/, '');
		return str;
	},

	fme_cut:function(str) {
		if(!str) return;
		var CompleteCode = str.charCodeAt();

		if(CompleteCode < 128) return str;

		var UniValue = CompleteCode - 0xAC00;

		Jong = UniValue % 28;
		Jung = ( ( UniValue - Jong ) / 28 ) % 21;
		Cho = parseInt (( ( UniValue - Jong ) / 28 ) / 21);
		
		if(Cho < 0) return str;

		r_str = this._choSung[Cho];
		r_str += this._jungSung[Jung];
		r_str += this._jongSung[Jong];

		return r_str;
	},

	strConvert:function(str, len) {
		var str_tmp = "";
		for(var i=0; i< str.length; i++) {
			str_tmp += this.fme_cut(str.substr(i, 1));
			if(len) {
				if(str_tmp.length >= len) {
					return str_tmp.substr(0, len);
					break;
				}
			}
		}
		return str_tmp;
	},

	getSearchNew:function(str) {

		//if (str.length > 2 && (str > "a" && str < "z"))	{	str = this.toKorean(str);	}

		var strUpp = str.toUpperCase();

		var re_str = this.strConvert(strUpp, "");
		var re_str_first = re_str.substr(0, 1);
		var len = re_str.length;

		var i=0;
		while(i < this._choSung.length) {
			if(this._choSung[i] == re_str_first) {
				var keynum = i+1;
				break;
			}
			i++;
		}
		if(!keynum) { keynum = 0; }

		var code_arr = code[keynum];
		var j = 0;
		var a = 0;
		data = new Array;
		dataRep = new Array;
		datacode = new Array;
		datacodeRep = new Array;

		while(j < code_arr.length) {
			var tmp_v = this.trim(code_arr[j][0]);
			var codename = this.trim(code_arr[j][1]);

			if(code_arr[j].length > 2){
				var channame = this.trim(code_arr[j][2]);
			}

			var tmp_vU = tmp_v.toUpperCase();
			var tmp_v2 = this.strConvert(tmp_vU, len);

			if(a == this._maxData) {	break;	}

			if(tmp_v2 == re_str) {
				if (code_arr[j].length > 2)
				{
					data[a] = this.trim(code_arr[j][2]) + "(=" + tmp_v + ")";
				}else{
					data[a] = tmp_v;
				}
				dataRep[a] = data[a].replace(strUpp, "<b class=orange id='opt'>"+strUpp+"</b>");
				datacode[a] = codename;
				datacodeRep[a] = codename;
				a++;

				//¿ÏÀü¸ÅÄª Á¾¸ñ Ã¤ÅÃ
				//if (data.length == 1 && strUpp == data[0])
				//{
				//	$(this.itemcode).value = datacode[0];
				//}

			}

			j++;

		}

		if (str != (kstr = this.toKorean(str)))	{

			strUpp = kstr.toUpperCase();

			re_str = this.strConvert(strUpp, "");
			re_str_first = re_str.substr(0, 1);
			len = re_str.length;

			i=0;
			while(i < this._choSung.length) {
				if(this._choSung[i] == re_str_first) {
					keynum = i+1;
					break;
				}
				i++;
			}
			if(!keynum) { keynum = 0; }

			code_arr = code[keynum];
			j = 0;

			while(j < code_arr.length) {
				tmp_v = this.trim(code_arr[j][0]);
				codename = this.trim(code_arr[j][1]);

				if(code_arr[j].length > 2){
					channame = this.trim(code_arr[j][2]);
				}

				tmp_vU = tmp_v.toUpperCase();
				tmp_v2 = this.strConvert(tmp_vU, len);

				if(a == this._maxData) {	break;	}

				if(tmp_v2 == re_str) {
					if (code_arr[j].length > 2)
					{
						data[a] = this.trim(code_arr[j][2]) + "(=" + tmp_v + ")";
					}else{
						data[a] = tmp_v;
					}
					dataRep[a] = data[a].replace(strUpp, "<b class=orange id='opt'>"+strUpp+"</b>");
					datacode[a] = codename;
					datacodeRep[a] = codename;
					a++;

					//¿ÏÀü¸ÅÄª Á¾¸ñ Ã¤ÅÃ
					//if (data.length == 1 && strUpp == data[0])
					//{
					//	$(this.itemcode).value = datacode[0];
					//}

				}

				j++;

			}

		}

		if (data.length == 1) $(this.itemcode).value = datacode[0];
		else $(this.itemcode).value = "";

		if(re_str) {
			if(data.length > 0) {
				if(cursorpos <= 0) {
					if(this.navi == 1) {
						for(var i=0; i < 3; i++) {
							$(this.ResultEle).doScroll("pageUp");
						}
					}
					this._listSize = data.length;
					this.write_datalist();
				}
			} else {
				this._listSize = 0;
				this.no_data();
			}
		} else {
			this._listSize = 0;
			this.no_data();
		}
	},

	_forCodegetSearch:function(str) {
		var re_str = str;
		var len = re_str.length;
		var keynum = 0;

		var code_arr = code[keynum];
		var j = 0;
		var a = 0;
		data = new Array;
		dataRep = new Array;
		datacode = new Array;
		datacodeRep = new Array;

		while(keynum < code.length) {

			for (j=0;j<code_arr.length;j++ )
			{
				var tmp_v = this.trim(code_arr[j][0]);
				var codename = this.trim(code_arr[j][1]);

				if(a == this._maxData) { break;	}
				if(codename.indexOf(re_str) != -1) {
					data[a] = tmp_v;
					dataRep[a] = tmp_v.replace(str, "<b class=orange id='opt'>"+str+"</b>");
					datacode[a] = codename;
					datacodeRep[a] = codename.replace(str, "<b class=orange id='opt'>"+str+"</b>");
					a++;

					//if (data.length == 1)
					//{
					//	$(this.itemcode).value = datacode;
					//}
				}
			}

			keynum++;

			if (keynum < code.length && code[keynum].length == 0) { 	keynum++;	}
			code_arr = code[keynum];

		}

		if (data.length == 1) $(this.itemcode).value = datacode;
		else $(this.itemcode).value = "";

		if(re_str) {
			if(data.length > 0) {
				if(cursorpos <= 0) {
					if(this.navi == 1) {
						for(var i=0; i < 3; i++) {
							$(this.ResultEle).doScroll("pageUp");
						}
					}
					this._listSize = data.length;
					this.write_datalist();
				}
			} else {
				this._listSize = 0;
				this.no_data();
			}
		} else {
			this._listSize = 0;
			this.no_data();
		}
	},

	write_datalist:function() {
		this._resultborderpix = null;
		this.clearData();
		if (this._listSize <= 5) {
			this._listCnt = this._listSize;
			this._resultborderpix = 14; 
		} else {
			this._listCnt = 5;
			this._resultborderpix = 9;
		}

		$(this.ResultEle).style.height = this._scrolldivheight * this._listCnt + this._resultborderpix;

		var html_txt="";
		html_txt+="<table border=0 cellspacing=0 cellpadding=0 bgcolor=white>";
		html_txt+="<tr><td height=5></td></tr>";
		html_txt+="<tr><td>";
		
		html_txt+="<table width=326 border=0 cellspacing=0 cellpadding=0 id='opt' bgcolor=white>";

		for(var c=0; c < data.length; c++) {
			//this.writeDiv(dataRep[c], c);
			html_txt+="<tr id=\"sr_" +(c)+"\" height='"+this._scrolldivheight+"' onMouseOver=this.style.backgroundColor='"+this.resultbgcolor+"' onMouseOut=this.style.backgroundColor='' onClick='px.OnClickEvnet_("+c+");' style=\"padding:0 0 0 10;cursor:hand;\"><td id=\"opt\">";
			html_txt+=dataRep[c] + " (" + datacodeRep[c] + ")";
			html_txt+="</td></tr>";
		}

		html_txt+="</table>";
		html_txt+="</td></tr>";
		html_txt+="<tr><td height=5></td></tr>";
		html_txt+="</table>";

		$(this.ResultEle).innerHTML = html_txt;
	},

	write_list:function() {
		this.clearData();
		if (this._listSize < 5) this._listCnt = this._listSize;
		else this._listCnt = 5;
		$(this.ResultEle).style.height = this._scrolldivheight * this._listCnt;

		for(var c=0; c < data.length; c++) {
			this.writeDiv(dataRep[c], c);
		}
	},

	no_data:function() {
		this.clearData();
		var news_selected = "";
		var text = "";
		if(news_selected){
		}else{
			$(this.ResultEle).style.backgroundColor = "#FFFFFF";
			$(this.ResultEle).style.height = this._nodataheight;

			text="<table border=0 cellspacing=0 cellpadding=0 bgcolor=white>";
			text+="<tr><td height=5></td></tr>";
			text+="<tr><td>";
			text+="<table width=326 border=0 cellspacing=0 cellpadding=0 id= bgcolor=white>";
			text+="<tr height='"+this._scrolldivheight+"' style=\"padding:0 0 0 10;\"><td>Á¾¸ñ¸í/ÄÚµå¸¦ ¿Ã¹Ù¸£°Ô ÀÔ·ÂÇÏ¼¼¿ä.</td></tr>";
			text+="</table>";
			text+="</td></tr>";
			text+="<tr><td height=5></td></tr>";
			text+="</table>";
			this.writeDiv(text);

			$(this.itemcode).value = ""; //°Ë»öÁ¾¸ñ ¾øÀ» ¶§ itemcode clear
		}
	},

	no_Str:function() {
		var test = "";
		this.clearData();
		$(this.ResultEle).style.height = this._nodataheight;

		text="<table border=0 cellspacing=0 cellpadding=0 bgcolor=white>";
		text+="<tr><td height=5></td></tr>";
		text+="<tr><td>";
		text+="<table width=326 border=0 cellspacing=0 cellpadding=0 id= bgcolor=white>";
		text+="<tr height='"+this._scrolldivheight+"' style=\"padding:0 0 0 10;\"><td>Á¾¸ñ¸í/ÄÚµå¸¦ ÀÔ·ÂÇÏ¼¼¿ä.</td></tr>";
		text+="</table>";
		text+="</td></tr>";
		text+="<tr><td height=5></td></tr>";
		text+="</table>";

		this.writeDiv(text);
	},

	writeDiv:function(data, idx) {
		var tmp = document.createElement("div");

		$(this.ResultEle).appendChild(tmp);
		var text = document.createTextNode(data);
		//$(tmp).appendChild(text);
		//$(tmp).innerHTML = data;
		$(this.ResultEle).innerHTML = data;

		if(idx != undefined) {
			$(tmp).id = "sr_" + idx;
			$(tmp).onclick = function anonymous() { px.OnClickEvnet_(idx); }
			$(tmp).onmouseover = function anonymous() { px.OnMouseOverEvent_(idx);	}
			$(tmp).onmouseout = function anonymous() { px.OnMouseOutEvent_(idx);	}
			$(tmp).onMouseDown = function anonymous() {	px.OnMouseDownEvent_(idx);	}
		}
		$(tmp).style.height = this._scrolldivheight + 10;
		$(tmp).style.width = "100%";
	},

	ClearBgcolor:function() {
		var j = 0;
		while(j < data.length) {
			document.getElementById("sr_" + j).style.backgroundColor = "#FFFFFF";		
			j++;
		}
	},

	setInputStr:function(idx) {
		if(data.length > idx) {
			$(this.input_box).value = data[idx];
			$(this.itemcode).value = datacode[idx]
		}
	},

	inputFocus:function() {
		$(this.input_box).focus();
	},

	print_div:function() {
		$(this._layer_id).style.display = "block";
	}

}

var cursorpos = -1;

//document.write("<iframe width=0 height=0 frameborder=0 marginheight=0 marginwidth=0 scrolling=no src=\"http://paxsearch.moneta.co.kr/index.php?mode=US&q=%EC%95%84%EC%9D%B4%ED%8C%A8%EB%93%9C\" style=\"display: none;\"></iframe>");