var _textbox_forsearch = false; var _textbox_id_default = "searchtab_keywordform"; var _suggest_id_default = "_suggest_disp"; var _suggest_div = false; var _search_selected_text = true; var _form_suggestion = false; var _form_onsubmit_original = false; var _lang = 'th'; var _request_tag_suggest = false; var _mouse_move_after_display_suggestion = false; var _tag_list = false; _request_tag_suggest = true; loadJSON('//map.longdo.com/tagsearch?callback=processTagSuggest'); function processTagSuggest(rs) { _tag_list = rs; } function getTagMatched(key, limit) { if(!limit) limit = 10; var results = []; var result_ids = []; var tag_obj; //^(?=.*meat)(?=.*pasta)(?=.*dinner).* key = key.trim(); key = key.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&"); key = key.replace(/\s+/ig, ")(?=.*"); for (var tag_idx in _tag_list) { tag_obj = _tag_list[tag_idx]; if(typeof _tag_list != 'object' || array_exists(result_ids, tag_obj.id)) continue; var key_regex = new RegExp('(?=.*'+key+').+', 'ig'); if(key_regex.test(tag_obj.name) || key_regex.test(tag_obj.name_en) || key_regex.test(tag_obj.tags)) { results.push({'w': tag_obj.tag, 'd': (_lang == 'th' ? tag_obj.name : tag_obj.name_en), 'icon': tag_obj.imagefile}); result_ids.push(tag_obj.id); if(results.length >= limit) { break; } } } return results; } function array_exists(arr, val) { var i = arr.length; while (i--) { if (arr[i] == val) { return true; } } return false; } function loadJSON(url) { var headID = document.getElementsByTagName("head")[0]; var newScript = document.createElement('script'); newScript.type = 'text/javascript'; newScript.src = url; headID.appendChild(newScript); _suggest_wordposition = -1; _suggest_hlbefore = ''; } var _suggest_suggestlength = 0; var _suggest_entersearch = false; var _suggest_force_wordposition = -1; var suggest_bwt_result = false; function processJSONSuggest(sresult){ if (_suggest_rand_key != _sugg_rand) { return; } suggest_bwt_result = sresult; generateSuggestContent(); } function generateSuggestContent() { var word_position_idx = 0; var htmlresult = ""; var div_width = 231; var style_border_tr = 'border-bottom:1px solid #C6D2E4;' _suggest_suggestlength = 0; if (_request_tag_suggest) { sresult = getTagMatched(_suggest_old_headword); if (sresult.length > 0 ) { //htmlresult += "
"+(_lang == 'th' ? "ค้นหาตามหมวด" : "Search by Category / Tag")+"
\n"; _suggest_suggestlength += sresult.length; for(i=0; i
" + (_lang == 'th' ? "หมวดสถานที่" : "Category") + ": " + d + "
\n"; word_position_idx++; } } } } if (suggest_bwt_result) { sresult = suggest_bwt_result; if (sresult.length > 0 ) { _suggest_suggestlength += sresult.length; for(i=0; i
" + d + "
\n"; word_position_idx++; } } } suggest_bwt_result = false; } if (htmlresult == '') { htmlresult = '
-- '+(_lang == 'th' ? "ไม่พบผลลัพธ์ที่ตรงกับคำค้นหา" : "Keyword did not match any results.")+' --
'; } else { htmlresult = '' + htmlresult + '
'; } _suggest_div.innerHTML= htmlresult; if (_suggest_div.innerHTML != "") { _suggest_div.style.visibility="visible"; _mouse_move_after_display_suggestion = false; // reset state } else { _suggest_div.style.visibility="hidden"; } if (_suggest_force_wordposition != -1) { _suggest_wordposition = _suggest_force_wordposition; _suggest_force_wordposition = -1; var hl = document.getElementById('_sgtr'+_suggest_wordposition); _suggest_L4(hl); _suggest_hlbefore = hl; }; if(_suggest_entersearch) { _suggest_div.style.visibility="hidden"; _suggest_entersearch = false; } } function clearSuggestDiv() { if(!_suggest_div) return; _suggest_div.innerHTML= ""; _suggest_div.style.visibility="hidden"; } function _suggest_L2(x) { if(!x || typeof x == 'undefined') return; x.style.backgroundColor = x.originalbg ? x.originalbg : '#FFF'; x.style.color = x.originalcolor ? x.originalcolor : '#000'; } function _suggest_L4(x) { if(!x || typeof x == 'undefined') return; if(!x.originalbg) x.originalbg = x.style.backgroundColor; if(!x.originalcolor) x.originalcolor = x.style.color; x.style.backgroundColor = '#c7daff'; x.style.color = '#8e3900'; _suggest_wordposition = parseInt(x.id.substr(5)); if(_suggest_hlbefore!='' && _suggest_hlbefore != x) { _suggest_L2(_suggest_hlbefore); _suggest_hlbefore = x; } } function dosuggestClicked(checked) { if (checked) { _suggest_load(_textbox_forsearch.value); } else { clearSuggestDiv(); } } function _set_form_suggestion(form_id) { _form_suggestion = document.getElementById(form_id); } function suggest_navigation_keys_check(e, textbox, suggest_div_id) { if(!_form_suggestion) { // keep form element @ first time var target = window.event ? window.event.srcElement : e.target; if(target && target.form) { _form_suggestion = target.form; } else if(document.getElementById('searchform')) { _form_suggestion = document.getElementById('searchform'); } } if(!_search_selected_text && !_form_onsubmit_original) { _form_onsubmit_original = _form_suggestion.onsubmit; // keep original function @ first time } if(textbox && typeof textbox == 'object') _textbox_forsearch = textbox; else _textbox_forsearch = document.getElementById(_textbox_id_default); if(suggest_div_id && typeof suggest_div_id == 'string') _suggest_div = document.getElementById(suggest_div_id); else _suggest_div = document.getElementById(_suggest_id_default); var keycode; if (window.event) { keycode = window.event.keyCode; // IE } else if (e) keycode = e.which; //Firefox if(_suggest_div && _suggest_div.style.visibility!="hidden"){ switch(keycode) { case 40: //down arrow if(_suggest_wordposition==0 && _suggest_suggestlength==1) return; if(_suggest_wordposition<_suggest_suggestlength-1) { _suggest_wordposition++; } else { _suggest_wordposition = 0; //_suggest_hlbefore = ''; } if(_suggest_hlbefore!='') _suggest_L2(_suggest_hlbefore); var hl = document.getElementById('_sgtr'+_suggest_wordposition); _suggest_L4(hl); _suggest_hlbefore = hl; break; case 37: //left arrow break; case 39: //right arrow break; case 38: //up arrow if(_suggest_wordposition==0 && _suggest_suggestlength==1) return; if(_suggest_wordposition>0) { _suggest_wordposition--; } else { _suggest_wordposition = _suggest_suggestlength-1; } if(_suggest_hlbefore!='') _suggest_L2(_suggest_hlbefore); var hl = document.getElementById('_sgtr'+_suggest_wordposition); _suggest_L4(hl); _suggest_hlbefore = hl; break; case 13://enter if (_suggest_timer) { clearTimeout(_suggest_timer); } _suggest_div.style.visibility="hidden"; var hl = document.getElementById('_sgtr'+_suggest_wordposition); if (hl) { _textbox_forsearch.value = hl.title; _suggest_entersearch = true; //doSearch(''); // form's onsubmit will do that } if(!_search_selected_text && _suggest_wordposition != -1) { _form_suggestion.onsubmit = function() {_form_suggestion.onsubmit = _form_onsubmit_original; return false;} //don't submit form } break; case 27://esc _suggest_div.style.visibility="hidden"; break; default : return true; // nativation keys } } else { if(keycode == 40) { // force suggest _suggest_old_headword = ""; _suggest_force_wordposition = 0; } _suggest_entersearch = false; } } function _rfc3986EncodeURIComponent (str) { return encodeURIComponent(str).replace(/[!'()*]/g, escape); } var _suggest_timer = 0; var _suggest_old_headword = ""; var _suggest_rand_key; function _suggest_load() { var str = _textbox_forsearch.value; if ( str != _suggest_old_headword ) { _suggest_old_headword = str; //str = str.replace(new RegExp(/่|้|๊|๋|.์|็|ุ|ู|ิ|ี|ึ|ื/g), " "); str = str.replace(new RegExp(/'/g), "\\\'"); str = _rfc3986EncodeURIComponent(str); if (_suggest_timer) { clearTimeout(_suggest_timer); } _suggest_rand_key = Math.random(); _suggest_timer = setTimeout("_suggest_doLoad('"+str+"', true)", 300); } } var _suggest_wordposition = -1; var _suggest_hlbefore = ''; function _suggest_doLoad(str, checkkeywithtxtbox) { if (_textbox_forsearch && checkkeywithtxtbox) { if(_textbox_forsearch.value != _suggest_old_headword) return; } if(!str || str.length < 2 || (document.getElementById('dosuggest') && ! document.getElementById('dosuggest').checked) ) { _suggest_div.innerHTML=""; _suggest_div.style.visibility="hidden"; return; } loadJSON('//search.longdo.com/mapsearch/HeadSearch?ds=poi,poi2,poi3,s_pg,nw_s,m2h_s,poi_b,bus_s,s_osmpnt,s_osmline,s_osmpol&sdx=1&anyorder=1&json=1&num=10&callback=var _sugg_rand='+_suggest_rand_key+';processJSONSuggest&accessKey=&key='+str); } function _suggest_setword(str) { if(_textbox_forsearch) _textbox_forsearch.value = str; if(_form_suggestion && _search_selected_text) _form_suggestion.onsubmit(); clearSuggestDiv(); } function setSuggestDivPosition (textbox, suggest_div_id) { if(textbox && typeof textbox == 'object') _textbox_forsearch = textbox; else _textbox_forsearch = document.getElementById(_textbox_id_default); if(suggest_div_id && typeof suggest_div_id == 'string') _suggest_div = document.getElementById(suggest_div_id); else _suggest_div = document.getElementById(_suggest_id_default); if(_textbox_forsearch && _suggest_div) { _suggest_div.style.top = (_textbox_forsearch.offsetTop + _textbox_forsearch.offsetHeight) + 'px'; } }