// 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); 
 | 
     
 |