jQuery.extend(
  jQuery.expr[':'], { Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0" 
});

var Imtech = {};
Imtech.SearchOnThisPage = function() {
  // --- default values
  this.searchDefaultText = dst;
  this.startSearchingLength = 3;
  this.textWrapper = "#pages";
  this.searchBoxWrapper = "#search";
  this.searchBoxId = "searchOnThisPageTextBox";
  this.activeCssClass = "active";
  this.highlightCssClass = "highlight";
  
  // --- prive variables
  var originalText = "";
  
  // --- public methods
  this.getOriginalText = function() {
    return originalText;
  }
  
  this.init = function() {
    var instance = this;
    
    $(this.searchBoxWrapper).html('<input type="text" id="' + this.searchBoxId + '"/><div id="searchClose"></div>');
    originalText = $(this.textWrapper).html();

	$('#searchClose').click(function() {
		$('#'+instance.searchBoxId).val(instance.searchDefaultText);
		$(this).hide();
      	$(instance.textWrapper).html(instance.getOriginalText());
    	_typeface_js.renderDocument();
	});
	
    var searchBox = "#" + this.searchBoxId;
    
    $(searchBox).attr("value", this.searchDefaultText)
    .focus(function() {
      if (this.value == instance.searchDefaultText) {
        this.value = "";
        $(this).addClass(instance.activeCssClass);
      }
      var position = $(instance.searchBoxWrapper).offset();
      $('#searchResults').show().css('left', position.left).css('top', position.top+35);
    }).
    blur(function() {
      if (this.value == "") {
        $(this).removeClass(instance.activeCssClass);
        this.value = instance.searchDefaultText;
      }
      setTimeout(function() { $('#searchResults').fadeOut('slow'); }, 250);
    }).
    keyup(function() {
      $(instance.textWrapper).html(instance.getOriginalText());
      $('#searchClose').show();
      if (this.value.length >= instance.startSearchingLength) {
        var searchText = escape(this.value);
        var regx = new RegExp("(?![^<]+>)(" + searchText + ")(?![^<]+>)", 'gi');
        var selector = 'p:Contains("' + searchText + '")';
        $(instance.textWrapper).each(function() {
          var text = $(this).html();
          text = text.replace(regx, '<span class="' + instance.highlightCssClass + '">$1</span>');
          $(this).html(text);
        });
      }
      _typeface_js.renderDocument();
      
      var searchResult = '<ul>';
      var lastPage     = '';
      $('.highlight').each(function() {
      	var parent = $(this).parents('.page');
      	var pageId = parent.attr('id');
      	if (lastPage != pageId) {
      		searchResult += "<li><a href='javascript:scrollPageTo(\""+pageId.replace(/page/, '')+"\");'>"+parent.children('h2').attr('rel')+"</a></li>";
      		lastPage = pageId;
      	}
      });
	  searchResult += "</ul>";
      var position = $(instance.searchBoxWrapper).offset();
      $('#searchResults').show().html(searchResult).css('left', position.left).css('top', position.top+35);
    })
  }
}
