Changeset 447 for trunk/phpbms/common
- Timestamp:
- 02/27/09 10:58:47 (3 years ago)
- Files:
-
- 1 modified
-
trunk/phpbms/common/javascript/smartsearch.js (modified) (25 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/phpbms/common/javascript/smartsearch.js
r386 r447 38 38 39 39 smartSearch = { 40 40 41 41 displayValue: Array(), 42 42 43 43 triggerLookup: Array(), 44 44 … … 48 48 49 49 committedDisplayValue: Array(), 50 51 changeDisplay: function(e){ 50 51 changeDisplay: function(e){ 52 52 //this sets the time out to do an ajax lookup when they are done typing their search criteria. 53 53 54 54 var display = e.src(); 55 55 var ssID = display.id.substr(3); … … 57 57 if(!smartSearch.displayValue[ssID]) 58 58 smartSearch.displayValue[ssID] = ""; 59 59 60 60 var lookupValue = display.value.trim(); 61 61 62 62 if (lookupValue != smartSearch.displayValue[ssID] && lookupValue != ""){ 63 63 … … 66 66 67 67 smartSearch.triggerLookup[ssID] = window.setTimeout("smartSearch.lookup('"+ssID+"')",250); 68 68 69 69 } else { 70 70 //it's possible they hit the down, up arrow, or the return button … … 73 73 74 74 switch(key){ 75 75 76 76 case 40: 77 77 //move highlight down 78 78 smartSearch.moveSearchHighlight(ssID, "down"); 79 79 break; 80 80 81 81 case 38: 82 82 //move highlight down 83 83 smartSearch.moveSearchHighlight(ssID, "up"); 84 84 break; 85 85 86 86 case 27: 87 87 //cancel 88 88 smartSearch.cancelSearch(null, ssID); 89 89 90 90 }//endswitch 91 91 92 92 }//endif 93 93 94 94 },//end method 95 95 … … 98 98 99 99 lookup: function(ssID, offset){ 100 100 101 101 // We need to do an ajax lookup based on the criteria. 102 102 // Fisrt we need to see if the holding box is visible. 103 // if not we need to create it 103 // if not we need to create it 104 104 if (!smartSearch.searchBox[ssID]) 105 105 smartSearch.createSearchBox(ssID); 106 106 107 107 108 108 var sbResults = getObjectFromID("SBResults-" + ssID); … … 112 112 sbResults.style.height=""; 113 113 } 114 115 var closeButton = getObjectFromID("SBCloseButton-" + ssID); 114 115 var closeButton = getObjectFromID("SBCloseButton-" + ssID); 116 116 closeButton.className = "graphicButtons buttonSpinner"; 117 117 118 118 var searchDisplay = getObjectFromID("ds-" + ssID); 119 119 smartSearch.displayValue[ssID] = searchDisplay.value; 120 120 121 121 var sdbid = getObjectFromID("sdbid-" + ssID); 122 122 123 123 124 124 var theurl = APP_PATH + "smartsearch.php?sdbid=" + encodeURI(sdbid.value) + "&t=" + encodeURI(searchDisplay.value.trim()); 125 125 126 126 if(offset != 0) 127 127 theurl += "&o=" + offset; 128 128 129 129 if(!smartSearch.searchResultsConnects[ssID]) 130 130 smartSearch.searchResultsConnects[ssID] = Array(); … … 144 144 145 145 var numRecords = response.resultRecords.length 146 146 147 147 var totalRecords = response.totalRecords; 148 148 149 var newText=""; 149 var newText=""; 150 150 151 151 if(numRecords) { 152 for(var i=0; i<numRecords; i++){ 152 for(var i=0; i<numRecords; i++){ 153 153 154 154 newText += '\ … … 158 158 </a>'; 159 159 160 160 161 161 }//endfor 162 162 … … 167 167 <div id="SBMoreDiv-' + ssID + '">\ 168 168 <button type="button" id="SBMoreButton-' + ssID +'" class="smallButtons" name="' + (parseInt(offset) + parseInt(numRecords)) + '">more results...</button>\ 169 </div>'; 169 </div>'; 170 170 171 171 }//end if 172 172 173 173 } else { 174 174 175 175 newText = '<div>No Records Found Matching Criteria</div>'; 176 176 177 177 }//endif 178 178 179 179 if(!offset) 180 sbResults.innerHTML = newText; 180 sbResults.innerHTML = newText; 181 181 else 182 182 sbResults.innerHTML += newText; 183 183 184 184 var searchItems = getElementsByClassName("SBSI-" + ssID); 185 185 smartSearch.searchResultsConnects[ssID] = Array(); … … 187 187 for(i=0; i < searchItems.length; i++) 188 188 smartSearch.searchResultsConnects[ssID][smartSearch.searchResultsConnects[ssID].length] = connect(searchItems[i], "onclick", smartSearch.clickSearchResult); 189 189 190 190 var moreButton = getObjectFromID("SBMoreButton-" + ssID); 191 191 if(moreButton) 192 smartSearch.searchResultsConnects[ssID][smartSearch.searchResultsConnects[ssID].length] = connect(moreButton, "onclick", smartSearch.getMoreResults); 192 smartSearch.searchResultsConnects[ssID][smartSearch.searchResultsConnects[ssID].length] = connect(moreButton, "onclick", smartSearch.getMoreResults); 193 193 194 194 closeButton.className = "graphicButtons buttonX"; … … 197 197 198 198 createSearchBox: function(ssID){ 199 199 200 200 //need to grab search box for reference x and ys 201 201 var searchdisplay = getObjectFromID("ds-"+ssID); 202 202 203 203 if(!smartSearch.searchBoxConnects[ssID]) 204 204 smartSearch.searchBoxConnects[ssID] = Array(); 205 205 206 206 if(smartSearch.searchBoxConnects[ssID][0]) 207 207 disconnect(smartSearch.searchBoxConnects[ssID][0]); … … 227 227 newDiv.innerHTML = '<button type="button" id="SBCloseButton-' + ssID + '" class="SBCloseButton graphicButtons buttonSpinner" tabindex="4000"><span>close</span></button>'; 228 228 smartSearch.searchBox[ssID].appendChild(newDiv) 229 229 230 230 newDiv = document.createElement("div"); 231 231 newDiv.id = "SBResults-" + ssID; … … 237 237 newDiv.id = "SBFooter"; 238 238 smartSearch.searchBox[ssID].appendChild(newDiv) 239 239 240 240 searchdisplay.parentNode.appendChild(smartSearch.searchBox[ssID]); 241 241 242 242 var closeButton = getObjectFromID("SBCloseButton-" + ssID); 243 243 244 244 smartSearch.searchBoxConnects[ssID][0] = connect(smartSearch.searchBox[ssID],"onmousedown", smartSearch.mouseDownDropDown); 245 245 smartSearch.searchBoxConnects[ssID][1] = connect(closeButton,"onclick",smartSearch.cancelSearch); 246 246 247 247 },//end method 248 248 … … 253 253 var box = e.src(); 254 254 var ssID = box.id.substr(10) 255 255 256 256 smartSearch.inDropDown[ssID] = true; 257 257 258 258 },//end method - clickDropDown 259 259 … … 261 261 262 262 blurIdent: Array(), 263 263 264 264 blurDisplay: function(e){ 265 265 266 266 var display = e.src(); 267 var ssID = display.id.substr(3); 267 var ssID = display.id.substr(3); 268 268 269 269 if(!smartSearch.inDropDown[ssID]) 270 270 smartSearch.blurIdent[ssID] = window.setTimeout("smartSearch._blurDisplay('" + ssID + "')",200); 271 271 272 272 smartSearch.inDropDown[ssID] = false; 273 274 },//end method 275 276 273 274 },//end method 275 276 277 277 _blurDisplay: function(ssID){ 278 278 279 279 var searchDisplay = getObjectFromID("ds-" + ssID); 280 280 281 281 if(smartSearch.searchBox[ssID] || searchDisplay.value != smartSearch.committedDisplayValue[ssID]){ 282 282 283 283 var highlight = getElementsByClassName("SBSel-"+ssID); 284 284 285 285 if(highlight.length !== 0){ 286 286 287 287 smartSearch.chooseSearchItem(highlight[0]) 288 288 289 289 } else { 290 290 … … 293 293 else 294 294 smartSearch.blankSearch(ssID); 295 295 296 296 }//end if 297 297 298 298 }//end if 299 299 300 300 smartSearch.blurIdent[ssID] = false; 301 301 302 302 },//end method 303 303 304 304 305 305 blankSearch: function(ssID){ 306 307 var searchDisplay = getObjectFromID("ds-" + ssID); 306 307 var searchDisplay = getObjectFromID("ds-" + ssID); 308 308 var valueField = getObjectFromID(ssID); 309 309 310 310 valueField.value = "" 311 311 smartSearch.displayValue[ssID] = ""; … … 324 324 325 325 cancelSearch: function(e, ssID){ 326 326 327 327 if(e){ 328 328 329 329 var thebutton = e.src() 330 330 ssID = thebutton.id.substr(14); 331 331 332 332 }//endif - e 333 334 var searchDisplay = getObjectFromID("ds-" + ssID); 335 336 if(smartSearch.searchBox[ssID]) 333 334 var searchDisplay = getObjectFromID("ds-" + ssID); 335 var freeForm = getObjectFromID("sff-" + ssID); 336 337 if(smartSearch.searchBox[ssID]) 337 338 searchDisplay.parentNode.removeChild(smartSearch.searchBox[ssID]); 338 339 searchDisplay.value = smartSearch.committedDisplayValue[ssID]; 340 smartSearch.displayValue[ssID] = smartSearch.committedDisplayValue[ssID]; 339 340 if(freeForm.value == 0){ 341 342 searchDisplay.value = smartSearch.committedDisplayValue[ssID]; 343 smartSearch.displayValue[ssID] = smartSearch.committedDisplayValue[ssID]; 344 345 }//end free forming wipes 346 341 347 smartSearch.searchBox[ssID] = null; 342 348 343 349 smartSearch.inDropDown[ssID] = false; 344 350 //searchDisplay.blur(); … … 349 355 350 356 clickSearchResult: function(e){ 351 357 352 358 var theItem = e.src(); 353 359 var classes = theItem.className.split(" "); 354 360 var ssID = classes[1].substr(5); 355 361 356 362 window.clearTimeout(smartSearch.blurIdent[ssID]); 357 363 smartSearch.blurIdent[ssID] = false; 358 364 359 365 smartSearch.chooseSearchItem(theItem); 360 366 e.stop(); 361 367 362 368 },//end method 363 369 364 370 365 371 chooseSearchItem: function(atag){ 366 372 367 373 var classes = atag.className.split(" "); 368 374 var ssID = classes[1].substr(5); 369 375 370 376 var valueField = getObjectFromID(ssID); 371 377 var searchDisplay = getObjectFromID("ds-"+ssID); 372 378 373 379 valueField.value = atag.id.substr(3); 374 380 375 381 for(var i=0; i< atag.childNodes.length; i++) 376 382 if(atag.childNodes[i].className) 377 383 if(atag.childNodes[i].className == "SBMain") 378 384 searchDisplay.value = htmlDecode(atag.childNodes[i].innerHTML); 379 385 380 386 smartSearch.committedDisplayValue[ssID] = searchDisplay.value; 381 387 smartSearch.displayValue[ssID] = searchDisplay.value; … … 383 389 //remove the box 384 390 searchDisplay.parentNode.removeChild(smartSearch.searchBox[ssID]); 385 391 386 392 smartSearch.searchBox[ssID] = null; 387 393 388 394 //lastly, if the value field has an onchange we need to trgger it 389 395 //First we check for legacy on changes … … 398 404 399 405 moveSearchHighlight: function(ssID, direction){ 400 406 401 407 var sbResults = getObjectFromID("SBResults-" + ssID); 402 408 var currentItem = 0 403 409 var classes, newClassName 404 410 405 411 if(direction=="down") 406 412 direction = 1; 407 413 else 408 414 direction =-1; 409 415 410 416 for(var i=0; i < sbResults.childNodes.length; i++){ 411 417 412 418 if(sbResults.childNodes[i].className){ 413 419 if(sbResults.childNodes[i].className.indexOf("SBSelected") !== -1){ … … 425 431 }//endif - SBSELECTED 426 432 }//endif - clasname 427 433 428 434 }//endfor 429 435 430 436 var newItem = currentItem + direction 431 437 432 438 while(newItem >= 0 && newItem < sbResults.childNodes.length){ 433 439 434 440 if(sbResults.childNodes[newItem].className){ 435 441 436 442 sbResults.childNodes[newItem].className += " SBSelected SBSel-"+ssID; 437 443 newItem = -1000; 438 439 }else 444 445 }else 440 446 newItem += direction 441 447 442 448 }//endwhile 443 449 444 450 }, //endif 445 451 446 452 447 453 getMoreResults: function(e){ 448 454 449 455 var button = e.src(); 450 456 var ssID = button.id.substr(13); … … 452 458 window.clearTimeout(smartSearch.blurIdent[ssID]); 453 459 smartSearch.blurIdent[ssID] = false; 454 460 455 461 var thediv = button.parentNode; 456 462 457 463 thediv.parentNode.removeChild(thediv); 458 464 459 465 var sbResults = getObjectFromID("SBResults-" + ssID); 460 466 sbResults.style.height = "330px"; 461 462 var offset = button.name 467 468 var offset = button.name 463 469 button.id = "invalid-removed"; 464 465 smartSearch.lookup(ssID, offset); 466 470 471 smartSearch.lookup(ssID, offset); 472 467 473 var searchDisplay = getObjectFromID("ds-" + ssID); 468 474 searchDisplay.focus(); 469 475 470 476 }//end method 471 477 472 478 }//end struct 473 479 … … 475 481 /* ------------------------------------------------------- */ 476 482 connect(window,"onload",function() { 477 483 478 484 //grab all smart search boxes 479 485 var smartSearches = getElementsByClassName("inputSmartSearch"); … … 486 492 487 493 var ssID = smartSearches[i].id.substr(3); 488 494 489 495 smartSearch.displayValue[ssID] = smartSearches[i].value; 490 496 smartSearch.committedDisplayValue[ssID] = smartSearches[i].value; 491 497 492 498 }//endfor smartSearches 493 494 499 500 495 501 })