text: ﻿var searchFunc = function(path, search_id, content_id) {
      'use strict';
      $.ajax({
          url: path,
          dataType: "xml",
          success: function( xmlResponse ) {
              // get the contents from search data
              var datas = $( "entry", xmlResponse ).map(function() {
                  return {
                      title: $( "title", this ).text(),
                      content: $("content",this).text(),
                      url: $( "url" , this).text()
                  };
              }).get();
              var $input = document.getElementById(search_id);
              var $resultContent = document.getElementById(content_id);
              $input.addEventListener('input', function(){
                  var str='<ul class=\"search-result-list\">';                
                  var keywords = this.value.trim().toLowerCase().split(/[\s\-]+/);
                  $resultContent.innerHTML = "";
                  if (this.value.trim().length <= 0) {
                      return;
                  }
                  // perform local searching
                  datas.forEach(function(data) {
                      var isMatch = true;
                      var content_index = [];
                      var data_title = data.title.trim().toLowerCase();
                      var data_content = data.content.trim().replace(/<[^>]+>/g,"").toLowerCase();
                      var data_url = data.url;
                      var index_title = -1;
                      var index_content = -1;
                      var first_occur = -1;
                      // only match artiles with not empty titles and contents
                      if(data_title != '' && data_content != '') {
                          keywords.forEach(function(keyword, i) {
                              index_title = data_title.indexOf(keyword);
                              index_content = data_content.indexOf(keyword);
                              if( index_title < 0 && index_content < 0 ){
                                  isMatch = false;
                              } else {
                                  if (index_content < 0) {
                                      index_content = 0;
                                  }
                                  if (i == 0) {
                                      first_occur = index_content;
                                  }
                              }
                          });
                      }
                      // show search results
                      if (isMatch) {
                          str += "<li><a href='"+ data_url +"' class='search-result-title'>"+ data_title +"</a>";
                          var content = data.content.trim().replace(/<[^>]+>/g,"");
                          if (first_occur >= 0) {
                              // cut out 100 characters
                              var start = first_occur - 20;
                              var end = first_occur + 80;
                              if(start < 0){
                                  start = 0;
                              }
                              if(start == 0){
                                  end = 100;
                              }
                              if(end > content.length){
                                  end = content.length;
                              }
                              var match_content = content.substr(start, end); 
                              // highlight all keywords
                              keywords.forEach(function(keyword){
                                  var regS = new RegExp(keyword, "gi");
                                  match_content = match_content.replace(regS, "<em class=\"search-keyword\">"+keyword+"</em>");
                              });
                              
                              str += "<p class=\"search-result\">" + match_content +"...</p>"
                          }
                          str += "</li>";
                      }
                  });
                  str += "</ul>";
                  $resultContent.innerHTML = str;
              });
          }
      });
  }
  
  