﻿$(document).ready(function() {

    //도시검색 셋팅
    hn_citysearch = function(ControlID, text, landmarkControlID, isDomestic, WardCodeID, callback) {
        try {
            this.Control = $('#' + ControlID);
            this.BasicText = text;

            this.landmarkControl = (landmarkControlID != null) ? $('#' + landmarkControlID) : null;
            this.wardCodeControl = (WardCodeID != null) ? $('#' + WardCodeID) : null;
            this.callBack = callback;

            this.row = 0;
            this.selectedValue = "";
            this.selectedText = "";

            this.isDomestic = (isDomestic == undefined) ? false : isDomestic;

            var html = new Array();
            html.push("<div style='text-align:left; background-color:#FFFFFF'>");
            html.push("이동 - 방향키(↑↓), 선택 - ENTER, 취소 - ESC");
            html.push("</div>");
            //this.InfoHTML = '';
            this.InfoHTML = html.join('');

            var html2 = new Array();
            html2.push("<div style='text-align:left; background-color:#'>");
            html2.push("검색중입니다. 잠시만 기다리세요.");
            html2.push("</div>");
            this.loadingHTML = html2.join('');

            this.listBox =
                $('<div/>').css({
                    position: "absolute",
                    width: 300,
                    height: 120,
                    border: "1px solid #cccccc",
                    backgroundColor: "#FFFFFF",
                    overflowX: "hidden",
                    overflowY: "hidden",
                    zIndex: 1100,
                    display: "none",
                    padding: 2
                })
                .appendTo('body')
                .html(this.InfoHTML)
                .bind('mouseout', function(e) {
                    if ($('.CityRow').length > 0) {
                        $($('.CityRow')[THAT.row]).css('backgroundColor', '#F8C0E7');
                    }
                })
                .bind('mouseover', function(e) {
                    THAT.Control.unbind('blur');
                })
                .bind('mouseout', function(e) {
                    THAT.Control.bind('blur', function(e) {
                        //THAT.hide();
                        THAT.hide2();
                    });
                });

            this.Control.bind('keydown', function(e) {
                switch (e.keyCode) {
                    case 38:
                        //위
                        //최상단이 아닌경우에만...
                        if (THAT.row > 0) {
                            THAT.focusRow(THAT.row, --THAT.row);
                        }
                        break;
                    case 40:
                        //아래
                        THAT.focusRow(THAT.row, ++THAT.row);
                        break;
                    case 27:
                        //esc
                        THAT.Control.blur();
                        break;
                    case 13:
                        //enter
                        if ($('.CityRow').length > 0) {
                            THAT.onSelectValue($($('.CityRow')[THAT.row]));
                        }
                        break;
                    default:
                        break;
                }
            });
            this.focus = function() {
                this.Control.focus();
            };

            this.loaded = false;

            //기본셋팅
            var THAT = this;

            this.Control.attr('value', this.BasicText);
            this.Control
                .bind('focus', function(e) {
                    THAT.show();
                })
                .bind('blur', function(e) {
                    //THAT.hide();
                    THAT.hide2();
                })
                .bind('keydown', function(e) {
                    //특수문자 입력 불가...
                })
                .bind('keyup', function(e) {
                    //a to z, 한글자 입력후 다음글자 입력때 웹서비스를 태운다. 1부터 시작.
                    //if (e.keyCode >= 65 && e.keyCode <= 90 && $(this).attr('value').length > 1) {
                    if (e.keyCode == 13) { //enter나

                        //호출전 로딩 메시지
                        THAT.listBox.html(THAT.InfoHTML + THAT.loadingHTML);

                        //이전 호출자 취소
                        if (THAT.xhr != null) {
                            THAT.xhr.abort();
                        }

                        //웹서비스 호출
                        THAT.xhr = hn_proxy.ws.call({
                            wsname: (THAT.isDomestic) ? hn_proxy.ws.citySearchDom : hn_proxy.ws.citySearch,
                            value: $(this).attr('value'),
                            success: function(xmlString, textStatus) {

                                var xsltpath = "/product/lodge/CitySearch.xslt";
                                var params = {};
                                var listHTML = ju.dt.xmlTransForm(xmlString, xsltpath, params, false);

                                THAT.listBox.html(THAT.InfoHTML + listHTML);

                                $('.CityRow').each(function() {
                                    $(this).css('cursor', 'pointer');

                                    if ($(this).attr('value') % 2 == 1) {
                                        $(this).css('backgroundColor', '#FDF2FA');
                                    }
                                    else {
                                        $(this).css('backgroundColor', '#FFFFFF');
                                    }

                                    $(this).hover(
                                        function(e) {
                                            //mouse over

                                            if ($('.CityRow').length > 0) {
                                                if ($($('.CityRow')[THAT.row]).attr('value') % 2 == 1) {
                                                    $($('.CityRow')[THAT.row]).css('backgroundColor', '#FDF2FA');
                                                }
                                                else {
                                                    $($('.CityRow')[THAT.row]).css('backgroundColor', '#FFFFFF');
                                                }

                                                $(this).css('backgroundColor', '#F8C0E7');
                                                $(this).css('fontWeight', 'bold');
                                                THAT.row = $(this).attr('value');
                                            }
                                        },
                                        function(e) {
                                            //mouse out
                                            if ($(this).attr('value') % 2 == 1) {
                                                $(this).css('backgroundColor', '#FDF2FA');
                                                $(this).css('fontWeight', '');
                                            }
                                            else {
                                                $(this).css('backgroundColor', '#FFFFFF');
                                                $(this).css('fontWeight', '');
                                            }
                                        }
                                    ).bind('click', function(e) {
                                        //선택!
                                        THAT.onSelectValue($(this));
                                    });
                                });

                                THAT.focusRow(0, 0);
                            },
                            error: function(XMLHttpRequest, textStatus, errorThrown) {
                                alert("error : " + textStatus);
                            }
                        });
                    }
                }
            );
            
            this.SeachCity2 = function() {
			//alert(this.Control.attr('value'));
				//호출전 로딩 메시지
				THAT.listBox.html(THAT.InfoHTML + THAT.loadingHTML);
				
				//이전 호출자 취소
				if (THAT.xhr != null) {
					THAT.xhr.abort();
				}

				//웹서비스 호출
				THAT.xhr = hn_proxy.ws.call({
					wsname: (THAT.isDomestic) ? hn_proxy.ws.citySearchDom : hn_proxy.ws.citySearch,
					value: this.Control.attr('value'),
					success: function(xmlString, textStatus) {

						var xsltpath = "/product/lodge/CitySearch.xslt";
						var params = {};
						var listHTML = ju.dt.xmlTransForm(xmlString, xsltpath, params, false);

						THAT.listBox.html(THAT.InfoHTML + listHTML);

						$('.CityRow').each(function() {
							$(this).css('cursor', 'pointer');

							if ($(this).attr('value') % 2 == 1) {
								$(this).css('backgroundColor', '#FDF2FA');
							}
							else {
								$(this).css('backgroundColor', '#FFFFFF');
							}

							$(this).hover(
								function(e) {
									//mouse over

									if ($('.CityRow').length > 0) {
										if ($($('.CityRow')[THAT.row]).attr('value') % 2 == 1) {
											$($('.CityRow')[THAT.row]).css('backgroundColor', '#FDF2FA');
										}
										else {
											$($('.CityRow')[THAT.row]).css('backgroundColor', '#FFFFFF');
										}

										$(this).css('backgroundColor', '#F8C0E7');
										$(this).css('fontWeight', 'bold');
										THAT.row = $(this).attr('value');
									}
								},
								function(e) {
									//mouse out
									if ($(this).attr('value') % 2 == 1) {
										$(this).css('backgroundColor', '#FDF2FA');
										$(this).css('fontWeight', '');
									}
									else {
										$(this).css('backgroundColor', '#FFFFFF');
										$(this).css('fontWeight', '');
									}
								}
							).bind('click', function(e) {
								//선택!
								THAT.onSelectValue($(this));
							});
						});

						THAT.focusRow(0, 0);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						alert("error : " + textStatus);
					}
				});
				
            }

            this.focusRow = function(rowIndex1, rowIndex2) {
                try {
                    if ($('.CityRow').length > 0) {
                        //포커스된 행 변경
                        if ($($('.CityRow')[rowIndex1]).attr('value') % 2 == 1) {
                            $($('.CityRow')[rowIndex1]).css('backgroundColor', '#FDF2FA');
                            $($('.CityRow')[rowIndex1]).css('fontWeight', '');
                        }
                        else {
                            $($('.CityRow')[rowIndex1]).css('backgroundColor', '#FFFFFF');
                            $($('.CityRow')[rowIndex1]).css('fontWeight', '');
                        }

                        $($('.CityRow')[rowIndex2]).css('backgroundColor', '#F8C0E7');
                        $($('.CityRow')[rowIndex2]).css('fontWeight', 'bold');

                        this.Control.unbind('blur');
                        $($('.CityRow')[rowIndex2]).focus();
                        this.Control.focus();

                        var THAT = this;

                        setTimeout(function() {
                            THAT.Control.bind('blur', function(e) {
                                THAT.hide();
                            });
                        }, 100);
                    }
                } catch (e) {
                    alert(e.message);
                }
            };
            this.onSelectValue = function(jObj) {
                //포커스된 행 선택
                this.selectedValue = jObj.next().toggle().attr('value');
                this.Control.attr('value', this.selectedText = jObj.text());
                this.hide();

                if (this.callBack != undefined) {
                    this.callBack(this.selectedValue);
                }

                this.setLandmark("");
                this.setWardCode("");

            };
            this.setLandmark = function(LandmarkCode) {
                if (this.landmarkControl != undefined) {
                    //도시내 주요지점 셋팅
                    if (THAT.selectedValue != "") {
                        hn_proxy.ws.call({
                            wsname: hn_proxy.ws.landmarkList,
                            value: THAT.selectedValue,
                            success: function(xmlString, textStatus) {
                                //xml 파싱...
                                try {
                                    var xmlDom = new ju.dt.xml(xmlString);
                                    var result = xmlDom.selectNodes("Response/ResponseContent/getLGLandCodeList/RESULT_INFO/RESULT_DATA");

                                    THAT.landmarkControl.empty();
                                    THAT.landmarkControl.append("<option value=''>주요지점 근처의 호텔검색</option>");

                                    //sort

                                    for (var i = 0; i < result.length; i++) {
                                        var option = document.createElement('option');
                                        option.value = result[i].selectSingleNode("CITY_AREA_CODE").text;
                                        option.appendChild(document.createTextNode(result[i].selectSingleNode("CITY_AREA_KNAME").text));

                                        THAT.landmarkControl.append(option);
                                    };

                                    THAT.landmarkControl.val(LandmarkCode);
                                }
                                catch (e) {
                                    alert(e.message);
                                }
                            },
                            error: function(XMLHttpRequest, textStatus, errorThrown) {
                                alert("error : " + textStatus);
                            }
                        });
                    }
                }
            };
            //국내의 경우 구를 셋팅한다.
            this.setWardCode = function(WardCode) {
                if (this.wardCodeControl != undefined) {

                    if (THAT.selectedValue != "") {

                        hn_proxy.ws.call({
                            wsname: hn_proxy.ws.getWardCodeList,
                            CityCode: THAT.selectedValue,
                            success: function(xmlString, textStatus) {
                                //성공
                                $('#sltWardCode').empty();
                                $('#sltWardCode').append("<option value=''>구 선택</option>");

                                try {
                                    var xmlDom = new ju.dt.xml(xmlString);
                                    var result = xmlDom.selectNodes("getWardCodeList/WardCodes");

                                    for (var i = 0; i < result.length; i++) {
                                        var option = document.createElement('option');
                                        option.value = result[i].selectSingleNode("WARDCODE").text;
                                        option.appendChild(document.createTextNode(result[i].selectSingleNode("WARDNAME").text));

                                        $('#sltWardCode').append(option);
                                    };

                                    THAT.wardCodeControl.val(WardCode);
                                }
                                catch (e) {
                                    alert(e.message);
                                }
                            },
                            error: function(XMLHttpRequest, textStatus, errorThrown) {
                                //에러
                                alert(textStatus);
                            }
                        });
                    }
                }
            };
            this.show = function() {
                //검색 결과 리스트 출력
                //검색 시작
                if (!this.loaded) {
                    this.row = 0;
                    this.Control.val('');

                    this.listBox.html(this.InfoHTML);

                    this.reSize();

                    this.listBox.show();

                    var THAT = this;
                    $(window).bind('resize', function() {
                        THAT.reSize();
                    });
                }
                this.loaded = true;
            };
            this.hide = function() {
                try {
                    if (this.loaded) {
                        this.bgframe.hide();

                        //텍스트가 빈값, 도시코드가 선택되어 있지 않다면 기본 텍스트를 셋팅.            
                        if (THAT.selectedValue != "") {
                            //도시코드가 셋팅되어 있으면 선택한 텍스트를 복구한다.
                            this.Control.attr('value', this.selectedText);
                        }
                        else {
                            this.Control.attr('value', this.BasicText);
                        }

                        //검색 결과 리스트 숨김
                        if (this.listBox.css('display') == 'block') {
                            this.listBox.hide();
                        }

                        this.loaded = false;
                        $('body').focus();

                        $(window).unbind('resize');
                    }
                }
                catch (e) {
                    alert(e.message);
                }
            };
            
            this.hide2 = function() {
                try {
                    if (this.loaded) {
                    
                        if (THAT.selectedValue != "" && this.Control.attr('value') == "") {
                            //도시코드가 셋팅되어 있으면 선택한 텍스트를 복구한다.
                            this.Control.attr('value', this.selectedText);
                            this.bgframe.hide();
								
							//검색 결과 리스트 숨김
							if (this.listBox.css('display') == 'block') {
								this.listBox.hide();
							}

							this.loaded = false;
							$('body').focus();

							$(window).unbind('resize');
                        }
                        else {
							if (this.Control.attr('value') == "" || this.Control.attr('value') == this.BasicText){
								this.Control.attr('value', this.BasicText);
								this.bgframe.hide();
								
								//검색 결과 리스트 숨김
								if (this.listBox.css('display') == 'block') {
									this.listBox.hide();
								}

								this.loaded = false;
								$('body').focus();

								$(window).unbind('resize');
							}
						}

                    }
                }
                catch (e) {
                    alert(e.message);
                }
            };
            
            this.setValue = function(CityCode, CityCodeText, LandmakrCode, WardCode) {
                //값 셋팅.
                if (CityCode != "" && CityCode != undefined) {
                    this.selectedValue = CityCode;

                    if (LandmakrCode != undefined) {
                        this.setLandmark(LandmakrCode);
                    }
                    if (WardCode != undefined) {
                        this.setWardCode(WardCode)
                    }

                    var THAT = this;
                    //text가 없으면 웹서비스를 검색하여 셋팅한다.
                    hn_proxy.ws.call({
                        wsname: (THAT.isDomestic) ? hn_proxy.ws.citySearchDom : hn_proxy.ws.citySearch,
                        value: CityCode,
                        success: function(xmlString, textStatus) {
                            var xmlDom = new ju.dt.xml(xmlString);
                            var rootname = (THAT.isDomestic) ? "getLGSearchedCityList" : "getSearchAbrCity";

                            var result = xmlDom.selectSingleNode("Response/ResponseContent/" + rootname + "/RESULT_INFO/RESULT_DATA[CITY_CODE ='" + CityCode + "']");

                            var text = (THAT.isDomestic) ?
                                result.selectSingleNode("CITY_ENAME").text + " (" + result.selectSingleNode("CITY_KNAME").text + ") [" + result.selectSingleNode("CITY_CODE").text + "]" :
                                result.selectSingleNode("CITY_ENAME").text + " (" + result.selectSingleNode("CITY_KNAME").text + ") [" + result.selectSingleNode("CITY_CODE").text + "] - " + result.selectSingleNode("COUNTRY_KNAME").text;

                            THAT.setLandmark(CityCode);

                            if (THAT.callBack != undefined) {
                                THAT.callBack(THAT.selectedValue);
                            }

                            THAT.selectedText = text;
                            THAT.Control.val(text);
                        },
                        error: function(XMLHttpRequest, textStatus, errorThrown) {
                            alert("error : " + textStatus);
                        }
                    });
                }
            };
            this.bgframe = $('<iframe frameborder="0"/>').appendTo('body').hide();

            this.reSize = function() {
                var pos = this.Control.offset();

                this.listBox.css({
                    left: parseInt(pos.left),
                    top: parseInt(pos.top) + 20
                });

                this.bgframe.css(
                {
                    width: 293,
                    height: 100,
                    position: 'absolute',
                    left: parseInt(pos.left) - 1,
                    top: parseInt(pos.top) + 20,
                    zIndex: 300,
                    border: 0
                });
                this.bgframe.show();
            };

            return this;
        }
        catch (e) {
            alert(e.message);
        }
    };



});