|     // resetの場合true | 
|     // NamaとId ともに変更しない場合true | 
|     // 新しい値設定した場合false | 
|     function resetValue(htmlId){ | 
|         v = j$(escapeVfId(htmlId)).value(); | 
|         vb = j$(escapeVfId(htmlId + 'Hidden')).value(); | 
|         vid = j$(escapeVfId(htmlId + 'Id')).value(); | 
|         vidb = j$(escapeVfId(htmlId + 'HiddenId')).value(); | 
|          | 
|         // NamaとId ともに変更しない場合 | 
|         if(v == vb){ | 
|             if(vid == vidb){ | 
|                 return true; | 
|             } | 
|         } | 
|         if(v == null || v == ''){ | 
|             j$(escapeVfId(htmlId + 'Hidden')).val(''); | 
|             j$(escapeVfId(htmlId + 'Id')).val(''); | 
|             j$(escapeVfId(htmlId + 'HiddenId')).val(''); | 
|             return false; | 
|         } | 
|         // Id全部空っぽ(つまりsuggestからIdを設定できていない) | 
|         if(vid == '' && vidb == '') { | 
|             j$(escapeVfId(htmlId)).val(''); | 
|             j$(escapeVfId(htmlId + 'Hidden')).val(''); | 
|             return false; | 
|         } | 
|         // Name全部空っぽ(ありえない) | 
|         if(v == '' && vb == '') { | 
|             j$(escapeVfId(htmlId + 'Id')).val(''); | 
|             j$(escapeVfId(htmlId + 'HiddenId')).val(''); | 
|             return false; | 
|         } | 
|         // Id一致Name変更(reset) | 
|         if(vid == vidb){ | 
|             if(v != vb){ | 
|                 j$(escapeVfId(htmlId)).val(vb); | 
|                 return true; | 
|             } | 
|         } | 
|         // Name一致Id変更(suggest選択) | 
|         if(v == vb){ | 
|             if(vid != vidb){ | 
|                 j$(escapeVfId(htmlId + 'Hidden')).val(v); | 
|                 j$(escapeVfId(htmlId + 'HiddenId')).val(vid); | 
|                 return false; | 
|             } | 
|         } | 
|         // Id と Name ともに違う場合 | 
|         j$(escapeVfId(htmlId + 'Hidden')).val(v); | 
|         j$(escapeVfId(htmlId + 'HiddenId')).val(vid); | 
|         return false; | 
|     } | 
|   | 
|     /* | 
|      *  jquery.suggest 1.1 - 2007-08-06 | 
|      *   | 
|      *  Uses code and techniques from following libraries: | 
|      *  1. http://www.dyve.net/jquery/?autocomplete | 
|      *  2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js   | 
|      * | 
|      *  All the new stuff written by Peter Vulgaris (www.vulgarisoip.com)    | 
|      *  Feel free to do whatever you want with this file | 
|      * | 
|      */ | 
|      | 
|     (function($) { | 
|   | 
|         $.suggest = function(input, options) { | 
|             var $input = $(input).attr("autocomplete", "off"); | 
|             var $results = $(document.createElement("ul")); | 
|   | 
|             var timeout = false;        // hold timeout ID for suggestion results to appear  | 
|             var prevLength = 0;         // last recorded length of $input.value() | 
|             var cache = [];             // cache MRU list | 
|             var beforerequest = null; | 
|             var cacheSize = 0;          // size of cache in chars (bytes?) | 
| /*------------------------------ by katsu --------*/ | 
|             //$results.addClass(options.resultsClass).appendTo('body'); | 
|             //resetPosition(); | 
|             if ($input.attr("jquerysuggest") == "on") { | 
|                 // aleady bind suggest | 
|                 $results = $("#jquerysuggest"); | 
|             } else { | 
|                 $("#jquerysuggest").remove(); | 
|                 $results.addClass(options.resultsClass).appendTo('body'); | 
|                 resetPosition(); | 
|             } | 
|             $input.attr("jquerysuggest", "on"); | 
|             $results.attr("id", "jquerysuggest"); | 
| /*------------------------------------------------*/ | 
|   | 
|             $(window) | 
|                 .load(resetPosition)        // just in case user is changing size of page while loading | 
|                 .resize(resetPosition); | 
|   | 
| /*------------------------------ by systemconcept --------*/ | 
|             //$input.blur(function() { | 
|             //  setTimeout(function() { $results.hide() }, 200); | 
|             //}); | 
|             $input.attr("jquerysuggest_skip_flag", "false"); | 
|             $input.blur( | 
|                 function() { | 
|                     setTimeout( | 
|                         function() { | 
|                             if($input.attr("jquerysuggest_skip_flag") == "false") { | 
|                                 $results.hide(); | 
|                                 $input.removeAttr("jquerysuggest"); | 
|                             } else { | 
|                                 $input.focus(); | 
|                                 $input.attr("jquerysuggest_skip_flag", "false"); | 
|                             } | 
|                         }, | 
|                         200 | 
|                     ); | 
|                 } | 
|             ); | 
|             $results.mousedown(function() { $input.attr("jquerysuggest_skip_flag", "true"); }); | 
| /*--------------------------------------------------------*/ | 
|             // help IE users if possible | 
|             try { | 
|                 $results.bgiframe(); | 
|             } catch(e) { } | 
|   | 
|   | 
|             // I really hate browser detection, but I don't see any other way | 
|             if ($.browser.mozilla) | 
|                 $input.keypress(processKey);    // onkeypress repeats arrow keys in Mozilla/Opera | 
|             else | 
|                 $input.keydown(processKey);     // onkeydown repeats arrow keys in IE/Safari | 
|              | 
|   | 
|   | 
|   | 
|             function resetPosition() { | 
|                 // requires jquery.dimension plugin | 
|                 var offset = $input.offset(); | 
|                 $results.css({ | 
|                     top: (offset.top + input.offsetHeight) + 'px', | 
|                     left: offset.left + 'px' | 
|                 }); | 
|             } | 
|              | 
|              | 
|             function processKey(e) { | 
|                  | 
|                 // handling up/down/escape requires results to be visible | 
|                 // handling enter/tab requires that AND a result to be selected | 
|                 if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) || | 
|                     (/^13$|^9$/.test(e.keyCode) && getCurrentResult())) { | 
|                      | 
|                     if (e.preventDefault) | 
|                         e.preventDefault(); | 
|                     if (e.stopPropagation) | 
|                         e.stopPropagation(); | 
|   | 
|                     e.cancelBubble = true; | 
|                     e.returnValue = false; | 
|                  | 
|                     switch(e.keyCode) { | 
|      | 
|                         case 38: // up | 
|                             prevResult(); | 
|                             break; | 
|                  | 
|                         case 40: // down | 
|                             nextResult(); | 
|                             break; | 
|      | 
|                         case 9:  // tab | 
|                         case 13: // return | 
|                             selectCurrentResult(); | 
|                             break; | 
|                              | 
|                         case 27: // escape | 
|                             $results.hide(); | 
|                             $input.removeAttr("jquerysuggest"); | 
|                             break; | 
|      | 
|                     } | 
|                      | 
|                 } else if ($input.value().length != prevLength) { | 
|                     if (e.keyCode == 9) { | 
|                         return; | 
|                     } | 
|                     if (timeout)  | 
|                         clearTimeout(timeout); | 
|                     timeout = setTimeout(suggest, options.delay); | 
|                     prevLength = $input.value().length; | 
|                      | 
|                 }            | 
|                      | 
|                  | 
|             } | 
|              | 
|              | 
|             function suggest() { | 
|              | 
|                 var q = $.trim($input.value()); | 
|                 var qwords = []; | 
|                 if (options.minwords > 0 && q.length > 0) { | 
|                     var qwordstmp = q.split(" "); | 
|                     for (var i = 0; i < qwordstmp.length; i++) { | 
|                         if (qwordstmp[i] != "" && qwordstmp[i] != " ") { | 
|                             qwords.push(qwordstmp[i]); | 
|                         } | 
|                     } | 
|                 } | 
|   | 
|                 if (qwords.length >= options.minwords || q.length >= options.minchars) { | 
|                      | 
| //                  cached = checkCache(q); | 
|                      | 
| //                  if (cached) { | 
|                      | 
| //                      displayItems(cached['items']); | 
|                          | 
| //                  } else { | 
|                         if (beforerequest != null) { | 
|                             beforerequest.abort(); | 
|                         } | 
|                         beforerequest = $.get(options.source, {q: q}, function(txt) { | 
|   | 
|                             $results.hide(); | 
|                             $input.removeAttr("jquerysuggest"); | 
|                              | 
|                             var items = parseTxt(txt, q); | 
|                              | 
|                             displayItems(items); | 
| //                          addToCache(q, items, txt.length); | 
|                              | 
|                         }); | 
|                          | 
| //                  } | 
|                      | 
|                 } else { | 
|                     $results.hide(); | 
|                     $input.removeAttr("jquerysuggest"); | 
|                 } | 
|                  | 
|             } | 
|              | 
|              | 
|             function checkCache(q) { | 
|   | 
|                 for (var i = 0; i < cache.length; i++) | 
|                     if (cache[i]['q'] == q) { | 
|                         cache.unshift(cache.splice(i, 1)[0]); | 
|                         return cache[0]; | 
|                     } | 
|                  | 
|                 return false; | 
|              | 
|             } | 
|              | 
|             function addToCache(q, items, size) { | 
|   | 
|                 while (cache.length && (cacheSize + size > options.maxCacheSize)) { | 
|                     var cached = cache.pop(); | 
|                     cacheSize -= cached['size']; | 
|                 } | 
|                  | 
|                 cache.push({ | 
|                     q: q, | 
|                     size: size, | 
|                     items: items | 
|                     }); | 
|                      | 
|                 cacheSize += size; | 
|              | 
|             } | 
|              | 
|             function displayItems(items) { | 
|                 if (!items) | 
|                     return; | 
|                      | 
|                 if (!items.length) { | 
|                     $results.hide(); | 
|                     $input.removeAttr("jquerysuggest"); | 
|                     return; | 
|                 } | 
|                  | 
|                 var html = ''; | 
|                 for (var i = 0; i < items.length; i++) | 
|                     html += '<li>' + items[i] + '</li>'; | 
|   | 
|                 $results.html(html).show(); | 
|                 $input.attr("jquerysuggest", "on"); | 
|   | 
|                 $results | 
|                     .children('li') | 
|                     .mouseover(function() { | 
|                         $results.children('li').removeClass(options.selectClass); | 
|                         $(this).addClass(options.selectClass); | 
|                     }) | 
|                     .click(function(e) { | 
|                         e.preventDefault();  | 
|                         e.stopPropagation(); | 
|                         selectCurrentResult(); | 
|                     }); | 
|                              | 
|             } | 
|              | 
|             function parseTxt(txt, q) { | 
|                  | 
|                 var items = []; | 
|                 var tokens = txt.split(options.delimiter); | 
|                  | 
|                 // parse returned data for non-empty items | 
|                 for (var i = 0; i < tokens.length; i++) { | 
|                     var token = $.trim(tokens[i]); | 
|                     if (token) { | 
|                         token = token.replace( | 
|                             new RegExp(q, 'ig'),  | 
|                             function(q) { return '<span class="' + options.matchClass + '">' + q + '</span>' } | 
|                             ); | 
|                         items[items.length] = token; | 
|                     } | 
|                 } | 
|                  | 
|                 return items; | 
|             } | 
|              | 
|             function getCurrentResult() { | 
|              | 
|                 if (!$results.is(':visible')) | 
|                     return false; | 
|              | 
|                 var $currentResult = $results.children('li.' + options.selectClass); | 
|                  | 
|                 if (!$currentResult.length) | 
|                     $currentResult = false; | 
|                      | 
|                 return $currentResult; | 
|   | 
|             } | 
|              | 
|             function selectCurrentResult() { | 
|                 $currentResult = getCurrentResult(); | 
|              | 
|                 if ($currentResult) { | 
|                     var $name = $currentResult.children("span.result_name"); | 
|                     var $id = $currentResult.children("span.result_id"); | 
| /*------------------------------ by katsu --------*/ | 
|                   if ($id.text() != '') { | 
|                     $input.val($name.text()); | 
|   | 
|                     var idId = $input.attr("id"); | 
|                     idId = escapeVfId(idId + "Id"); | 
|                      | 
|                     $(idId).val($id.text()); | 
|                     idId = $input.attr("id"); | 
|                     // onchangeとonblurは1つしか実装しないと想定、両方呼び出す | 
|                     // entryキー対応のため、直接 onchangeとonblurを呼び出す必要です。 | 
|                     $input.change(); | 
|                     $input.blur(); | 
|                   } | 
| /*------------------------------------------------*/ | 
|                     $results.hide(); | 
|                     $input.removeAttr("jquerysuggest"); | 
|                      | 
|                     if (options.onSelect) | 
|                         options.onSelect.apply($input[0]); | 
|                 } | 
|              | 
|             } | 
|              | 
|             function nextResult() { | 
|              | 
|                 $currentResult = getCurrentResult(); | 
|                 if ($currentResult) | 
|                     $currentResult | 
|                         .removeClass(options.selectClass) | 
|                         .next() | 
|                         .addClass(options.selectClass); | 
|                 else | 
|                     $results.children('li:first-child').addClass(options.selectClass); | 
|              | 
|             } | 
|              | 
|             function prevResult() { | 
|              | 
|                 $currentResult = getCurrentResult(); | 
|              | 
|                 if ($currentResult) | 
|                     $currentResult | 
|                         .removeClass(options.selectClass) | 
|                         .prev() | 
|                             .addClass(options.selectClass); | 
|                 else | 
|                     $results.children('li:last-child').addClass(options.selectClass); | 
|              | 
|             } | 
|      | 
|         } | 
|          | 
|         $.fn.suggest = function(source, options) { | 
|          | 
|             if (!source) | 
|                 return; | 
|          | 
|             options = options || {}; | 
|             options.source = source; | 
|             options.delay = options.delay || 100; | 
|             options.resultsClass = options.resultsClass || 'ac_results'; | 
|             options.selectClass = options.selectClass || 'ac_over'; | 
|             options.matchClass = options.matchClass || 'ac_match'; | 
|             options.minchars = options.minchars || 2; | 
|             options.minwords = options.minwords || 0; | 
|             options.delimiter = options.delimiter || '\n'; | 
|             options.onSelect = options.onSelect || false; | 
|             options.maxCacheSize = options.maxCacheSize || 65536; | 
|      | 
|             this.each(function() { | 
|                 new $.suggest(this, options); | 
|             }); | 
|      | 
|             return this; | 
|              | 
|         }; | 
|          | 
|     })(jQuery); | 
|      |