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 += "
\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 = '';
}
_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';
}
}