function performMultiSearch(elem,searchElem){var searchString;var theSelection;var textNodes;if(!searchElem||typeof(searchElem)=='undefined')searchElem=document.body;if(elem&&elem.value)searchString=elem.value;else if(this&&this.value)searchString=this.value;textNodes=findTypeNodes(searchElem,3);if(window.getSelection)theSelection=window.getSelection();else{alert("sorry this searching method isn't supported by your browser");return;}
theSelection.removeAllRanges();if(searchString.length>0){for(var i=0;i<textNodes.length;i++){var reSearch=new RegExp(searchString,'gmi');var stringToSearch=textNodes[i].textContent;while(reSearch(stringToSearch)){var thisRange=document.createRange();thisRange.setStart(textNodes[i],reSearch.lastIndex-searchString.length);thisRange.setEnd(textNodes[i],reSearch.lastIndex);theSelection.addRange(thisRange);}}}
return;}
function performSingleSearch(elem,searchElem){var searchString;var theSelection;var textNodes;if(!searchElem||typeof(searchElem)=='undefined')searchElem=document.body;if(elem&&elem.value)searchString=elem.value;else if(this&&this.value)searchString=this.value;if(searchString&&searchString.length>0){if(window.getSelection){theSelection=window.getSelection();textNodes=findTypeNodes(searchElem,3);var searchMatch=new RegExp(searchString,'i');if(theSelection.rangeCount==1&&searchMatch(theSelection.getRangeAt(0).toString())){var currentRange=theSelection.getRangeAt(0);theSelection.removeAllRanges();var newRange=null;for(var i=0;i<textNodes.length;i++){if(currentRange.comparePoint(textNodes[i],0)==-1&&currentRange.startContainer!=textNodes[i])continue;else if((currentRange.comparePoint(textNodes[i],0)==-1&&currentRange.startContainer==textNodes[i])||(currentRange.comparePoint(textNodes[i],0)==0)){var reSearch=new RegExp(searchString,'gmi');var stringToSearch=textNodes[i].textContent;while(reSearch(stringToSearch)){if(reSearch.lastIndex-searchString.length>currentRange.startOffset){theSelection.removeAllRanges();newRange=document.createRange();newRange.setStart(textNodes[i],reSearch.lastIndex-searchString.length);newRange.setEnd(textNodes[i],reSearch.lastIndex);break;}}
if(newRange)break;else continue;}
else if(currentRange.comparePoint(textNodes[i],0)==1){var reSearch=new RegExp(searchString,'gmi');var stringToSearch=textNodes[i].textContent;if(reSearch(stringToSearch)){theSelection.removeAllRanges();newRange=document.createRange();newRange.setStart(textNodes[i],reSearch.lastIndex-searchString.length);newRange.setEnd(textNodes[i],reSearch.lastIndex);break;}else continue;}}
if(newRange){theSelection.addRange(newRange);newRange.startContainer.parentNode.scrollIntoView(false);return;}else performSingleSearch(elem,searchElem);}
else{for(var i=0;i<textNodes.length;i++){var reSearch=new RegExp(searchString,'gmi');var stringToSearch=textNodes[i].textContent;if(reSearch(stringToSearch)){theSelection.removeAllRanges();var thisRange=document.createRange();thisRange.setStart(textNodes[i],reSearch.lastIndex-searchString.length);thisRange.setEnd(textNodes[i],reSearch.lastIndex);theSelection.addRange(thisRange);thisRange.startContainer.parentNode.scrollIntoView(false);break;}}}}
else if(document.selection){theSelection=document.selection;var currentRange=theSelection.createRange();var searchRange=document.body.createTextRange();searchRange.moveToElementText(searchElem);theSelection.empty();if(currentRange&&currentRange.text&&currentRange.text.match(eval('/'+searchString+'/i'))){currentRange.moveStart('character');currentRange.setEndPoint('EndToEnd',searchRange);if(currentRange.findText(searchString)){currentRange.select();var currentkeypress=document.body.onkeypress;window.setTimeout(function(){document.body.onkeypress=function(evt){if(!evt)evt=window.event;var nowRange=document.selection.createRange();if(nowRange.htmlText==currentRange.htmlText){if(evt.keyCode==13){document.body.onkeypress=currentkeypress;performSingleSearch(elem,searchElem);}}else{document.body.onkeypress=currentkeypress;}
if(currentkeypress)currentkeypress(evt);}},30);return true;}else performSingleSearch(elem,searchElem);}else{if(searchRange.findText(searchString)){searchRange.select();var currentkeypress=document.body.onkeypress;window.setTimeout(function(){document.body.onkeypress=function(evt){if(!evt)evt=window.event;var nowRange=document.selection.createRange();if(nowRange.htmlText==searchRange.htmlText){if(evt.keyCode==13){document.body.onkeypress=currentkeypress;performSingleSearch(elem,searchElem);}}else{document.body.onkeypress=currentkeypress;}
if(currentkeypress)currentkeypress(evt);}},30);return true;}else{return false;}}}else alert("Sorry your browser doesn't support a supported selection object");}}
function findTypeNodes(elem,type){elem.normalize();var typeNodes=new Array();for(var nodeI=0;nodeI<elem.childNodes.length;nodeI++){if(elem.childNodes[nodeI].nodeType==type)typeNodes.push(elem.childNodes[nodeI]);else{typeNodes=typeNodes.concat(findTypeNodes(elem.childNodes[nodeI],type));}}
return typeNodes;}
function addLoadEvent(func){var oldonload=window.onload;if(typeof window.onload!='function'){window.onload=func;}else{window.onload=function(){if(oldonload){oldonload();}
func();}}}
addLoadEvent(function(){var theInput=document.getElementById('searchInput');var theButton=document.getElementById('performSearch');var elementToSearch=document.body;theButton.onclick=function(){performSingleSearch(theInput,elementToSearch);}
theInput.onkeypress=function(evt){if(!evt)evt=window.event;if(evt.keyCode==13)performSingleSearch(theInput,elementToSearch);}});