/***************************************************************
* comment : Á¾¸ñ¸í/ÄÚµå¸¦ ÀÔ·ÂÇÏ¿´À»¶§ ¹Ì¸®º¸±â ±â´É
* prototype.js¸¦ °°ÀÌ include ÇÏ¿© »ç¿ëÇØ¾ßÇÔ.
*
* skin : 1 Á¾¸ñÅä·Ð°Ô½ÃÆÇ..
* skin : 2 top_menu , Áß¸ñÃßÃµ/Áø´Ü/ÇÁ¸®¹Ì¾ö ±Û¾²±âÆË¾÷
* skin : 3 Á¾¸ñÀÇ¹ß°ß -> ÃßÃµ/Áø´Ü
***************************************************************/

var autosearch = Class.create();
autosearch.prototype = {
    initialize:function(_className, _request, _input_id, _layer_id, _table_id, _view_size,_function){
        this._className = _className;
        this._request = _request;
        this._input_id = _input_id;
        this._layer_id = _layer_id;
        this._table_id = _table_id;
        this._function = _function;
        this._flag = false;
        this._listSize = 0;
        this._idx = 0;
        this._itemCode = new Array();
        this._itemName = new Array();
        this._keyWord = "";
        this._height = 0;
        this._scroll = 0;
        this._cnt = 0;
        this._view_size = _view_size;
        this._chosung = new Array('¤¡', '¤¢', '¤¤', '¤§', '¤¨','¤©', '¤±', '¤²', '¤³', '¤µ', '¤¶','¤·', '¤¸', '¤¹', '¤º', '¤»', '¤¼', '¤½', '¤¾' );
        this._han = new Array('°¡', '±î', '³ª', '´Ù', 'µû', '¶ó', '¸¶', '¹Ù', 'ºü', '»ç', '½Î', '¾Æ', 'ÀÚ', 'Â¥', 'Ã»', 'Ä«', 'Æ¼', 'ÆÄ', 'ÇÏ');
        this.addListener();
      //Event.observe(document, 'click', this.Hide.bind(this));
        this.setValueInterval();
        this.liveMessage = '';
        if(this._layer_id == 'top_preview') this.liveMessage = getLiveMessage();
    },

    setSkinStyle:function(_skin, _width, _bgColor, _overColor){
        this._skin = _skin;
        this._width = _width;
        this._bgColor = _bgColor;
        this._overColor = _overColor;
    },
    
    setValueInterval:function()//08.08.14 ¶óÀÌºê Ãß°¡
    {
    	if(this._layer_id == 'top_preview')
    	{
	    	if($(this._input_id) != null)
	    	{
	    		$(this._input_id).value = this.liveMessage;
	    		$(this._input_id).style.color = '#82A4D4';
	    		$(this._input_id).style.textAlign = 'left';
	    		Event.observe($(this._input_id), 'mousedown', this.EvtCheck.bind(this));
	    		Event.observe($(this._input_id), 'blur', this.EvtCheck.bind(this));
	    	}
	    	else
	    	{
	    		setTimeout(this.setValueInterval.bind(this), 500);
	    	}
	}
    },

    getNavigatorType:function(){
        if(navigator.appName == "Microsoft Internet Explorer"){
            return 1;
        }else if(navigator.appName == "Netscape"){
            return 2;
        }
    },

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

    KeyListener:function(){
        //var type=this.getNavigatorType();
        //var _event;
        //if(type==1){
           // _event = window.event;
        //}else if(type==2){
            //_event = event;
        //}
        var keyCode=window.event.keyCode;
        if(keyCode ==  9||keyCode == 16||keyCode == 16||keyCode == 18||keyCode == 45||keyCode == 33||keyCode == 34||keyCode == 35||keyCode == 36||keyCode == 37||keyCode == 39){
            return;
        }else if(keyCode == 8||keyCode == 46){//backspace key or delete key
            if($(this._input_id).value.replace(/(^\s*)|(\s*$)/g,"")==""){
                //Element.hide(this._layer_id);
                return;
            }else{
                //Element.show(this._layer_id);
                setTimeout(this.preview.bind(this), 300);
            }
        }else if(keyCode == 13){//Enter key
            if($(this._input_id).value.replace(/(^\s*)|(\s*$)/g, "")!=""){
                //eval(this._function);
                //this._function.call();
                setTimeout(this._function,500);
            }
        }else if(keyCode == 32){//space key
            return event.returnValue=false;
        }else if(keyCode==38||keyCode==40){//arrow key top/bottom
            if(!this._flag) return;
            this.move(keyCode);
        }else{
            //$(this._input_id).value = $(this._input_id).value.toUpperCase();
            setTimeout(this.preview.bind(this),300);
        }
    },

    move:function(keyCode){
        switch (keyCode){
            case 40: //¡é
                if(this._listSize>this._idx){
                    if(Element.visible(this._layer_id)==false) Element.show(this._layer_id);
                    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) * 25;
                        }else{
                            this._scroll = 25 * this._view_size;
                        }
                        $('preview_layer').scrollTop += this._scroll;
                    }
                    if(this._idx>0) $(this._table_id).rows[this._idx-1].style.backgroundColor=this._bgColor;
                    $(this._table_id).rows[this._idx].style.backgroundColor=this._overColor;
                    if(this._skin==1) $('strcode').value=this._itemCode[this._idx];//top_menu
                    if(this._skin==2) $('code').value=this._itemCode[this._idx];//top_menu
                    $(this._input_id).value=this._itemName[this._idx];
                    this._idx++;
                }else{
                    return;
                }
                break;
            case 38: //¡è
                if (this._idx>1){
                    if(Element.visible(this._layer_id)==false) Element.show(this._layer_id);
                    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) * 25;
                        }else{
                            this._scroll = 25 * this._view_size;
                        }
                        $('preview_layer').scrollTop -= this._scroll;
                        this._cnt--;
                    }
                    $(this._table_id).rows[this._idx].style.backgroundColor=this._bgColor;
                    $(this._table_id).rows[this._idx-1].style.backgroundColor=this._overColor;
                    $(this._input_id).value=this._itemName[this._idx-1];
                   if(this._skin==1) $('strcode').value=this._itemCode[this._idx-1];//top_menu
                    if(this._skin==2) $('code').value=this._itemCode[this._idx-1];//top_menu
                }else{
                    this._idx = 0;
                    Element.hide(this._layer_id);
                    $(this._input_id).value=this._keyWord;
                }
                break;
            default:
        }
    },

    preview:function(){
        this._keyWord = $(this._input_id).value;
        this._param = $(this._input_id).value;
        if(this._skin==1&&encodeURI($(this._input_id).value).indexOf("%E3%")!=-1) $('strcode').value = "";//bbs
        if(this._skin==2&&encodeURI($(this._input_id).value).indexOf("%E3%")!=-1) $('code').value = "0";//top_menu
        if(encodeURI($(this._input_id).value).indexOf("%E3%")!=-1){
        	if(this._param.length==1){
	        	for(var i = 0; i < this._chosung.length ; i++){
				if(this._chosung[i]==$(this._input_id).value){
					this._param = this._han[i];
				}
	        	}
		}else{
			return;
		}
        }
        var _url = this._request.split(":")[0];
        	if (_url.indexOf('http://') == -1) {
        		_url = 	'http://www.thinkpool.com' + _url
        	}

        //var pars = this._request.split(":")[1] +"="+ $(this._input_id).value;
        var pars = $H({p_code:this._param.toUpperCase()}).toQueryString();
        var ajax=new Ajax.Request(_url, {method: 'get', parameters: pars, onComplete: this.parseXML.bind(this)});
    },

    Display:function(){
        if($(this._input_id).value!=""&&this._flag){
            if(Element.visible(this._layer_id)&&this._flag){
                Element.hide(this._layer_id);
            }else{
                if(this._idx==0){
                    Element.show(this._layer_id);
                }else{
                    this.preview();
                }
            }
        }
    },

    Hide:function(){
        if(Element.visible(this._layer_id)) Element.hide(this._layer_id);
    },
    
    EvtCheck:function()
    {
	        /*if(this.liveMessage != '' && $(this._input_id).getValue() == this.liveMessage)
	        {
			$(this._input_id).style.color = '#82A4D4';
			$(this._input_id).style.textAlign = 'center';
			$(this._input_id).value = this.liveMessage;
	        }
		else if($(this._input_id).getValue() == '')
		{
	        	$(this._input_id).style.color = '#000000';
	        	$(this._input_id).style.textAlign = 'left';
	        	$(this._input_id).clear();
		}*/

    		if($(this._input_id).style.cssText.toUpperCase().indexOf("BACKGROUND-IMAGE") != -1)//±¤°í
    		{
    			$(this._input_id).style.cssText = "BORDER : 0px solid #FF9900; HEIGHT: 18px;";
    		}
    		else
    		{
    			$(this._input_id).style.cssText = "BORDER : 0px solid #FF9900; HEIGHT: 18px;background-image: url(http://img.thinkpool.com/main/175X18.gif);background-repeat: no-repeat;background-position: center middle;";
    		}
    		
    		 if($(this._input_id).getValue() != '')
    		 {
    		 	$(this._input_id).style.cssText = "BORDER : 0px solid #FF9900; HEIGHT: 18px;";
    		}////////////À¯ÁøÅõÀÚÁõ±Ç ±¤°í »èÁ¦½Ã ÀÌºÎºÐ±îÁö Á¦°Å
    },

    EvtHide:function(evt){
        //alert(evt.srcElement);
        //alert(this._layer_id);
        var _o=evt.srcElement;
        var _id=_o.id;
        if(_id!='ttt'&&_id!='preview_layer'&&_id!=this._input_id){
            if(Element.visible(this._layer_id)) Element.hide(this._layer_id);
        }
    },

    parseXML:function(req){
        var xml=req.responseXML;

        this._idx = 0;
        this._cnt = 0;
        var html_txt="";

        if(this._skin==1){

            var list = xml.getElementsByTagName("list")[0];
            this._listSize=list.childNodes.length;
            if(this._listSize>0){
                this._flag=true;
                Element.show(this._layer_id);
            }else{
                this._flag=false;
            }

            if(this._listSize>this._view_size){
                this._height = 25 * this._view_size;
            }else{
                this._height = 25 * this._listSize;
            }

            html_txt="<table width='"+this._width+"' border='0' cellpadding='2' cellspacing='1' bgcolor='8FADCF'>";
            html_txt+="<tr>";
            html_txt+="<td bgcolor='#E9F1F4'>";
            html_txt+="<table width='"+this._width+"' border='0' cellpadding='1' cellspacing='1' bgcolor='C3CEE0'>";
            html_txt+="<tr>";
            html_txt+="<td bgcolor='#FFFFFF'>";
            html_txt+="<div id='preview_layer' style='width:"+this._width+"px;height:"+this._height+";background:#FFFFFF;overflow-y:scroll;' class='layer_scroll'>";
            html_txt+="<table border='0' width='"+this._width+"' cellpadding='3' cellspacing='0' id='"+this._table_id+"' bgcolor='"+this._bgColor+"'>";

            for(var i=0;i<this._listSize;i++){
                var item = list.childNodes[i];
                var item_code = item.getElementsByTagName("item_code")[0];
                var view_code = item.getElementsByTagName("view_code")[0];
                var view_name = item.getElementsByTagName("view_name")[0];
                var code = item.getElementsByTagName("code")[0];
                var name = item.getElementsByTagName("name")[0];
                this._itemName[i]=name.childNodes[0].nodeValue;
                this._itemCode[i]=code.childNodes[0].nodeValue;

                if(this._itemName[i]=="0"){
                    Element.hide(this._layer_id);
                    this._itemName[i]=this._keyWord;
                    html_txt+="<tr height='25'>";
                    html_txt+="<td colspan='2' id='ttt'>"+item_code.childNodes[0].nodeValue+"</td>";
                    html_txt+="</tr>";
                }else{
                    html_txt+="<tr height='25' onMouseOver=this.style.backgroundColor='"+this._overColor+"' onMouseOut=this.style.backgroundColor='' style='cursor:hand;' onClick="+this._className+".setSearch('"+code.childNodes[0].nodeValue+name.childNodes[0].nodeValue+"')>";
                    html_txt+="<td id='ttt'>"+view_name.childNodes[0].nodeValue+"</td><td width='40'>"+view_code.childNodes[0].nodeValue+"</td>";
                    html_txt+="</tr>";
                }
            }

            /*
            * °°Àº Á¾¸ñÀÌ ÀÖÀ¸¸é hidden ÀÇ code°ª¿¡ code¹øÈ£¸¦ Àû¿ëÇÑ´Ù.
            */
            /*for(var i=0;i<this._listSize;i++){
                if(this._itemName[i].toUpperCase()==$(this._input_id).value.toUpperCase()||this._itemCode[i]==$(this._input_id).value){
                    $('strcode').value= this._itemCode[i];
                    break;
                }else{
                    $('strcode').value= "";
                }
            }*/
		if(this._listSize>0&&this._itemName[0]!="0"){
                $('strcode').value=this._itemCode[0];
            }else{
                $('strcode').value= "";
            }

            html_txt+="</table>";
            html_txt+="</div>";
            html_txt+="</td>";
            html_txt+="</tr>";
            html_txt+="</table>";
            html_txt+="</td>";
            html_txt+="</tr>";
            html_txt+="</table>";

        }else if(this._skin==2){

            var list = xml.getElementsByTagName("list")[0];
            this._listSize=list.childNodes.length;
            if(this._listSize>0){
                this._flag=true;
                Element.show(this._layer_id);
            }else{
                this._flag=false;
            }

            if(this._listSize>this._view_size){
                this._height = 25 * this._view_size;
            }else{
                this._height = 25 * this._listSize;
            }

            html_txt="<table width='"+this._width+"' border='0' cellpadding='2' cellspacing='1' bgcolor='8FADCF'>";
            html_txt+="<tr>";
            html_txt+="<td bgcolor='#E9F1F4'>";
            html_txt+="<table width='"+this._width+"' border='0' cellpadding='1' cellspacing='1' bgcolor='C3CEE0'>";
            html_txt+="<tr>";
            html_txt+="<td bgcolor='#FFFFFF'>";
            html_txt+="<div id='preview_layer' style='width:"+this._width+"px;height:"+this._height+";background:#FFFFFF;overflow-y:scroll;' class='layer_scroll'>";
            html_txt+="<table border='0' width='"+this._width+"' cellpadding='3' cellspacing='0' id='"+this._table_id+"' bgcolor='"+this._bgColor+"'>";

            for(var i=0;i<this._listSize;i++){
                var item = list.childNodes[i];
                var item_code = item.getElementsByTagName("item_code")[0];
                var view_code = item.getElementsByTagName("view_code")[0];
                var view_name = item.getElementsByTagName("view_name")[0];
                var code = item.getElementsByTagName("code")[0];
                var name = item.getElementsByTagName("name")[0];
                this._itemName[i]=name.childNodes[0].nodeValue;
                this._itemCode[i]=code.childNodes[0].nodeValue;

                if(this._itemName[i]=="0"){
                    Element.hide(this._layer_id);
                    this._itemName[i]=this._keyWord;
                    html_txt+="<tr height='25'>";
                    html_txt+="<td colspan='2' id='ttt'>"+item_code.childNodes[0].nodeValue+"</td>";
                    html_txt+="</tr>";
                }else{
                    html_txt+="<tr height='25' onMouseOver=this.style.backgroundColor='"+this._overColor+"' onMouseOut=this.style.backgroundColor='' style='cursor:hand;' onClick="+this._className+".setSearch('"+code.childNodes[0].nodeValue+"')>";
                    html_txt+="<td id='ttt'>"+view_name.childNodes[0].nodeValue+"</td><td width='40'>"+view_code.childNodes[0].nodeValue+"</td>";
                    html_txt+="</tr>";
                }
            }

            /*
            * °°Àº Á¾¸ñÀÌ ÀÖÀ¸¸é hidden ÀÇ code°ª¿¡ code¹øÈ£¸¦ Àû¿ëÇÑ´Ù.
            */
            /*for(var i=0;i<this._listSize;i++){
                if(this._itemName[i].toUpperCase()==$(this._input_id).value.toUpperCase()||this._itemCode[i]==$(this._input_id).value){
                    $('code').value= this._itemCode[i];
                    break;
                }else{
                    $('code').value= "0";
                }
            }*/

            if(this._listSize>0&&this._itemName[0]!="0"){
                $('code').value=this._itemCode[0];
            }else{
                $('code').value= "0";
            }

            html_txt+="</table>";
            html_txt+="</div>";
            html_txt+="</td>";
            html_txt+="</tr>";
            html_txt+="</table>";
            html_txt+="</td>";
            html_txt+="</tr>";
            html_txt+="</table>";

        }else if(this._skin==3){

            var list = xml.getElementsByTagName("list")[0];
            this._listSize=list.childNodes.length;
            if(this._listSize>0){
                this._flag=true;
                Element.show(this._layer_id);
            }else{
                this._flag=false;
            }

            if(this._listSize>this._view_size){
                this._height = 25 * this._view_size;
            }else{
                this._height = 25 * this._listSize;
            }

            html_txt="<table width='"+this._width+"' border='0' cellpadding='2' cellspacing='1' bgcolor='8FADCF'>";
            html_txt+="<tr>";
            html_txt+="<td bgcolor='#E9F1F4'>";
            html_txt+="<table width='"+this._width+"' border='0' cellpadding='1' cellspacing='1' bgcolor='C3CEE0'>";
            html_txt+="<tr>";
            html_txt+="<td bgcolor='#FFFFFF'>";
            html_txt+="<div id='preview_layer' style='width:"+this._width+"px;height:"+this._height+";background:#FFFFFF;overflow-y:scroll;' class='layer_scroll'>";
            html_txt+="<table border='0' width='"+this._width+"' cellpadding='3' cellspacing='0' id='"+this._table_id+"' bgcolor='"+this._bgColor+"' class='_table'>";

            for(var i=0;i<this._listSize;i++){
                var item = list.childNodes[i];
                var item_code = item.getElementsByTagName("item_code")[0];
                var view_code = item.getElementsByTagName("view_code")[0];
                var view_name = item.getElementsByTagName("view_name")[0];
                var code = item.getElementsByTagName("code")[0];
                var name = item.getElementsByTagName("name")[0];
                this._itemName[i]=code.childNodes[0].nodeValue;

                if(this._itemName[i]=="0"){
                    Element.hide(this._layer_id);
                    this._itemName[i]=this._keyWord;
                    html_txt+="<tr height='25' onMouseOver=this.style.backgroundColor='"+this._overColor+"' onMouseOut=this.style.backgroundColor=''>";
                    html_txt+="<td colspan='2' id='ttt'>"+item_code.childNodes[0].nodeValue+"</td>";
                    html_txt+="</tr>";
                }else{
                    html_txt+="<tr height='25' onMouseOver=this.style.backgroundColor='"+this._overColor+"' onMouseOut=this.style.backgroundColor='' style='cursor:hand;' onClick="+this._className+".setSearch('"+code.childNodes[0].nodeValue+"')>";
                    html_txt+="<td id='ttt'>"+view_name.childNodes[0].nodeValue+"</td><td width=40>"+view_code.childNodes[0].nodeValue+"</td>";
                    html_txt+="</tr>";
                }
            }

            html_txt+="</table>";
            html_txt+="</div>";
            html_txt+="</td>";
            html_txt+="</tr>";
            html_txt+="</table>";
            html_txt+="</td>";
            html_txt+="</tr>";
            html_txt+="</table>";
        }

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

    setSearch:function(v){
        if(this._skin==2){
            $('code').value=v;
        } else if(this._skin==1){

            $('strcode').value=v.substring(0,6);
            $('inputcode').value=v.substring(6);

        } else {
            $(this._input_id).value=v;
        }
        //eval(this._function);
        this._function.call();
    },

    setValue:function(v){
        $(this._input_id).value=v;
        Element.hide(this._layer_id);
    }
};
