/*===================================* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE* DISCLAIMED.  IN NO EVENT SHALL THE PRODUCER OR* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF* SUCH DAMAGE.THE PRODUCER:Andreas ImhofEDV-DienstleistungenCH-Guemligen, Switzerlandwww.aiedv.chVersion: 7.1Version date: 20111215===================================*/function enable_local_search() { // enable the local document search	var localsearch_enabled = 1;	// init to enabled	var localsearch_enabled_css = get_css_value("enable_local_search","zIndex");	// check if we have set local search flag style in css	if ((typeof localsearch_enabled_css != "undefined") && (localsearch_enabled_css != "")) {	// found helper style		localsearch_enabled = parseInt(localsearch_enabled_css);		if (typeof(init_local_search) != 'undefined') {	// defined in searchlocal.js			setTimeout("init_local_search()", 20);		}	}}function locsearch_attachVKI() {	try {		if (_sb_settings.addVirtualKeybord && !isTouchDevice) {			var searchInput = document.getElementById('localsearchentry_field');			//alert(searchInput.getAttribute("VKI_attached"));			if (!searchInput.getAttribute("VKI_attached")) VKI_attach(searchInput);			//alert("VKI to local search attached: "+searchInput.getAttribute("VKI_attached"));		}	} catch(e){		setTimeout("locsearch_attachVKI()",200);	}}function init_local_search() {	var localsearchentry_win=document.createElement("div"); //create window div	localsearchentry_win.id="localsearchentry_win";	localsearchentry_win.className= "localsearchentry_win";	var wincont='';	wincont='<div class="localsearchentry_cont" id="localsearchentry_cont">';	if (_sb_settings.addVirtualKeybord && !isTouchDevice) {		wincont+='<input class="localsearchentry_field" id="localsearchentry_field" type="text" title="' + lst[1][cur_lang_ID] + '" value="' + lst[0][cur_lang_ID] + '">';	// simply no keypress event	}	else {		wincont+='<input class="localsearchentry_field" id="localsearchentry_field" type="text" title="' + lst[1][cur_lang_ID] + '" value="' + lst[0][cur_lang_ID] + '" onkeypress="handleSearchFieldKeyPress(event)">';	}	wincont+='</div>';	localsearchentry_win.innerHTML=wincont;	document.getElementById("sb_body").appendChild(localsearchentry_win);	// evtl. add a virtual keyboard to search input field	locsearch_attachVKI();	// make the local search field draggable	try {		YUI().use("dd-drag",			function(Y) {				if (_sb_settings.enableDraggableObjects > 0) {					// make the search field draggable					try {						var sldd = new Y.DD.Drag({							node: '#localsearchentry_win'							});					} catch(e) {}				}				// handle clicks				Y.one('#localsearchentry_field').on('click', function(e) {						// clear the search field if '&nbsp;&nbsp;Search' is shown						try {							if (document.getElementById("localsearchentry_field").value.indexOf("\u00a0\u00a0") == 0) document.getElementById("localsearchentry_field").value = "";						} catch(e) {}						e.preventDefault();						e.stopPropagation();					});				// start search when clicked on lupe				if (!isTouchDevice) {					Y.one('#localsearchentry_win').on('click', function(e) {						do_localsearch(e);						});				}				else {					Y.one('#localsearchentry_win').on('touchstart', function(e) {						do_localsearch(e);						});				}			});	} catch(e){}}function handleSearchFieldKeyPress(e,form) {	var key=e.keyCode || e.which;	if (key==13) do_localsearch(e);}function do_localsearch(e) {	//alert("do_localsearch called freom: \n" + e.target)	var searchterm = "";	if (document.getElementById("localsearchentry_field") != null) {		try { searchterm = document.getElementById("localsearchentry_field").value; } catch(e){}	}	else {		try { searchterm = document.getElementById("ft_searchentry_field").value; } catch(e){ return(false); }	}	if (searchterm == "") return(false);	if (searchterm.indexOf("\u00a0\u00a0") == 0) return(false);	//alert("searchterm: " + searchterm);	goto_searchterm(searchterm,true,false);	return(false);}var searchMaxResults = 50;var searchMaxTextLength = 200;function goto_searchterm(searchstr, flipage, bestmatchonly) {	if ((searchstr == null) || (searchstr == "")) return;	// do nothig	var search = searchstr;	search = decodeURI(searchstr);	if ((search.indexOf("(") >= 0) || (search.indexOf("[") >= 0)) {	// has already regexp		searchterm = search;		searchterm = encodeURI(searchterm);	// regex can not search u8nicode: make encoded - plain text will be encoded too		try { searchterm = searchterm.replace(/%20/g," "); } catch(e){ }		try { searchterm = searchterm.replace(/%5B/gi,"["); } catch(e){ }		try { searchterm = searchterm.replace(/%5D/gi,"]"); } catch(e){ }		try { searchterm = searchterm.replace(/%5E/gi,"^"); } catch(e){ }		try { searchterm = searchterm.replace(/%5C/gi,"\\"); } catch(e){ }		try { searchterm = searchterm.replace(/%/g,"ZzZz"); } catch(e){ }	}	else {		try { search = search.replace(/( )+/g," "); } catch(e){ return; }	// remove multiple blanks		try { search = search.replace(/\"/g,""); } catch(e){ return; }		var searchparts = search.split(" ");		var numsearchterms = searchparts.length;		var searchterm = "";		for (var t = 0; t < searchparts.length; t++) {			if (searchparts[t] == "") continue;			searchparts[t] = encodeURI(searchparts[t]);	// regex can not search u8nicode: make encoded - plain text will be encoded too			// wildcards handling			try { searchparts[t] = searchparts[t].replace(/\?/g,"(.)?"); } catch(e){ continue; }	// MUST be first because of the ?			try { searchparts[t] = searchparts[t].replace(/\*/g,"(.)*?"); } catch(e){ continue; }				try { searchparts[t] = searchparts[t].replace(/%/g,"ZzZz"); } catch(e){ continue; }			if (searchterm != "") searchterm += "|";	// concatenate with OR			searchterm += "\\b(\\w)*?" + searchparts[t] + "(.)*?\\b";			//searchterm += "\\b[\\w%]*?" + searchparts[t] + "(.)*?[ \\s$]";		}	}	//alert("searchstr: " + searchstr + "\nsearch: " + search + "\nsearchparts: " + searchparts + "\nsearchterm: " + searchterm);	// go to search text in local document	var re = null;	try { re = new RegExp(searchterm,"gi"); } catch(e) { return; }	// uuups - can not compile	var artIDarr = new Array();	// article IDs with matches	var artfound = false;	var ai = 0;	var divs = document.getElementsByTagName("div");	//alert("search for: " + searchterm + "\nin " + divs.length + " divs");	for (ai = 0; ai < divs.length; ai++) {		var artID = divs[ai].getAttribute("id");	// we get the article containers only		if ((typeof(artID) == 'undefined') || (artID == null) || (artID == "")) continue;		if (artID.indexOf("Art") != 0) continue;		var articletext = get_plain_text(artID,-1);	// get all plain text		if (articletext == "") continue;		articletext = encodeURI(articletext);		articletext = articletext.replace(/%20/g," ");		try { articletext = articletext.replace(/%/g,"ZzZz"); } catch(e){ continue; }		try {			var matches = articletext.match(re);			if (matches != null) {	// have found text				var numfoundmatches = matches.length;				for (var m = 0; m < matches.length; m++) {					try { matches[m] = matches[m].replace(/ZzZz/g,"%"); } catch(e){ continue; }					matches[m] = decodeURI(matches[m]);				}				var firstmatchpos = 0;				var blankfirstmatchpos = 0;				/*				// in test phase				firstmatchpos = articletext.search(re);	// the position of the first matching string				blankfirstmatchpos = articletext.lastIndexOf(" ",firstmatchpos) + 1;	// the position of the first matching string				//	alert("firstmatchpos: " + firstmatchpos + "\nblankfirstmatchpos: " + blankfirstmatchpos + "\ntext:\n" + articletext);				*/				try { articletext = articletext.replace(/ZzZz/g,"%"); } catch(e){ continue; }				articletext = decodeURI(articletext);				var realtextlength = articletext.length;				if ((searchMaxTextLength > 0) && (articletext.length > searchMaxTextLength)) articletext = articletext.substr(blankfirstmatchpos,searchMaxTextLength);				if (realtextlength > articletext.length) {	//got to word boundary and ad ...					var lastblankpos = articletext.lastIndexOf(" ");					if (lastblankpos <= articletext.length) {						articletext = articletext.substring(0,lastblankpos+1);						articletext += "...";					}				}				artIDarr[artIDarr.length] = new Array(numfoundmatches,artID,matches,firstmatchpos,articletext);				//alert("matches of: " + matches + "\nintext:\n" + artIDarr[artIDarr.length-1][3]);				artfound = true;			}		} catch(e) {}		if ((searchMaxResults > 0) && (artIDarr.length >= searchMaxResults)) break;		// GET ALL ARTICLES    if ((artfound == true) && (bestmatchonly == true)) break;	}	// sort the matches array - most matches first	var articleToShow = -1;	if (artfound && (artIDarr != null)) {		/*			var foundarr = "";			for (var f = 0; f < artIDarr.length; f++) foundarr += artIDarr[f][0] + "," + artIDarr[f][1] + "\n";			alert(foundarr);		*/		artIDarr.sort(sortDescendant_callback);		//alert("bestmatchonly: " + bestmatchonly + "\nartIDarr.length: " + artIDarr.length);		if (bestmatchonly || artIDarr.length == 1) articleToShow = 0;		else {	// show article chooser			showDocumntSearchResults(artIDarr);			articleToShow = -1;		}	}	/* // debug only: show found matches		var foundarr = "";		for (var f = 0; f < artIDarr.length; f++) foundarr += artIDarr[f] + "\n";		alert(foundarr);	*/	if ((articleToShow >= 0) && (artIDarr != null)) {		var pg_art = artIDarr[articleToShow][1].split("_");		var artid = pg_art[0]; artid = parseInt(artid.substr(3));		var pageseq = pg_art[1];		var pageidx = pageseq-1;		/*		alert("on page: " + pageseq				+ "\narticle id: " + artid				+ "\npageseq: " + pageseq				+ "\npageidx: " + pageidx				);		*/		if (artid > -1) show_article_xml(null,artid,1.0,null,"",false,false,pageseq);		if (flipage) goto_page(pageidx,true);		//window.location.hash=gotoanchor;	}	if (artIDarr.length <= 0) {	// no serch results		alert(lst[2][cur_lang_ID]);	}	return;}function sortDescendant_callback(a, b) {	var x = b[0];	var y = a[0];	return ((x < y) ? -1 : ((x > y) ? 1 : 0));}function get_plain_text(articleID,maxlength) {	if ((articleID == null) || (articleID == "")) return("");	var article = document.getElementById(articleID);	var plaintext = "";	var childnodes = article.childNodes;	for (var i = 0; i < childnodes.length; i++) {		//alert("nodetype: " + childnodes[i].nodeType);		var txt = getChildsText(childnodes[i],maxlength);		txt = txt.replace(/\r|\n|[\u2002-\u200a]/gi," ");		if ((txt != "") && (plaintext != "") && (plaintext.charAt(plaintext.length-1) != " ")) plaintext+= " ";		plaintext += txt;		if ((maxlength > 0) && (plaintext.length >= maxlength)) break;	}	//alert("plaintext fort artcile ID: " + articleID + "\n" + plaintext);	return(plaintext);}function getChildsText(node,maxlength) {	if (node == null) return("");	var text = "";	var childnodes = node.childNodes;	for (var i = 0; i < childnodes.length; i++) {		switch(childnodes[i].nodeType) {			case 3: // text node				if (typeof(childnodes[i].data) != 'undefined') {					text += childnodes[i].data;				}				break;			default:				if (childnodes[i].nodeName.toLowerCase() == "br") text += " ";				else text += getChildsText(childnodes[i]);				break;		}		if ((maxlength > 0) && (text.length >= maxlength)) break;	}	return(text);}var documentsearchwin = null;function showDocumntSearchResults(artIDarr) {	if ((artIDarr == null) || (artIDarr.length < 1)) return;	var resultlist = "<div class=\"DRGSEARCHW1_searchResults\">";	resultlist += "<div class=\"DRGSEARCHW1_searchResultTitle\">Search Results: " + artIDarr.length + "</div>";	for (var i = 0; i < artIDarr.length; i++) {		//alert("art: " + artIDarr[i][1]);		var go2article_idx = artIDarr[i][1];		if (go2article_idx.indexOf("Art") == 0) {	// get page number too			go2page_idx = parseInt(go2article_idx.split("_")[1]-1);		}		resultlist += "<div class=\"" + (isEven(i) ? "DRGSEARCHW1_searchList0" : "DRGSEARCHW1_searchList1") + "\" onClick=\"_sb_settings.clickCameFromSearchResults=true;show_article_xml(null,'" + go2article_idx + "',1.0,null,'',false,false,'" + go2page_idx + "'); goto_page("+go2page_idx+",true);\" onMouseOver=\"this.style.cursor='pointer';\" title=\"" + artIDarr[i][2] + "\">";		resultlist += artIDarr[i][4].substr(0,250);		resultlist += "</div>";	}	resultlist += "</div>";	try {		_sb_settings.lastSearchResults = resultlist;		_sb_settings.clickCameFromSearchResults = false;	} catch(e){}	showContent(resultlist,"text");}var num_searchtext_items=3;	//number of language dependent string array elementsvar lst=new Array(num_searchtext_items);for (var i=0; i<num_searchtext_items; i++) { lst[i]=new Array(5); }	//prepare sub-arrays for 8 languageslst[0][0]="&nbsp;&nbsp;Search";lst[0][1]="&nbsp;&nbsp;Suchen";lst[0][2]="&nbsp;&nbsp;Recherche";lst[0][3]="&nbsp;&nbsp;S\u00f8g";lst[0][4]="&nbsp;&nbsp;Przeszukiwa\u0107";lst[1][0]="Search in document";lst[1][1]="Dokument durchsuchen";lst[1][2]="Recherche document";lst[1][3]="S\u00f8g dokument";lst[1][4]="Dokument przeszukiwa\u0107";lst[2][0]="No matching results";lst[2][1]="Keine Suchresultate";lst[2][2]="Aucun r\u00e9sultat";lst[2][3]="Ingen s\u00f8geresultater";lst[2][4]="Brak wynik\u00f3w wyszukiwania";
