/* infradox search related javascript */
/* v2 MW 28 feb 2006 checkEnter */
/* v3 MW 3 mar 2006 */
/* v4 MW 20 mar 2006 changed NeedCheckAllCol, ResetSearch */
/* v5 MW 21 apr 2006 & fix, WordlistSearch function (key index pages) */
/* v6 MW 27 apr 2006 & encoding, no conversion of quot into apos (7.0.0.86) */
/* v9 MW 13 dec 2006 rewritten */

var LoadSearchFrames=1;
var NewSearchOnly=1;
var arrSfilters = new Array();

/* ------ */

var numberOfKeywords=3;

/* ------ */

function HEnterSubmit() {
	DoSearch(document.mainform.quicksearchtext.value,0,0,false,0,document.mainform.SearchStyle[1].checked);
}

function KeywordPopup() {
	KeywordWindow=window.open(dllName+'go?a=disp&t=winkeywords.html&si='+sessid, "KeywordWindow", 'toolbar=0,status=0,menubar=0,scrollbars=1,resizable=1,width=520,height=400');
	KeywordWindow.focus();
}

function SearchUnfiltered() {
	// search again without filters
	if(confirm(sQuestion_SearchUnfiltered)) {
		var sFilters='';
		for(var j=0; j<arrSfilters.length; j++) {	
			sFilters+='&_sf'+j+'=';
		}
		var ls=parseInt(parent.resultspanel.document.mainform.lsindex.value);
		var so=parseInt(parent.resultspanel.document.mainform.soindex.value);

		var url=dllName+'go?a=disp&pt=1&t=sr-body.html&si='+sessid+
			'&usp=0&_spb=0&_spe=0&_spw=0&mw=2&se='+se+
			sFilters+
			'&lg=0&ls='+ls+'&so='+so+'&search='+sLastSearch;
		parent.resultspanel.location.href=url;
	}
}


// ui filters

function SelectAllCol(box, index) {
	if(arrSfilters[index].elementType==0) {
		var scAll='document.mainform.'+arrSfilters[index].elementAllName;
		var arr=arrSfilters[index].aCodes;
		if(box==eval(scAll)) {
			if(eval(scAll+'.checked')) {
				for(i=0;i<arr.length;i++) {
					eval('document.mainform.sc'+arr[i]+'.checked=false')
				}
			} else {
				NeedCheckAllCol(false, index);
			}
		} else {
			NeedCheckAllCol(false, index);
		}
	}
}

function NeedCheckAllCol(allFilters, index) {
	var elementName;
	var scAll;
	var CollectionCount=0;
	var arr;

	function DoItem(j) {
		switch(arrSfilters[j].elementType) {
		case 0: { 
			// checkbox
			CollectionCount=0;
			scAll='document.mainform.'+arrSfilters[j].elementAllName;
			if(eval(scAll)) { // is it currently displaying ?
				arr=arrSfilters[j].aCodes;
				for(var i=0;i<arr.length;i++) {
					if(eval('document.mainform.sc'+arr[i]+'.checked')) CollectionCount++
				}
				if(CollectionCount==arr.length) {
					// all checked, so no filtering required
					CollectionCount=0;
					for(var i=0;i<arr.length;i++) {
						eval('document.mainform.sc'+arr[i]+'.checked=false'); 
					}
				}
				eval(scAll+'.checked=(CollectionCount==0)');
			}
			break;
		}
		case 1: {
			// options box
			elementName='document.mainform.'+arrSfilters[j].elementAllName;
			if(eval(elementName)) { // is it currently displaying ?
				if(arrSfilters[j].value=='') {
					eval(elementName+'.selectedIndex=0'); 
				} else {
					var boxLength = eval(elementName+'.length');	
					var arrKeys=(arrSfilters[j].value).split(',');
					for(var i=0; i<arrKeys.length; i++) {
						for(var y=0; y<boxLength; y++) {
							// v4 fix; use temp var sVal
							var sVal=eval(elementName+'.options['+y+'].value');
							if( sVal==arrKeys[i] ) {
								eval(elementName+'.options['+y+'].selected=true');
								break;
							}
						}
					}
				}
			}
			break;
		}
		} // case

	} // DoItem

	if(allFilters) {
		for(var j=0; j<arrSfilters.length; j++) {DoItem(j)}
	} else {
		DoItem(index);
	}
}

function GetClearFilterParamString() {
	var str='';
	for(var j=0; j<arrSfilters.length; j++) str+='&_sf'+j+'=';
	return str;
}

function ResetSearch() {
 	// reset options
	var scAll;
	for(var j=0; j<arrSfilters.length; j++) {	
		arrSfilters[j].value='';
		if(arrSfilters[j].elementType==0) {
			scAll='document.mainform.'+arrSfilters[j].elementAllName;
			if(eval(scAll)) {
				eval(scAll+'.checked=true');
				SelectAllCol(eval(scAll), j);
			}
		}
	}
	NeedCheckAllCol(true,0);

	// v4
	var s='document.mainform.key1';
	if(eval(s)) {
		for(var i=1; i<=numberOfKeywords; i++) {
			s='document.mainform.key'+i+'.value=""';
			eval(s);
		}
	}
}

function WithinResultsClick() {
	var searchtext=sLastSearch;
	if((FindInString(searchtext,'|')) && document.mainform.searchinresults.checked) {
		alert(sMessage_InResultsNotPossible);
		document.mainform.searchinresults.checked=false;
	}
}

function ApplyFilters() {
}

//

function objSearch(s, b) {
	this.qry=s;
	this.bop=b;
}

function GetPowerSearchURL(allowEmpty) {
	var doc=document.mainform;
	var withinElem=document.mainform.psInResults;
	var withinElemName='psInResults';
	var arrInput = new Array();
	var arrTemp = new Array();
	var q=''; s=''; var sT=''; var sOp=''; var e;
	var amppos=0;
	var boolStyle=0;
	var spe=0; 
	var usp=0;
	var spb=0;
	var spw=0;
	var searchtext;  
	var withinOnPage=false;
	var withinResults=false;
	var parsestring=true;
	var ls,so,url;
	var addAsterisk=false;
	var stripLetters=[];
	var f=document.mainform;


	if(eval(doc[withinElemName])) {
		withinOnPage=true;
  		withinResults=doc[withinElemName].checked;
	}
	
	if(doc['key1']) {
		for(var i=1; i<=numberOfKeywords; i++) {
			s = trim(doc['key'+i].value);
			doc['key'+i].value='';
	
			if(s.length>0) {
				s = s.replace(/\s+/g," ");  // reduce multiple to single space
				//s = s.replace(/\"+/g, "'"); // don't replace quotes with apostrophes (mw 27 apr 06)
				arrTemp[arrTemp.length] = s;	
			}
		}
		for(var i=0; i<arrTemp.length; i++) {
			doc['key'+(i+1)].value = arrTemp[i].toLowerCase();
		}
	
		if(arrTemp.length==1) {
			if(withinOnPage) {
				if((doc['key1style'][2].checked)&&(withinResults)) {
					sT = doc['key1'].value;
					if((sT.substring(0,4)!='not ')&&(sT.substring(0,8)!='and not ')) {
						doc['key1'].value = 'and not '+sT;
					}
				}
			}
		}
	} else {
		parsestring=false;
	}
		
	// 7 Jun 07

	allowEmpty=(allowEmpty?allowEmpty:0);

	if(arrTemp.length==0) {
		if(sLastSearch=='') allowEmpty=0;
		if(!allowEmpty) {
			alert(sMessage_EmptySearch );
			return '';
		} else {

			ls=parseInt(f.lsindex.value);
			so=parseInt(f.soindex.value);
			t='sr-loadersearch.html';
			if(LoadSearchFrames==0) t='sr-body.html';

			url=dllName+'go?a=disp&pt=1&t='+t+'&si='+sessid;
			url+='&usp='+usp+'&_spb='+spb+'&_spe='+spe+'&_spw='+spw+'&mw=2&se='+se;
			url+='&lg=0&ls='+ls+'&so='+so+'&search='+sLastSearch;
			url+='&_wwo='+((f.ExactMatch.checked)?'1':'0');

			return url;
		}
	}

	for(var i=1; i<=numberOfKeywords; i++) {
		s = trim(doc['key'+i].value);

		// 21 apr 06 replace ampersand
		// s = replace(s, '&', ' '); 
		// 27 apr 06 code ampersand
		amppos=s.indexOf('&');
		if(amppos > -1) { // requires 7.0.0.86
			s = replace(s, ' & ', '@32$@38$@32$'); 
			s = replace(s, ' &', '@32$@38$'); 
			s = replace(s, '& ', '@38$@32$'); 
			s = replace(s, '&', '@38$');
		}

		if(s.length>0) {
			s = s.replace(/\s+/g," ");  // reduce multiple to single space

			if(s.indexOf(' ')>-1) {
				sT=s.toLowerCase();
				if((sT.indexOf(' or ')==-1)&&(sT.indexOf(' and ')==-1)&&(sT.indexOf(' not ')==-1)) {
					if(sT.substring(0,4)=='not ') {
						s = 'and not ' + s.substring(4,s.length)
					} else {
						if(s.substring(0,1) != '\'') s = s.replace(/\s+/g," and ");
					}
				}
				if((i==1)&&withinOnPage) { // within ?
					sT=s.toLowerCase();
					if((sT.substring(0,4)=='not ')||(sT.substring(0,8)=='and not ')) {
						//eval(withinElem+'.checked=true');
						doc[withinElemName].checked=true;
						withinResults=true;
						spe=3; 
					}
				}
			}

			boolStyle = 0;
			if(i<numberOfKeywords) {
				if(doc['key'+i+'style'][1].checked) boolStyle=1;
				if(doc['key'+i+'style'][2].checked) boolStyle=2;
			}
			arrInput[arrInput.length] = new objSearch(s,boolStyle);
		}
	}	


	for(i=0; i<arrInput.length; i++) {
		s=arrInput[i].qry.toLowerCase();
		if(arrInput.length>1) {
			if(s.indexOf(' ')>-1) {
				if((s.substring(0,4)!='not ')&&(s.substring(0,8)!='and not ')&&(s.substring(0,1) != '\'')) {
					s = '(' + s + ')';
				}
			}
		}
		sOp='';
		if(i==0) {
			q = s; 
		} else {
			switch(arrInput[i-1].bop) {
			case 0: q += ' and ' + s; break;
			case 1: q += ' or ' + s; break;
			case 2: {
				sOp = ' and not '; 

				if((s.indexOf(' ')!=-1)&&(s.substring(0,1)!='\'')) {
					s = s.replace('and','');
					s = s.replace('or','');
					s = s.replace('not','');
					s = s.replace('(','');
					s = s.replace(')','');
					s = s.replace(/\s+/g," ");
					arrTemp = s.split(' ');
					s = '';
					for(var j=0; j<arrTemp.length; j++) {
						s += ' and not ' + arrTemp[j];
					}
				} else {
					s = ' and not ' + s;
				}
				if(q.length>0) {
					if((q.substring(0,1)=='(')||(q.substring(0,4)=='not ')||(q.substring(0,8)=='and not ')) {
						q += s 
					} else {
						if(q.indexOf(' ')!=-1) {
							q = '(' + q + ')' + s;
						} else {
							q += s;
						}
					}
				} else {
					q += s;
				}
				break;
				}
			}
		}
	}

	// 3 mar 06
	var aq = q.split(" ");
	if(aq.length==3) {
		if(aq[1]=='and') q = aq[0]+' '+aq[2];
	}

	if(withinResults) { // in results visible on page
		if(spe==0) spe=1;
		usp=1; 
	}

	var t='sr-loadersearch.html';
	if(LoadSearchFrames==0) t='sr-body.html';

	url=dllName+'go?a=disp&pt=1&t='+t+'&si='+sessid;
	url+='&usp='+usp+'&_spb='+spb+'&_spe='+spe+'&_spw='+spw+'&mw=2&se='+se;

	if(!f.ExactMatch.checked) {
		url+='&_wwo=0';
		if(q[0]!='"') {
			
			//stripLetters=['y','ies','s'];
			stripLetters=['s'];
			addAsterisk=true;
		}
	} else {
		url+='&_wwo=1';
	}

	var arrWords=q.split(' ');
	modifyWords(arrWords,stripLetters, addAsterisk);
	q=arrWords.join(' ');

	if(LoadSearchFrames==1) {
		url+='&searchtext='+q;
	} else {	
		ls=parseInt(f.lsindex.value);
		so=parseInt(f.soindex.value);
		url+='&lg=0&ls='+ls+'&so='+so+'&search='+q;
	}

	return (url); // 19 sep 07
}

// 7 Jun 07
function DoPowerSearch(allowEmpty) {
	LoadSearchFrames=0;
	var url=GetPowerSearchURL(allowEmpty);
	if(url!='') {
		var sFilters = SetCollectionFilters(); 
		url+=sFilters;
		if(LoadSearchFrames==1) {
			parent.location.href=url
		} else {
			self.location.href=url;
		}
	}
}

function filterObject(elementType, aCodes, value, elementAllName) {
	this.elementType = elementType; // 0=checkbox, 1=options
	this.aCodes = aCodes;
	this.value = value;
	this.elementAllName = elementAllName;
}

function SetCollectionFilters() {
	var elementName;
	var scAll;
	var arr;
	var selCount;
	var sValue;
	var padLen;
	var form='parent.resultspanel.document.mainform';

	for(var j=0; j<arrSfilters.length; j++) {	
		switch(arrSfilters[j].elementType) {
		case 0: { 
			// checkbox
			scAll=form+'.scAll'+j;
			if(eval(scAll)) { // currently displaying
				arrSfilters[j].value = ''; // clear current
				if(! eval(scAll+'.checked')) {
					arr=arrSfilters[j].aCodes;
					for(var i=0; i<arr.length; i++) {
						elementName = form+'.sc'+arr[i]+'.checked';
						if(eval(elementName)) arrSfilters[j].value=arrSfilters[j].value+arr[i];
					}
				}			
			}
			break;
		}
		case 1: { 
			// options box
			elementName = form+'.'+arrSfilters[j].elementAllName;
			if(eval(elementName)) { // is it currently displaying ?
				arrSfilters[j].value='';
				if(! eval(elementName+'.selectedIndex==0')) {
					var i=eval(elementName+'.length');
					selCount=0;
					for(var x=1; x<i; x++) {
						if(eval(elementName+'.options['+x+'].selected')) {
							selCount++;
							if(arrSfilters[j].value!='') arrSfilters[j].value+=',';
							sValue=eval(elementName+'.options['+x+'].value');
							arrSfilters[j].value+=sValue;
						}
					}
					if(selCount==(i-1)) {
						// all elements are selected, clear the filter...
						arrSfilters[j].value='';
					}
				}
			}	
			break;
		}
		}
	}

	var Result='';
	for(var j=0; j<arrSfilters.length; j++) Result+='&_sf'+j+'='+arrSfilters[j].value;
	return Result;
}


// end filters

function LoadLastSearch() {
	var url=dllName+'go?a=disp&pt=1&t=sr-loader.html&si='+sessid+'&se='+se;
	parent.location.href=url;
}

function NewSearch() {
	DoSearch(document.mainform.quicksearchtext.value,0,0,false,0,false);
}

// search

function allTrim(str) {
	if(!str) return '';
	return (str.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
}

function modifyWords(arrWords,stripLetters, addAsterisk) {
	var wl=arrWords.length,letter='',skipAdd=false,s;
//	var Ignore=/(^and$|^or$|^not$|^near$|^like$)/gi;
	var ignore=['and','or','not','near','like'];
	var dontchange=/(^may$|^christmas$)/; // strip y but not from May

	if(wl) {
		if(addAsterisk) {
			s=arrWords.join(' ');
//			if((s[0]=='\'')||(s[s.length-1]=='\'')) addAsterisk=false;
			if((s[0]=='"')||(s[s.length-1]=='"')) addAsterisk=false;
		}

		for(var i=0; i<wl; i++) {
			arrWords[i]=allTrim(arrWords[i]);
			arrWords[i]=arrWords[i].replace(/‘|’/g,'');

			if(stripLetters.length) {
				// strip eg s, y, ies from the end of words
				for(var j=0;j<stripLetters.length;j++) { 
					if(arrWords[i].toLowerCase().slice(arrWords[i].length-stripLetters[j].length)==stripLetters[j]) {
						if(!dontchange.test(allTrim(arrWords[i]).toLowerCase())) {
							arrWords[i]=arrWords[i].slice(0, (arrWords[i].length-stripLetters[j].length));
						}
					}
				}
			}

			if(addAsterisk) {
				arrWords[i]=allTrim(arrWords[i]);
				//skipAdd=(Ignore.test(arrWords[i]));
				var skipwords='|'+ignore.join('|')+'|'.toUpperCase(); 
				var word='|'+arrWords[i]+'|'.toUpperCase();
				skipAdd = (skipwords.indexOf(word)!=-1);
				if(!skipAdd) {
					s=arrWords[i]; 
					if(s.length>1) {
						s=s.charAt(s.length-1);
						// if the word does not end with one of these...
						if('\'*?!.,()/\\+-_'.indexOf(s)==-1) {
							arrWords[i]=arrWords[i]+'*';
						} else {
							// if the last char is ) then replace width *)
							if(arrWords[i].charAt(arrWords[i].length-1)==')') {
								arrWords[i]=arrWords[i].replace(')','*)');
							}
						}
					}
				}
			}
		}
	}
	return arrWords;
}

function SearchFrames(searchtext,usp,spb,skipstyle,wordmatchingstyle,within) {
	LoadSearchFrames=1;
	DoSearch(searchtext,usp,spb,skipstyle,wordmatchingstyle,within)
}

function DoSearch(searchtext,usp,spb,skipstyle,wordmatchingstyle,within) { 
	searchtext=allTrim(searchtext);

	if(!searchtext) {
		alert(sMessage_EmptySearch);
		return false;
	} 

	var inResults=false;
	var searchstyle=false;
	var spb=0;
	var sFilters='';
	var stripLetters=[];
	var arrWords=[];
	var sFilters='';
	var spe=0;
	var t='';
	var url='';
	var f;
	var addAsterisk=true;
	var keepS=false;

	searchtext=unescape(searchtext).replace(/\s{2,}/g,'');
	arrWords=searchtext.split(' ');

	// exact match - adds a wild card after each word unless exact match is selected
//	if(parent&&parent.resultspanel) {
//		keepS=(parent.resultspanel.ThisPageType=='keywords');
//	}
//	if(parent&&parent.resultspanel) {
//		addAsterisk=!(parent.resultspanel.ThisPageType=='keywords'); 
//	}
//	if(!keepS) stripLetters=['y','ies','s'];
	if(!keepS) stripLetters=['s'];
		
	arrWords=modifyWords(arrWords,stripLetters,addAsterisk);	
	searchtext=arrWords.join(' ');

	if(parent.resultspanel.AdvancedSearchBox) {
		// the powersearch box is showing, use the settings in the box
		sFilters = SetCollectionFilters(); 
		f=parent.resultspanel.document.mainform;
		if(f.psInResults) { 
			// checkbox is showing on the page?
			inResults=within||f.psInResults.checked; // in results (search panel setting)
			if(inResults) {
				searchstyle=true;
				spb=1;
			}
		}
	} else {
		inResults=within; 
		if(inResults) {
			searchstyle=true;
			spb=1;
		}
	}

	spe=0;
	if(!skipstyle) {
		spw=wordmatchingstyle;
		if(searchstyle) { 
			spe=1; usp=1; 
		}
	}

	t='sr-loadersearch.html';
	if(LoadSearchFrames==0) t='sr-body.html';

	url=dllName+'go?a=disp&pt=1&t='+t+'&si='+sessid+'&usp='+usp+'&_spb='+spb+'&_spe='+spe+'&_spw='+spw+'&mw=2&se='+se+sFilters;

//	alert(searchtext);

	if(LoadSearchFrames==1) {
		url+='&searchtext='+searchtext;
		parent.location.href=url;	
	} else {	
		f=parent.resultspanel.document.mainform;
		var ls=parseInt(f.lsindex.value);
		var so=parseInt(f.soindex.value);
		url+='&lg=0&ls='+ls+'&so='+so+'&search='+searchtext;
		parent.resultspanel.location.href=url;
	}

	return true;

}


// toggle powersearch options on/off

var firstclick=false; // is voor IE mac

function SwitchPowersearch() {
	if (!firstclick) {
		firstclick=true;
		document.mainform.idccustom_power.value=document.mainform.idccustom_power.value=='0'?'1':'0';
		GoPage(document.mainform.pagenr.value);
	}
}

// keyword lists preview pages 

function KeywordSearch(matchall) {
	var numberchecked = 0;
	var query='';
	var keyword;
	var el=document.mainform.elements;
	var arrWords=[];

	for (var i = 0; i<el.length; i++) {
		if ((el[i].name.indexOf('keyw_') > -1)) {
			if (el[i].checked) {
				numberchecked++;
				keyword=el[i].name.substring(5);
				keyword=keyword.replace(/\s{2,}/g,'');
				keyword=keyword.replace(/&/,' ');
				if(keyword.indexOf(' ')>=0) { 
					keyword=keyword.replace(/ and /gi, ' ');
					keyword='('+keyword.replace(/\s/gi, ' and ')+')';
				}
				arrWords.push(keyword);
			}
		}
	}
	if(numberchecked==0) { 
		alert(sMessage_MustSelectKeywords);
	} else {
		query=arrWords.join((matchall)?' and ':' or ');
		LoadSearchFrames=1;
		DoSearch(escape(query),0,0,false,0,false)
	}
}

// keyword index pages 21 apr 2006 MW

function WordlistSearch(prefix, matchall) {
	var numberchecked = 0;
	var query='';
	var operator='';
	var KS='';
	var offset=prefix.length;
	if(matchall) {
		KS=' and ';
	} else {
		KS=' or ';
	}
	for (var i = 0; i<document.mainform.elements.length; i++) {
		if ((document.mainform.elements[i].name.indexOf(prefix) > -1)) {
			if (document.mainform.elements[i].checked) {
				numberchecked++;
				if(query=='') { 
					operator='';
				} else { 
					operator=' '+KS+' '; 
				} 
				keyword=document.mainform.elements[i].name.substring(offset,50);
				keyword=replace(keyword,'  ',' ');
				keyword=replace(keyword,'&',' ');

				var keywords=keyword.split(' ');
				if(keywords.length>1) {
				
					keyword=replace(keyword,' and ', ' ');
					keyword=replace(keyword,' AND ', ' ');
					keyword='('+replace(keyword,' ', ' and ')+') ';
				}
				query=query+operator+keyword;
			}
		}
	}
	if(numberchecked==0) { 
		alert(sMessage_MustSelectKeywords);
	} else {
		parent.toppanel.SearchFrames(escape(query),0,0,false,0,false);
	}
}

function SingleWord(value) {
	value=replace(value,'&',' ');
	parent.toppanel.SearchFrames(value,0,0,false,0,false);
}

// end: keyword lists preview pages 

