/* XSearch Engine version5.2		*/

/* developed by P.Bestebroer		*/

/* http://www.dynamic-core.net	 	*/



function trecords(){

	this.index=(trecords.count++)

	this.link=''

	this.keywords=''

	this.description=''

	return this

}

trecords.prototype.set=function(link,keywords,description) {

	this.link=link

	this.keywords=keywords

	this.description=description

}

trecords.prototype.searchstring=function() { return this.link+' '+this.keywords+' '+this.description }

trecords.prototype.count=0



function add(link,keywords,description) {

	al=records.length

	records[al]=new trecords()

	records[al].set(link,keywords,description)

}



records = new Array()

finds=0

sites=0

version="v5.2"

andresult=false

SortResults=true

display_start=0

displast=10

function qsort(f, l){  // not used anymore, causes stack-overflow in large database

// Qsort function by Rob B.

	var a=f

	var b=l

	var s

	var m = results[(a+b)>>1].val

   	while (a<=b) {

		while (results[a].val>m) {a++}

		while (m>results[b].val) {b--}



		if (a<=b) {

            		s=results[a]

			results[a]=results[b]

			results[b]=s

            	a++

            	b--

        	}

	} 

	if (f<b) this.qsort(f, b)

	if (a<l) this.qsort(a, l)

}

function bsort() {

	for (var i=results.length-1; i>=0; i--) {

		for (var j=i; j>=0; j--) {

			if (results[i].val>results[j].val) {

				s=results[i]

				results[i]=results[j]

				results[j]=s

			}

		}	

	}

}



function searchAll(keyword){

	var timeA=new Date()

	var nw=0

	finds=0

	sites=0



	var x = parseIt(keyword)

	if(x == -1) return

	total_keywords=x



	document.open()

	document.clear()

	document.write('<link rel="stylesheet" href="xsearch.css">')

	AddBody()



	if (keyword.length>50) keyword=keyword.substring(0,60)+"..."



	results=new Array()

	for (q=0; q<records.length; q++) {

		results[q]=new Array()

		results[q].rec=q

		results[q].val=0

	}



	for (nw=0; nw<keywords.length; nw+=1) search(keywords[nw])

	if (andresult) {

		for (a=0; a<results.length; a+=1) {

			if (results[a].val>0) {

				if (results[a].val<=(total_keywords-1)<<1) {

					results[a].val=0

					sites-=1

				}

			}

		}

	}

	if (SortResults && keywords!='[all]') bsort()



	// Now we build the output page

	displast=display_start

	displast+=10

	if (displast>sites) displast=sites



	var timeB=new Date()



	if (finds==0) { display_start=-1; displast=0 }

	document.write("<center><h3>Resultados <b>"+(display_start+1)+"-"+(displast)+"</b> de <b>"+sites+"</b> para <b>"+keyword+"</b> tiempo de busqueda <b>"+((timeB-timeA)/1000)+"</b> segundos.</h3></center>")



	if (displast>sites && finds!=0) displast=sites+1





	if (finds==0) {

		document.write("<h3><font color=green>no hits on <b>''"+keyword+"''</b></font></h3>"+

						"<p>Your search - <b>"+keyword+"</b> - did not match any documents in this database.</p>"+

						"<LI>Make sure all words are spelled correctly.</li>"+

						"<LI>Try using fewer words.</li>"+

						"<LI>Try using more general keywords.</li>"+

						"<LI>Try different keywords.</li></span>"+

						"</p>")

		DisplayXSearch()

		document.close()

		return

	}



	q2=display_start

	q3=displast

	for (q=display_start; q<q3; q+=1) {

		if (results[q].val>0) {

			rc=results[q].rec

			document.write("<span class='xtitle'>"+records[rc].link+"</span><br>")

			x1=records[rc].link.indexOf('http://')

			if (x1==-1) x1=records[rc].link.indexOf('href=')+5

			else x1+=7

			x2=records[rc].link.indexOf('>')-1

			if (x1>0 && x2>0) {

				tmp=records[rc].link.substring(x1,x2)

				x2=tmp.indexOf(' ')

				if (x2>0) tmp=tmp.substring(0,x2)

				if (tmp.substring(0,1)=="'") tmp=tmp.substring(1,tmp.length-2)

				if (tmp.substring(0,1)=='"') tmp=tmp.substring(1,tmp.length-1)

				document.write("<table border=0 width=500><tr><td><span class='xresult'>"+records[rc].description+"</span></td></tr></table><span class='xlocation'>"+tmp+"</span><br><br>")

			}

			q2++

   		}

	}



	if (finds>10) {

		document.write("<BR>")

		pages=Math.round(finds/10)

		if (finds%10<6)	pages++



		// Create the parameter string

		paramstring=searchname+"?keywords="+keyword+"&and="+andresult+"&sort="+SortResults



		document.write("<center><span class='xsmall'>")

		if (display_start>0) document.write("<a href='"+paramstring+"&disp="+(display_start-10)+"'>página anterior</a>")

		document.write("&nbsp;&nbsp;&nbsp;")



		for (i=1; i<=pages; i+=1){

			if ((((i-1)*10)+1)<=sites) document.write("<a href='"+paramstring+"&disp="+(((i-1)*10))+"'>"+i+"</a>&nbsp&nbsp ")

		}

		document.write("&nbsp;&nbsp;&nbsp;")

		if (displast<=sites) document.write("<a href='"+paramstring+"&disp="+(displast)+"'>próxima página</a>")

		document.write("</span></center>")

	}

	DisplayXSearch()

	document.close()

}



function Cat() {

	document.open()

	document.clear()

	document.write('<link rel="stylesheet" href="xsearch.css">')

	AddBody()

	DisplayXSearch()

	document.close()

}



function stripInput(key) {

	while(key.substring(0,1) == ","  || key.substring(0,1) == " " ) key = key.substring(1,key.length)

	while(key.substring(key.length-1,key.length) == "," || key.substring(key.length-1,key.length) == " ") key = key.substring(0,key.length-1)

	return key

}



function parseIt(key) {

	key=stripInput(key)+" "

	var y=0



	while(key.indexOf(" ") > 0) {

		if (key.substring(0,1)=='"') {

			var pos=key.indexOf('"',2)

			keywords[y]=key.substring(1,pos)

			keywords[y]=stripInput(keywords[y])

			y++

			key=key.substring(pos+1,key.length)

		} else {

			var pos=key.indexOf(' AND ')

			if ((pos>0) && (key.indexOf(' ')>=pos)) {

				pos=key.indexOf(' ',pos+5)

				keywords[y]=key.substring(0,pos)

				keywords[y]=stripInput(keywords[y])

				y++

				key=key.substring(pos+1,key.length)

				if (key.substring(0,4)=='AND ') {

					pos=keywords[y-1].indexOf(' ')+5

					key=keywords[y-1].substring(pos,keywords[y-1].length)+' '+key

				}

			} else {

		  		var pos=key.indexOf(' OR ')

		  		if ((pos>0) && (key.indexOf(' ')>=pos))	{

					pos=key.indexOf(' ')

					keywords[y]=key.substring(0,pos)

					keywords[y]=stripInput(keywords[y])

					if (keywords[y]!=keywords[y-1])	y++

					key=key.substring(pos+1,key.length)

					pos=key.indexOf('OR ')

					key=key.substring(pos+3,key.length)

					pos=key.indexOf(' ')

					keywords[y]=key.substring(0,pos)

					keywords[y]=stripInput(keywords[y])

					y++

					key=key.substring(pos+1,key.length)

					if (key.substring(0,3)=='OR ') key=keywords[y-1]+' '+key

				} else {

					var pos = key.indexOf(" ")

					keywords[y]=key.substring(0,pos)

					keywords[y] = stripInput(keywords[y])

					y++

					if(y > 50) return -1

					key=key.substring(pos+1,key.length)

				}

			}

		}

	}

	return y-1

}



var keywords = new Array()

var results



function AddBody() {

	var keytext='"'+searchname+'?keywords="+'

	var andtext='"&and="+'



	document.write('<script>function doSearch(){'+

						'searchwords=document.searchform.searchwords.value; '+

						'while (searchwords.indexOf(" ")>-1){ pos=searchwords.indexOf(" ");'+

						'searchwords=searchwords.substring(0,pos)+"+"+searchwords.substring(pos+1); }'+

						'document.location='+keytext+' searchwords+'+andtext+'"0"}'+

						'<'+'/'+'script>'

						)



	templateBody()

	document.write("<form name='searchform' method='post' action='javascript:doSearch()'><table border='0' width='100%'><tr><td align='center'><font face='Arial, Helvetica, sans-serif' size='3'><input name='searchwords' type='text' size='30'>&nbsp;&nbsp;<a href='javascript:doSearch()'>"+ButtonCode+"</a></font></td></tr></table></form><hr size=1>")

	if (usebannercode) bannerCode()

}



function DisplayXSearch() {

	// This line can be removed, but please don't add anything like

	// copyright by <your name here> because that's not allowed, and

	// if you remove or change this line, make sure there is some credit here

	// and a link to www.dynamic-core.net so that other people can also

	// get their hands on this FREE search engine.. Thank you.

	document.write("<h3><center></center></h3>")

	templateEnd()

}



function search(keyword) {

	var hit=0

	var addcomplete=0



	for (q=0; q<records.length; q++) {

		addcomplete=0

		search_parm=" "+records[q].searchstring()+" "

		search_parm=search_parm.toLowerCase()



		if (keyword.indexOf(' AND ')>0) {

			firstword=keyword.substring(0,keyword.indexOf(' ')).toLowerCase()

			lastword=keyword.substring(keyword.indexOf(' AND ')+5,keyword.length).toLowerCase()

			if ((search_parm.indexOf(" "+firstword+" ") != -1) && (search_parm.indexOf(" "+lastword+" ")!= -1 )) {

				hit++

				finds++

				if(hit<2) { 

					if (results[q].val==0) sites++

					results[q].val +=2

				} 

			}

		} else {

			keyword=keyword.toLowerCase()

			if ((search_parm.indexOf(" "+keyword+" ") != -1) ||(keyword=="[all]")) {

				hit++

				finds++

				if(hit<2) { 

					if (results[q].val==0) sites++

					results[q].val+=2

				} 

			} else {

				// check for a half hit (ie. search:share find:SHAREware)

				if (search_parm.indexOf(keyword) != -1)	{

					hit++

					finds++

					if(hit < 2) {

						if (results[q].val==0) sites++

						results[q].val+=1

						x=search_parm.indexOf(keyword)+keyword.length

						pos=search_parm.substring(1,x-keyword.length)

						while (pos.indexOf(" ")!=-1) {

							y=pos.indexOf(" ")

							pos=pos.substring(y+1,pos.length)

						}

						if (pos.length<=2) addcomplete++

	

						pos=search_parm.substring(x,search_parm.length)

						fullresult=search_parm.substring(x,x+pos.indexOf(" "))

						

						if (fullresult.length<=2) addcomplete++

						if (addcomplete>1) results[q].val+=1

					}

				}

			}

		}

		hit=0

	} 

}                                       



var searchwords = ''

var newload = true



function initXsearch() {

	if (searchwords!='') searchAll(searchwords)

	else if (newload) Cat()

}



function tparams(){

	parameters=document.location.search

	parameters=unescape(parameters.substring(1,parameters.length)+'&')



	this.params=new Array()

	i=0

	while (parameters.indexOf('&',0)!=-1) {

		al=this.params.length

		this.params[al]=new Array()

	

		tmp=parameters.substring(0,parameters.indexOf('&',0))

		parameters=parameters.substring(parameters.indexOf('&',0)+1)



		if (tmp.indexOf('=')!=-1) {

			this.params[al].command=tmp.substring(0,tmp.indexOf('='))

			this.params[al].value=tmp.substring(tmp.indexOf('=')+1)

		} else {

			this.params[al].command=tmp

			this.params[al].value=''

		}

	}



	return this

}

tparams.prototype.getValue=function(param){

	value=''

	param=param.toLowerCase()

	al=this.params.length

	for (var i=0; i<al; i+=1) if (this.params[i].command==param) value=this.params[i].value

	return value

}



params=new tparams()

if (params.getValue('keywords')!=''){

	searchwords=params.getValue('keywords')

	origsearchwords=searchwords

	while (searchwords.indexOf('+')>-1) {

		pos=searchwords.indexOf('+')

		searchwords=searchwords.substring(0,pos)+' '+searchwords.substring(pos+1)

	}

}

if (params.getValue('sort')!='')

	if (params.getValue('sort')=='0' || params.getValue('sort')=='false') SortResults=false

	else SortResults=true

if (params.getValue('and')!='')

	if (params.getValue('and')=='0' || params.getValue('and')=='false') andresult=false

	else andresult=true

if (params.getValue('disp')!='') display_start=parseInt(params.getValue('disp'))

