1// 2// -------------------------------------------------------------------- 3// Copyright (c) 2007 - 2015 Business Search Technologies Corporation 4// -------------------------------------------------------------------- 5// 6 7function popTerm(param) { 8 var self = this; 9 if (param === undefined || param === null) param = {}; 10 11 self.disable = 0; 12 self.interval = 200; 13 self.param = param; 14 15 self.url = ''; 16 if (param.url !== undefined ) { 17 self.url = param.url; 18 } 19 self.targetid = 'query'; 20 if (param.targetid !== undefined ) { 21 self.targetid = param.targetid; 22 } 23 self.targetname = null; 24 if (param.query !== undefined) { 25 self.targetname = param.query; 26 } 27 self.trid = '0'; 28 if (param.trid !== undefined) { 29 self.trid = param.trid; 30 } 31 self.maxitems = '10'; 32 if (param.show_count !== undefined ) { 33 self.maxitems = param.show_count; 34 } 35 if (param.maxitems !== undefined) { 36 self.maxitems = param.maxitems; 37 } 38 self.colnum = '1'; 39 if (param.colnum !== undefined) { 40 self.colnum = param.colnum; 41 } 42 self.id = 'popterm'; 43 if (param.id !== undefined) { 44 self.id = param.id; 45 } 46 if (param.css !== undefined) { 47 self.css = param.css; 48 } 49 self.enter = ''; 50 if (param.enter !== undefined) { 51 self.enter = param.enter; 52 } 53 self.matchtype = 'begin'; 54 if (param.matchtype !== undefined) { 55 self.matchtype = param.matchtype; 56 } 57 58 self.ua = navigator.userAgent.toLowerCase(); 59 self.vr = navigator.appVersion.toLowerCase(); 60 if (param.css_ie7 !== undefined && /msie *7/.test(self.ua)) self.css = param.css_ie7; 61 if (param.css_ie8 !== undefined && /msie *8/.test(self.ua)) self.css = param.css_ie8; 62 if (param.css_ie9 !== undefined && /msie *9/.test(self.ua)) self.css = param.css_ie9; 63 if (param.css_ie10 !== undefined && /msie *10/.test(self.ua)) self.css = param.css_ie10; 64 if (param.css_ie11 !== undefined && /trident.*rv:11/.test(self.ua)) self.css = param.css_ie11; 65 if (param.css_ff !== undefined && /firefox/.test(self.ua)) self.css = param.css_ff; 66 if (param.css_gc !== undefined && /chrome/.test(self.ua)) self.css = param.css_gc; 67 if (param.css_op !== undefined && /opera/.test(self.ua)) self.css = param.css_op; 68 if (param.css_sf !== undefined && /applewebkit/.test(self.ua)) self.css = param.css_sf; 69 70 self.is_ios = false; 71 if(/iphone|ipad/.test(self.ua)) self.is_ios = true; 72 73 if(self.url === '') { 74 return {}; 75 } 76 77 self.query = ''; 78 self.list = []; 79 self.menu = null; 80 self.menu_top = null; 81 self.menu_bottom = null; 82 self.current = null; 83 var i; 84 var a = document.getElementsByTagName('input'); 85 for (i = 0; i < a.length; i++) { 86 if (a[i].getAttribute('id') === self.targetid) { 87 self.target = a[i]; 88 break; 89 } 90 } 91 if (self.targetname !== null) { 92 self.target = document.getElementsByName(self.targetname)[0]; 93 } 94 self.cbfunc = 'probo_popterm_callback_' + (new Date()).getTime(); 95 self.tbd = null; 96 self.track = 0; 97 98 self.initialize = function () { 99 self.f_createtbl(); 100 self.f_construct(); 101 var x = self.target; 102 if(self.is_ios !== true) { 103 x.setAttribute('autocomplete', 'off'); 104 } 105 self.bindevent(x, "focus", self.h_focus); 106 self.bindevent(x, "blur", self.h_blur); 107 self.bindevent(x, "keyup", self.h_keyup); 108 self.bindevent(x, "keydown", self.h_keydown); 109 self.query = self.target.value; 110 self.f_hide(); 111 self.poling(); 112 }; 113 114 self.f_createtbl = function () { 115 self.menu = document.createElement("table"); 116 self.menu.setAttribute("id", self.id); 117 var pp = self.target.parentNode; 118 pp.insertBefore(self.menu, self.target.nextSibling); 119 self.menu.style.position = "absolute"; 120 self.menu.style.display = "inline"; 121 var tbd = document.createElement("tbody"); 122 self.menu.appendChild(tbd); 123 self.tbd = tbd; 124 if (self.css != null) { 125 var c = document.createElement('link'); 126 c.setAttribute('rel', 'stylesheet'); 127 c.setAttribute('type', 'text/css'); 128 c.setAttribute('href', self.css); 129 pp.appendChild(c); 130 } 131 }; 132 133 self.f_construct = function () { 134 var tr; 135 var tbd = document.createElement("tbody"); 136 for (i = 0; i < self.list.length; i++) { 137 var rec = self.list[i]; 138 tr = document.createElement("tr"); 139 for (j = 0; j < rec.length && j < self.colnum ; j++) { 140 var val = rec[j]; 141 var td = document.createElement("td"); 142 document.all ? td.innerText = val : td.textContent = val; 143 if (self.param.fit_searchbox_width !== "off") { 144 td.style.width = self.getWidth(self.target); 145 } 146 tr.appendChild(td); 147 }
148 self.bindevent (tr, "mousedown", self.h_menu_mousedown); 149 self.bindevent (tr, "mouseup", self.h_menu_mouseup); 150 self.bindevent (tr, "mouseover", self.h_menu_mouseover); 151 self.bindevent (tr, "mouseout", self.h_menu_mouseout); 152 tbd.appendChild(tr); 153 if (i == 0) self.menu_top = tr; 154 } 155 self.menu_bottom = tr; 156 if (self.param.fit_searchbox_width !== "off") { 157 self.menu.style.width = self.getWidth(self.target); 158 } 159 if (self.param.fit_boxparent_height !== "off") { 160 self.menu.style.marginTop = self.getVOffset2(self.target); 161 self.menu.style.marginLeft = self.getHOffset(self.target); 162 } 163 if (self.param.fit_searchbox_height !== undefined) { 164 self.menu.style.marginTop = self.getVOffset(self.target); 165 self.menu.style.marginLeft = self.getHOffset(self.target); 166 } 167 self.menu.replaceChild(tbd, self.tbd); 168 self.tbd = tbd; 169 }; 170 171 self.f_show = function () { 172 if (!self.menu) return; 173 if (self.disable > 0) return; 174 if (self.list.length == 0) return; 175 self.menu.setAttribute("class", self.id + "_visible"); 176 self.menu.style.visibility = "visible"; 177 self.menu.style.display = "inline"; 178 }; 179 180 self.f_hide = function () { 181 if (!self.menu) return; 182 self.menu.setAttribute('class', self.id + "_hidden"); 183 self.menu.style.visibility = "hidden"; 184 self.menu.style.display = "none"; 185 }; 186 187 self.f_up = function () { 188 if (!self.menu) return; 189 var c = self.current; 190 if (c != null) c = c.previousSibling; 191 if (c == null) c = self.menu_bottom; 192 self.f_highlight(c); 193 }; 194 195 self.f_down = function () { 196 if (!self.menu) return; 197 var c = self.current; 198 if (c != null) c = c.nextSibling; 199 if (c == null) c = self.menu_top; 200 self.f_highlight(c); 201 }; 202 203 self.f_highlight = function (e) { 204 var r = self.menu.getElementsByTagName('tr'); 205 var i; 206 for (i = 0; i < r.length; i++) { 207 var c = '\v' == 'v' ? 'className' : 'class'; 208 if (document.documentMode == 8) c = 'class'; 209 if (r[i] === e) { 210 self.current = e; 211 r[i].setAttribute(c , self.id + '_selected'); 212 } else { 213 r[i].removeAttribute(c); 214 } 215 } 216 }; 217 218 self.f_select = function () { 219 var e = self.current; 220 if (e === null) return; 221 var d = e.getElementsByTagName('td'); 222 var t = document.all ? d[0].innerText : d[0].textContent; 223 224 if(self.is_ios == false) { 225 self.target.value = t; 226 self.query = t; 227 if(self.popterm_click){ self.popterm_click( t ); } 228 }else{ 229 self.target.blur(); 230 window.setTimeout(function(){ 231 self.target.focus(); 232 self.target.value = t; 233 self.query = t; 234 if(self.popterm_click){ self.popterm_click( t ); } 235 self.update(); 236 },100); 237 } 238 }; 239 240 self.h_menu_mouseover = function () { 241 var e = document.all ? event.srcElement.parentNode : this; 242 self.f_highlight(e); 243 }; 244 245 self.h_menu_mouseout = function () { 246 var e = document.all ? event.srcElement.parentNode : this; 247 self.f_highlight(null); 248 self.current = null; 249 }; 250 251 self.h_menu_mouseup = function () { 252 self.endtrack(); 253 if(self.is_ios === true) { 254 var e = document.all ? event.srcElement.parentNode : this; 255 self.current = e; 256 self.f_select(); 257 }else{ 258 self.f_select(); 259 self.update(); 260 } 261 self.target.focus(); 262 }; 263 264 self.h_menu_mousedown = function () { 265 var e = document.all ? event.srcElement.parentNode : this; 266 self.current = e; 267 self.starttrack(); 268 }; 269 270 self.h_focus = function () { 271 self.current = null; 272 self.update(); 273 self.f_highlight(null); 274 self.f_show(); 275 }; 276 277 self.h_blur = function () { 278 if (self.track != 0) return; 279 self.f_hide(); 280 self.current = null; 281 self.f_highlight(null); 282 }; 283 284 self.h_keydown = function (e) { 285 var k = e.keyCode ? e.keyCode : e.charCode; 286 if (k == 27) { 287 self.f_hide(); 288 //self.disable = 1; 289 return; 290 } 291 else if (k == 38) self.f_up(); 292 else if (k == 40) self.f_down(); 293 else if (k == 13) { 294 if (self.current === null) return; 295 self.f_select();
296 self.update(); 297 if (self.enter !== 'submit') { 298 self.cancelevent (e); 299 } 300 self.f_hide(); 301 return; 302 } 303 else if (k == 39) { 304 if (self.current === null) return; 305 self.f_select(); 306 self.update(); 307 } 308 self.f_show(); 309 }; 310 311 self.h_keyup = function (e) { 312 var k = e.keyCode; 313 }; 314 315 self.starttrack = function () { 316 self.track = 1; 317 var e = document.all ? document.body : document; 318 self.bindevent(e, "mouseup", self.h_menu_mouseup); 319 }; 320 321 self.endtrack = function () { 322 var e = document.all ? document.body : document; 323 self.unbindevent(e, "mouseup", self.h_menu_mouseup); 324 self.track = 0; 325 }; 326 327 self.bindevent = function (target, event, handler) { 328 if (target.addEventListener) { 329 target.addEventListener (event, handler, false); 330 } else { 331 target.attachEvent ("on" + event, handler); 332 } 333 }; 334 335 self.unbindevent = function (target, event, handler) { 336 if (target.removeEventListener) { 337 target.removeEventListener (event, handler, false); 338 } else { 339 target.detachEvent ("on" + event, handler); 340 } 341 }; 342 343 self.cancelevent = function (event) { 344 if (event.preventDefault) { 345 event.preventDefault(); 346 } else { 347 window.event.returnValue = false; 348 } 349 }; 350 351 self.cancelbubble = function (event) { 352 if (event.stopPropagation) { 353 event.stopPropagation(); 354 } else { 355 window.event.cancelBubble = true; 356 } 357 }; 358 359 self.getwidth = function (e) { 360 if (document.defaultView) { 361 var t = document.defaultView.getComputedStyle(e, null); 362 return t.getPropertyValue('width'); 363 } 364 else if (e.offsetWidth) { 365 return e.offsetWidth; 366 } 367 return 0; 368 }; 369 370 self.getheight = function (e) { 371 if (document.defaultView) { 372 var t = document.defaultView.getComputedStyle(e, null); 373 return t.getPropertyValue('height'); 374 } 375 else if (e.offsetHeight) { 376 return e.offsetHeight; 377 } 378 return 0; 379 }; 380 381 self.getBorderWidth = function (e) { 382 var l = 0, r = 0, t = 0, b = 0; 383 if (e.currentStyle) { 384 l = e.currentStyle.borderLeftWidth; 385 r = e.currentStyle.borderRightWidth; 386 t = e.currentStyle.borderTopWidth; 387 b = e.currentStyle.borderBottomWidth; 388 } 389 else if (window.getComputedStyle) { 390 var x = window.getComputedStyle(e, null); 391 l = x.borderLeftWidth; 392 r = x.borderRightWidth; 393 t = x.borderTopWidth; 394 b = x.borderBottomWidth; 395 } 396 l = parseInt(l); 397 r = parseInt(r); 398 t = parseInt(t); 399 b = parseInt(b); 400 if (isNaN(l)) l = 0; 401 if (isNaN(r)) r = 0; 402 if (isNaN(t)) t = 0; 403 if (isNaN(b)) b = 0; 404 return {'left':l, 'right':r, 'top':t, 'bottom':b}; 405 }; 406 407 self.getMargin = function (e) { 408 var l = 0, r = 0, t = 0, b = 0; 409 if (e.currentStyle) { 410 l = e.currentStyle.marginLeft; 411 r = e.currentStyle.marginRight; 412 t = e.currentStyle.marginTop; 413 b = e.currentStyle.marginBottom; 414 } 415 else if (window.getComputedStyle) { 416 var x = window.getComputedStyle(e, null); 417 l = x.marginLeft; 418 r = x.marginRight; 419 t = x.marginTop; 420 b = x.marginBottom; 421 } 422 l = parseInt(l); 423 r = parseInt(r); 424 t = parseInt(t); 425 b = parseInt(b); 426 if (isNaN(l)) l = 0; 427 if (isNaN(r)) r = 0; 428 if (isNaN(t)) t = 0; 429 if (isNaN(b)) b = 0; 430 return {'left':l, 'right':r, 'top':t, 'bottom':b}; 431 }; 432 433 self.getPadding = function (e) { 434 var l = 0, r = 0, t = 0, b = 0; 435 if (e.currentStyle) { 436 l = e.currentStyle.paddingLeft; 437 r = e.currentStyle.paddingRight; 438 t = e.currentStyle.paddingTop; 439 b = e.currentStyle.paddingBottom; 440 } 441 else if (window.getComputedStyle) { 442 var x = window.getComputedStyle(e, null); 443 l = x.paddingLeft; 444 r = x.paddingRight; 445 t = x.paddingTop; 446 b = x.paddingBottom; 447 } 448 l = parseInt(l); 449 r = parseInt(r); 450 t = parseInt(t); 451 b = parseInt(b); 452 if (isNaN(l)) l = 0; 453 if (isNaN(r)) r = 0; 454 if (isNaN(t)) t = 0; 455 if (isNaN(b)) b = 0; 456 return {'left':l, 'right':r, 'top':t, 'bottom':b}; 457 }; 458 459 self.getLineheight = function (e) { 460 var r = 0; 461 if (e.currentStyle) { 462 r = e.currentStyle.lineHeight; 463 } 464 else if (window.getComputedStyle) { 465 r = window.getComputedStyle(e, null).lineHeight; 466 } 467 r = parseInt(r); 468 if (isNaN(r)) r = 0; 469 return r; 470 }; 471 472 self.getBoxsizing = function (e) { 473 var r = ''; 474 if (e.currentStyle) { 475 if (e.currentStyle.boxSizing !== undefined) 476 r = e.currentStyle.boxSizing; 477 } 478 else if (window.getComputedStyle) { 479 if (window.getComputedStyle(e, null).boxSizing !== undefined) 480 r = window.getComputedStyle(e, null).boxSizing; 481 } 482 return r; 483 }; 484 485 self.getWidth = function (e) { 486 var w = parseInt(self.getwidth(e)); 487 var b = self.getBorderWidth(e); 488 var m = self.getMargin(e); 489 var p = self.getPadding(e); 490 var r = w + b.left + b.right + p.left + p.right; 491 var box = self.getBoxsizing(e); 492 if (/msie */.test(self.ua) || /trident.*rv:11/.test(self.ua)) { 493 if (document.documentMode ) { 494 if (document.documentMode < 9) r = w; 495 } else { 496 r = w; 497 } 498 }else if (/border-box/.test(box)){ 499 r = w; 500 } 501 return r + "px"; 502 }; 503 504 self.getVOffset = function (e) { 505 var h = parseInt(self.getheight(e)); 506 var b = self.getBorderWidth(e); 507 var m = self.getMargin(e); 508 var p = self.getPadding(e); 509 var l = self.getLineheight(e); 510 var box = self.getBoxsizing(e); 511 var r = h + b.top + b.bottom + p.top + p.bottom + m.top; 512 if (/msie */.test(self.ua) || /trident.*rv:11/.test(self.ua)) { 513 if (document.documentMode ) { 514 if (document.documentMode < 9) r = h + m.top; 515 } else { 516 r = h + m.top; 517 } 518 }else if(/border-box/.test(box)) { 519 r = h; 520 } 521 return r + "px"; 522 }; 523 524 self.getVOffset2 = function (e) { 525 var r = 0; 526 var c = e.parentNode.firstChild; 527 while (c != e.parentNode.lastChild) { 528 if (c.nodeType == 1 && c.getAttribute('id') !== self.id) { 529 var i = parseInt(self.getVOffset (c)); 530 if (r < i) r = i; 531 } 532 c = c.nextSibling; 533 } 534 return r + "px"; 535 }; 536 537 self.getHOffset = function (e) { 538 var w = parseInt(self.getwidth(e)); 539 var b = self.getBorderWidth(e); 540 var m = self.getMargin(e); 541 var p = self.getPadding(e); 542 var r = w + b.left + b.right + m.right + p.left + p.right; 543 var box = self.getBoxsizing(e); 544 if (/msie */.test(self.ua) || /trident.*rv:11/.test(self.ua)) { 545 if (document.documentMode ) { 546 if (document.documentMode < 9) r = w + m.right; 547 } else { 548 r = w + m.right; 549 } 550 } else if (/border-box/.test(box)) { 551 r = w + m.right; 552 } 553 return '-' + r + "px"; 554 }; 555 556 self.update = function () { 557 var r = ''; 558 if (self.query == '') return; 559 if (/msie *7/.test(self.ua)) r = '&o=' + (new Date()).getTime(); 560 var url = this.url + 561 '?callback=' + self.cbfunc + 562 '&trid=' + self.trid + 563 '&k=' + encodeURIComponent(self.query) + 564 '&m=' + self.matchtype +
565 '&c=' + self.maxitems + r; 566 window[self.cbfunc] = function (res) { 567 self.callback (res); 568 }; 569 var sc = document.createElement('script'); 570 sc.src = url; 571 sc.type = 'text/javascript'; 572 sc.charset = 'utf-8'; 573 //sc.async = true; 574 var h = document.getElementsByTagName('head'); 575 h[0].appendChild(sc); 576 }; 577 578 self.callback = function (res) { 579 self.current = null; 580 if(res.error) return; 581 if (res.list === null || res.list.length === 0) { 582 self.list = []; 583 self.f_construct (); 584 self.f_hide(); 585 } else { 586 self.list = res.list; 587 self.f_construct(); 588 self.f_show(); 589 } 590 }; 591 592 self.poling = function () { 593 if (self.query === self.target.value) { 594 ; 595 } 596 else if (self.target.value == '') { 597 self.query = ''; 598 self.current = null; 599 self.list = []; 600 self.f_construct (); 601 self.f_hide (); 602 } else { 603 self.query = self.target.value; 604 self.current = null; 605 self.update (); 606 self.f_construct (); 607 self.f_show (); 608 } 609 setTimeout (self.poling, self.interval); 610 }; 611 612 self.initialize(); 613}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.