You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
4.4 KiB

function URLDecode(encoded)
{
var HEXCHARS = "0123456789ABCDEFabcdef";
var plaintext = "";
var i = 0;
while (i < encoded.length) {
var ch = encoded.charAt(i);
if (ch == "+") {
plaintext += " ";
i++;
} else if (ch == "%") {
if (i < (encoded.length-2)
&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
plaintext += unescape( encoded.substr(i,3) );
i += 3;
} else {
alert( 'Bad escape combination near ...' + encoded.substr(i) );
plaintext += "%[ERROR]";
i++;
}
} else {
plaintext += ch;
i++;
}
} // while
return plaintext;
};
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return '';
}
function updateSearch() {
document.getElementById('search').value=URLDecode(getQueryVariable('search'));
}
// The search function takes a query, parses the query and returns
// a list of URLs that match the query ordered by URL name.
function query() {
// This assumes theres a visible dataSources vbb available, not passed as
// an argument for performance considerations (avoid copying the vbb)
}
function trim(s) {
s=s.replace(/^[\s]+/g,"");
s=s.replace(/[\s]+$/g,"");
return s;
}
// Binary search of a single word in the list of keywords
function single_query(single,min,max) {
// Search this single word in the keywords array
// uses a bnary search
var mid = min + Math.floor( (max-min) / 2);
if(single == parent.searchdata.keywords[mid][0]) {
// The list of documents where this single query appears
return parent.searchdata.keywords[mid][1];
} else {
if(min==max) return -1;
if(single > parent.searchdata.keywords[mid][0]) {
return single_query(single,mid+1,max);
} else {
return single_query(single,min,mid-1);
}
}
}
function run_query(test) {
var res = new Array();
var aux = new Array();
test=test.toLowerCase();
var i;
var j;
var and_array = test.split('+');
if(and_array.length>1) {
for(i=0;i<and_array.length;i++) {
aux = run_query(trim(and_array[i]));
if(res.length>0) {
res = intersect_sorted(res,aux);
} else {
res = aux;
}
}
return res;
} else {
var or_array = test.split(' ');
if(or_array.length>1) {
for(i=0;i<or_array.length;i++) {
aux = run_query(trim(or_array[i]));
res = union_sorted(res,aux);
}
return res;
} else {
aux = single_query(test,0,parent.searchdata.keywords.length);
for(i=0;i<aux.length;i++) {
res[res.length] = aux[i];
}
res = res.sort();
return res;
}
}
}
function intersect_sorted(a1,a2) {
var i = 0; var j =0;
var nr = new Array();
while(i<a1.length && j<a2.length) {
if(a1[i]<a2[j]) {
i++;
} else {
if(a1[i]>a2[j]) {
j++;
} else {
nr[nr.length]=a1[i];
i++; j++;
}
}
}
return nr;
}
function union_sorted(a1,a2) {
var i = 0; var j =0;
if(a1.length==0) return a2;
if(a2.length==0) return a1;
var nr = new Array();
while(i<a1.length || j<a2.length) {
if((i<=a1.length && j<=a2.length && a1[i]<a2[j]) || (j>=a2.length)) {
nr[nr.length]=a1[i];
i++;
} else {
if((i<=a1.length && j<=a2.length && a1[i]>a2[j])||(i>=a1.length)) {
nr[nr.length]=a2[j];
j++;
} else {
nr[nr.length]=a1[i];
i++; j++;
}
}
}
return nr;
}
function doQuery() {
parent.docs = new Array();
parent.content.window.location.reload();
query = parent.toolbar.document.getElementById('search').value;
//Now perform a single query
var results = run_query(query,0,parent.searchdata.keywords.length);
//alert(results);
for(i=0;i<results.length;i++) {
parts = results[i].split('|');
parent.docs[parent.docs.length]=parts[1]+'|'+parts[0];
}
parent.docs.sort();
parent.title='pepe';
parent.menu.location.href='results.html';
}