var request;

function NewHTTP() {
    request=null;
    try {
        return new XMLHttpRequest();
    } 
    catch (e) {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e) {
            return new ActiveXObject('Microsoft.XMLHTTP');
        }
    }
}

/* 
* form refinement search
*/
function makerefinesearch(type) {
    var query = 'action=find';
    /*
    * loop through all checkboxes
    * if this is a new refine query:
    *     uncheck checkbox with value 'all'
    *     for other checkbox: if they're checked: add to query
    * if this is a reset of a refine query
    *     check checkbox with value 'all'
    *     uncheck the other checkboxes
    *     reset query to [field]=all
    */
    
    var refineform = document.forms['refinementform'];
    
    var materialrefine = refineform.materialtype;
    for (i=0; i<materialrefine.length;i++) {
        if (type == 'reset') {
            if (materialrefine[i].value == 'all') {
                materialrefine[i].checked = true;
                query += "&materialtype=all";
            }
            else {
                materialrefine[i].checked = false;
            }
        }
        else {
            if (materialrefine[i].checked) {
                if (materialrefine[i].value == 'all') {
                    materialrefine[i].checked = false;
                }
                else {
                    query += "&materialtype=" + materialrefine[i].value;
                }
            }
        }
    }
    
    var timeperiodrefine = refineform.aboutperiod;
    for (j=0; j<timeperiodrefine.length;j++) {
        if (type=='reset') {
            if (timeperiodrefine[j].value=='all') {
                timeperiodrefine[j].checked = true;
                query += "&periodrefine=all";
            }
            else { 
                timeperiodrefine[j].checked = false;
            }
        }
        else {
            if (timeperiodrefine[j].checked) {
                if (timeperiodrefine[j].value == 'all') {
                    timeperiodrefine[j].checked = false;
                }
                else {
                    query += "&periodrefine=" + timeperiodrefine[j].value;
                }
            }
        }
    }
    
    var foundinrefine = refineform.foundin;
    for (f=0;f<foundinrefine.length;f++) {
        if (type == 'reset') {
            if (foundinrefine[f].value == 'all') {
                foundinrefine[f].checked = true;
                query += "&foundinrefine=all";
            }
            else {
                foundinrefine[f].checked = false;
            }
        }
        else {
            if (foundinrefine[f].checked) {
                if (foundinrefine[f].value == 'all') {
                    foundinrefine[f].checked = false;
                }
                else {
                    query += "&foundinrefine=" + foundinrefine[f].value;
                }
            }
        }
    }
    
    var subjectrefine = refineform.refinesubject;
    for (s=0;s<subjectrefine.length;s++) {
        if (type == 'reset') {
            if (subjectrefine[s].value == 'all') {
                subjectrefine[s].checked = true;
                query += "&subjectdiscipline=all";
            }
            else {
                subjectrefine[s].checked = false;
            }
        } 
        else {
            if (subjectrefine[s].checked) {
                if (subjectrefine[s].value == 'all') {
                    subjectrefine[s].checked = false;
                }
                else {
                    query += "&subjectdiscipline=" + subjectrefine[s].value;
                }
            }
        }
    }
    
    
    /*
    * not checkboxes, but text input
    */
    var afterrefine = refineform.published_after;
    if (afterrefine.value != '') {
        query += "&published_after=" + afterrefine.value;
    }
    
    var beforerefine = refineform.published_before;
    if (beforerefine.value != '') {
        query += "&published_before=" + beforerefine.value;
    }

    return query;
}


/*
* refinement search
*/
function dorefinesearch(type) {
    var query = makerefinesearch(type);
    var url = thisdomain + "ajax/php/refinesearch.php?" + query;

//alert(url);
    request = NewHTTP();
    if (request == null) alert('kan geen verbinding maken');
 
    request.open("GET",url,true);
    request.onreadystatechange = OnRefineData;
    request.send(null);
}

function resetrefinesearch(refinecrit) {
    var refineform = document.forms['refinementform'];
    var refinefield;
    if (refinecrit == 'materialtype') {
        refinefield = refineform.materialtype;
    }
    else if (refinecrit == 'aboutperiod') {
        refinefield = refineform.aboutperiod;
    }
    else if (refinecrit == 'foundin') {
        refinefield = refineform.foundin;
    }
    else if (refinecrit == 'refinesubject') {
        refinefield = refineform.refinesubject;
    }
    
    for (i=0; i<refinefield.length; i++) {
        if (refinefield[i].value == 'all') {
            refinefield[i].checked = true;
        }
        else {
            refinefield[i].checked = false;
        }
    }

    dorefinesearch('reset');
}


/*
results of refinement search
*/
function OnRefineData() {
    if (request.readyState==4) {

        var resultstable = document.getElementById("searchresultstable");
        var rows = resultstable.rows;
        var l = rows.length;
        for (w=0; w<l; w++) {
            resultstable.deleteRow(0);
        }

        if (request.status==200) {
            if (request.responseXML != null  ) {
                
		document.getElementById("recountreset").innerHTML = '<a href="javascript:window.location.reload()" style="font-weight:bold">Hef beperkingen op</a>';
                
                var xmlDoc = request.responseXML;
                var qry = document.getElementById("qry").value;

		var hits=xmlDoc.documentElement.getElementsByTagName("hit");
	   	var totalcount = hits.length;
	   	document.getElementById("totalhits").innerHTML = "totaal " + totalcount + " hits";
	   	var rownumber = 0;
		var userid = document.getElementById("userid").innerHTML;    
		
		//get the metadata for all hits after refinement
		
		/*
		 * show all hits, because paging will not work without resetting session data
		 */
		 /*
		var numbertoget;
		if (totalcount < 10) {
		    numbertoget = totalcount;
		}
		else {
		    numbertoget = 10;
		}
		*/
		var numbertoget = totalcount;
		    
	   	for (var i=0; i<numbertoget; i++) {
	   	    var references = hits[i].getElementsByTagName("reference");
	            var hitreference = references[0].firstChild.nodeValue;
	                
	            var objectids = hits[i].getElementsByTagName("objectid");
	            var hitobjectid = objectids[0].firstChild.nodeValue;
	            
                    var tfiles = hits[i].getElementsByTagName("thumbnailfile");
                    var thumbnailfile = tfiles[0].firstChild.nodeValue;


	            var titles = hits[i].getElementsByTagName("title");
   	            var htitle = titles[0].firstChild.nodeValue;
	            //unescape <>
		    var escaped_opentag = new RegExp(/&lt;/g);
		    var escaped_closetag = new RegExp(/&gt;/g);
		    var hittitle = htitle.replace(escaped_opentag, "<");
		    hittitle = hittitle.replace(escaped_closetag, ">");

	            
	            var authorline = '';
                    var authors = hits[i].getElementsByTagName("author");
                    if (authors.length > 0) {
                        for (var a=0; a<authors.length; a++) {
                       	    var author = authors[a].firstChild.nodeValue;
                    	    authorline += author + ' ';
                        }
                    }
                    var publyears = hits[i].getElementsByTagName("published");
                    var published = publyears[0].firstChild.nodeValue;
                    var material = hits[i].getElementsByTagName("contenttype");
                    var contenttype = material[0].firstChild.nodeValue;
                    var subjectline = '';
                    var subs = hits[i].getElementsByTagName("subject");
                    for (var s=0; s<subs.length; s++) {
                    	var sublabel = subs[s].getElementsByTagName("subjectlabel");
                    	var subjectlabel = sublabel[0].firstChild.nodeValue;
                    	subjectline += subjectlabel + ' ';
                    }
                    
                    var timeperiodline = '';
                    var timeperiods = hits[i].getElementsByTagName("timeperiods");
                    for (var t=0; t<timeperiods.length; t++) {
                        var timeperiod = timeperiods[t].getElementsByTagName("timeperiod");
                        var timedisplay = timeperiod[0].firstChild.nodeValue;
                        timeperiodline += timedisplay + ' ';
                    }
                    var timelines = hits[i].getElementsByTagName("timetoshow");
                    var timeline = timelines[0].firstChild.nodeValue;
	                    
                    
	            var thumbcellcontents = '';    
                    var titlecellcontents = 'Titel: ';
                    var exp = new RegExp("Boeken");
                    var domain = new RegExp("http://digbijzcoll.library.uu.nl/");
                    if (exp.test(hitreference) == true) {
                        thumbcellcontents += '<a href="context.php?type=ft&objectid=' + hitobjectid + '&qry=' + qry + '" class="titlelink"><img src="showthumbnail.php?imgfile=' + thumbnailfile + '" alt="afbeelding"/></a>';
                        titlecellcontents += '<a href="context.php?type=ft&objectid=' + hitobjectid + '&qry=' + qry + '" class="titlelink">' + hittitle + '</a>';
                        titlecellcontents += '<br/><span class="metadatatext">hits in fulltext</span>';
                    }
                    else {
                        thumbcellcontents += '<a href="context.php?type=mt&objectid=' + hitobjectid + '" class="titlelink"><img src="showthumbnail.php?imgfile=' + thumbnailfile + '" alt="afbeelding"/></a>';
                        titlecellcontents += '<a href="context.php?type=mt&objectid=' + hitobjectid + '" class="titlelink">' + hittitle + '</a>';
                    }

                    var streepje = new RegExp("-");
	            if (streepje.test(authorline) == false && authorline != '') {
                        titlecellcontents += '<br/>Auteurs: ' + authorline;
                    }
                    
                    if (published != '' && published != '-') {
                        titlecellcontents += '<br/>Jaar van publicatie: ' + published;
                    }
                    titlecellcontents += '<br/>Materiaalsoort: ' + contenttype;
                    titlecellcontents += '<br/>Onderwerpen: ' + subjectline;
                    titlecellcontents += '<br/>Tijdvak: ' + timeperiodline;
                    
                    if (timeline != '' && timeline != '-') {
                        titlecellcontents += '<br/>Periode: ' + timeline;
                    }
                    
	            var tbl = resultstable.insertRow(rownumber);
	            var a = tbl.insertCell(0);
	            var b = tbl.insertCell(1);
	            var c = tbl.insertCell(2);
	            
	            a.innerHTML = thumbcellcontents
	            b.innerHTML = titlecellcontents;
	                   
	            if (userid != '-') {
	                userid = userid.replace(/^\s+/,''); 
	                userid = userid.replace(/\s+$/,'');
	                c.id = "fav_" + hitreference;
	                c.className = "favouritelink";
	                c.innerHTML = '<span onclick="addfavourite(\'' + userid + '\', \'' + hitreference + '\')">Voeg toe aan favorieten</span>';
	            }
	            else {
	                c.innerHTML = '<span title="Log in om favorieten te gebruiken">Voeg toe aan favorieten</span>';
	            }
	                
	            rownumber++;
	        }
	        
	        document.getElementById("prevlink").style.visibility="hidden";
	        document.getElementById("nextlink").style.visibility="hidden";


	        
	        /* DO NOT PAGE
	        * searchpaging works with data in the session
	        * so either replace the session data or disable paging after refine
	        * I have chosen the latter
	        */
	        /*
	        document.getElementById("prevstart").value = 0;
	        document.getElementById("nextstart").value = 10;
	        document.getElementById("prevlink").style.visibility="hidden";
	               
	        if (totalcount > 10) { //we are on the last page
	            document.getElementById("nextlink").style.visibility="visible";
	        }
	        else {
	            document.getElementById("nextlink").style.visibility="hidden";
	        }
	        */
	        
	   	   
	   	//and now: recount everything, to show user what further refines would bring
		//to make things harder: 
		//  keep everything checked that was checked before we sent off the refine query
		//  that's how we can combine refine queries
	        //the counts can be found in the 'counts' part of the XML
		var queryfield = xmlDoc.documentElement.getElementsByTagName("query");
		var query = queryfield[0].firstChild.nodeValue;
		
		var recountedcriteria = '';
		        
		//Refine by material type
		recountedcriteria += "<h4>Materiaal</h4>";
		
		//commented out: show checkbox for 'all'
		//var matref = new RegExp("materialtype");
		//var allmatref = new RegExp("materialtype=all");
		//if (matref.test(query) == true && allmatref.test(query) == false) {
		//    recountedcriteria += '<!--<input type="checkbox" id="materialtype_all" name="materialtype" value="all" onclick="resetrefinesearch(\'materialtype\')"/>alles (' + totalcount + ') -->'; 
		//}
		//else {
		//    recountedcriteria += '<!--<input type="checkbox" id="materialtype_all" name="materialtype" value="all" checked="true" />alles (' + totalcount + ')-->'; 
		//}
		//recountedcriteria += '<br/>';
		
		
		var materialcounts = xmlDoc.documentElement.getElementsByTagName("material");
		for (i=0; i<materialcounts.length; i++) {
		    var typecount = materialcounts[i].getElementsByTagName("mtype");
		    var typetext = typecount[0].firstChild.nodeValue;
		    var showtype;
		    if (typetext == 'book') {
		        showtype = 'boek';
		    }
		    else if (typetext == 'Video') {
		        showtype = 'video';
		    }
		    else {
		        showtype = 'afbeelding';
		    }

		    var matcount = materialcounts[i].getElementsByTagName("mcount");
		    var matcounttext = matcount[0].firstChild.nodeValue;
		    
		    var mattyperef = new RegExp("materialtype="+typetext);
		    if (mattyperef.test(query) == true) {
		        recountedcriteria += '<input type="checkbox" id="materialtype_' + typetext + '" name="materialtype" checked="true" value="' + typetext + '" onclick="dorefinesearch(\'new\')"/>' + showtype + '(' + matcounttext + ')'; 
		    }
		    else {
		        recountedcriteria += '<input type="checkbox" id="materialtype_' + typetext + '" name="materialtype" value="' + typetext + '" onclick="dorefinesearch(\'new\')"/>' + showtype + '(' + matcounttext + ')'; 
		    }
		    recountedcriteria += '<br/><br/><br/>';
		}

	
		//Refine by publishing date
		var after = new RegExp('published_after');
		var before = new RegExp('published_before');
		
		var publ_after_date = '';
		var publ_before_date = '';
		var queryparts = query.split('|');
		for (q=0; q<queryparts.length; q++) {
		    if (after.test(queryparts[q]) == true) {
		        var afterindex = queryparts[q].indexOf('=');
		        publ_after_date = queryparts[q].substring(afterindex+1);
		    }
		    
		    if (before.test(queryparts[q]) == true) {
		        var beforeindex = queryparts[q].indexOf('=');
		        publ_before_date = queryparts[q].substring(beforeindex+1);
		    }
		}    
		recountedcriteria += '<h4>Tijd</h4>';
		recountedcriteria += 'Gepubliceerd:<br/>';
		recountedcriteria += 'van <br/>';
		recountedcriteria += '<input type="text" id="published_after" name="published_after" value="' + publ_after_date + '" onchange="dorefinesearch(\'new\')"/>';
		recountedcriteria += '<br/>tot <br/>';
		recountedcriteria += '<input type="text" id="published_before" name="published_before" value="' + publ_before_date + '" onchange="dorefinesearch(\'new\')"/>';
		recountedcriteria += '<br/><br/>';

		//Refine by time period
		//hide if the original query was from a timeperiod, by putting it in a hidden div
		var tp = new RegExp("timeperiod");
		var locationstring = location.search;
		if (tp.test(locationstring) == true) {
		    recountedcriteria += '<div id="timeperiodbox" style="display:none;">';
		}
		recountedcriteria += "Tijdvak<br/>";
		
		//commented out: show checkbox for 'all'
		//var periodref = new RegExp("periodrefine");
		//var allperiods = new RegExp("periodrefine=all");
		//if (periodref.test(query) == true && allperiods.test(query) == false) {
		//    recountedcriteria += '<!--<input type="checkbox" id="aboutperiod_all" name="aboutperiod" value="all" onclick="resetrefinesearch(\'aboutperiod\')" /> alle (' + totalcount + ')-->';
		//}
		//else {
		//    recountedcriteria += '<!--<input type="checkbox" id="aboutperiod_all" name="aboutperiod" value="all" checked="true" /> alle (' + totalcount + ')-->';
		//}
		//recountedcriteria += '<br/>';
		
		
		var periodcounts = xmlDoc.documentElement.getElementsByTagName("period");
		for (var p=0; p<periodcounts.length; p++) {
		    var pname = periodcounts[p].getElementsByTagName("pname");
		   var pnametext = pname[0].firstChild.nodeValue;
		    var pnumber = periodcounts[p].getElementsByTagName("pnumber");
		    var pnumbertext = pnumber[0].firstChild.nodeValue;
		    var pcount = periodcounts[p].getElementsByTagName("pcount");
		    var pcounttext = pcount[0].firstChild.nodeValue;
		    
		    var tperiodref = new RegExp("periodrefine="+pnumbertext);
		    if (tperiodref.test(query) == true) {
		        recountedcriteria += '<input type="checkbox" id="aboutperiod_' + pnumbertext + '" name="aboutperiod" checked="true" value="' + pnumbertext + '" onclick="dorefinesearch(\'new\')" />' + pnametext + '(' + pcounttext + ')';
		    }
		    else {
		        recountedcriteria += '<input type="checkbox" id="aboutperiod_' + pnumbertext + '" name="aboutperiod" value="' + pnumbertext + '" onclick="dorefinesearch(\'new\')" />' + pnametext + '(' + pcounttext + ')';
		    }
		    
		    recountedcriteria += '<br/><br/><br/>';
		}
		if (tp.test(locationstring) == true) {
		    recountedcriteria += '</div>';
		}
		
		//Refine by source
		recountedcriteria += '<h4>Gevonden in</h4>';
		
		//commented out: show checkbox for 'all'
		//var sourceref = new RegExp("foundinrefine");
		//var allsources = new RegExp("foundinrefine=all");
		//if (sourceref.test(query) == true && allsources.test(query) == false) {
		//    recountedcriteria += '<!--<input type="checkbox" id="foundin_all" name="foundin" value="all" onclick="resetrefinesearch(\'foundin\')" /> Alles (' + totalcount + ')-->';
		//}
		//else {
		//    recountedcriteria += '<!--<input type="checkbox" id="foundin_all" name="foundin" value="all" checked="true" /> Alles (' + totalcount + ')-->';
		//}
		//recountedcriteria += '<br/>';
		
		var foundincounts = xmlDoc.documentElement.getElementsByTagName("foundin");
		for (i=0; i<foundincounts.length; i++) {
		    var finame = foundincounts[i].getElementsByTagName("finame");
		    var finametext = finame[0].firstChild.nodeValue;
		    var ficount = foundincounts[i].getElementsByTagName("ficount");
		    var ficounttext = ficount[0].firstChild.nodeValue;
		    
		    var foundref = new RegExp("foundinrefine="+finametext);
		    if (foundref.test(query) == true) {
		        recountedcriteria += '<input type="checkbox" id="foundin_' + finametext + '" name="foundin" checked="true" value="' + finametext + '"  onclick="dorefinesearch(\'new\')" />' + finametext + '(' + ficounttext + ')';
		    }
		    else {
		        recountedcriteria += '<input type="checkbox" id="foundin_' + finametext + '" name="foundin" value="' + finametext + '"  onclick="dorefinesearch(\'new\')" />' + finametext + '(' + ficounttext + ')';
		    }
		    
		    recountedcriteria += '<br/><br/>';
		}

                 //Refine by category
                 recountedcriteria += '<h4>Categorie</h4><br/>';
                 
                 //commented out: show checkbox for 'all'
                 //var subref = new RegExp("subjectdiscipline");
                 //var allsubrefs = new RegExp("subjectdiscipline=all");
                 //if (subref.test(query) == true && allsubrefs.test(query) == false) {
                 //    recountedcriteria += '<!--<input type="checkbox" id="refinesubject_all" name="refinesubject" value="all" onclick="resetrefinesearch(\'refinesubject\')" /> Alles (' + totalcount + ')-->';
                 //}
                 //else {
                 //    recountedcriteria += '<!--<input type="checkbox" id="refinesubject_all" name="refinesubject" value="all" checked="true" /> Alles (' + totalcount + ')-->';
                 //}
                 //recountedcriteria += '<br/><br/>';
                 
                 var categories = xmlDoc.documentElement.getElementsByTagName("cat");
                 for (i=0; i<categories.length; i++) {
	             var catname = categories[i].getElementsByTagName("name");
		     var catnametext = catname[0].firstChild.nodeValue;
		     recountedcriteria += '<span class="cathead">' + catnametext + '</span><br/>';
		    
		     var foundsubs = categories[i].getElementsByTagName("sub");
		     for (var j=0; j<foundsubs.length; j++) {
		     var subcode = foundsubs[j].getElementsByTagName("subcode");
		     var subcodetext = subcode[0].firstChild.nodeValue;
		     var sublabel = foundsubs[j].getElementsByTagName("sublabel");
		     var sublabeltext = sublabel[0].firstChild.nodeValue;
		     var subcount = foundsubs[j].getElementsByTagName("subcount");
		     var subcounttext = subcount[0].firstChild.nodeValue;
		        
		     var onesubref = new RegExp("subjectdiscipline="+subcodetext);
		     if (onesubref.test(query) == true) {
		         recountedcriteria += '<input type="checkbox" id="refinesubject_' + subcodetext + '" name="refinesubject" checked="true" value="' + subcodetext + '" onclick="dorefinesearch(\'new\')"/>' + sublabeltext + '(' + subcounttext + ')<br/>';
		     }
		     else {
		         recountedcriteria += '<input type="checkbox" id="refinesubject_' + subcodetext + '" name="refinesubject" value="' + subcodetext + '" onclick="dorefinesearch(\'new\')"/>' + sublabeltext + '(' + subcounttext + ')<br/>';
		     }
                }
		document.getElementById("refinementform").innerHTML = recountedcriteria;
	     }

         }
         else {
             var a = resultstable.insertRow(rownumber);
	     var b = a.insertCell(0);
	     b.innerHTML = 'het verfijnen is helaas niet gelukt<br><a href="javascript:window.location.reload()">toon alle hits</a>';

         }
     }
     else {
         var a = resultstable.insertRow(rownumber);
	 var b = a.insertCell(0);
	 b.innerHTML = 'het verfijnen is helaas niet gelukt<br><a href="javascript:window.location.reload()">toon alle hits</a>';
     }
  }
    
}



/*
* search within a book
*/
function makecontextsearch() {
    if ( request != null ) return;
    
    var searchword = document.getElementById("contextsearch").value;
    var bookcontext = document.getElementById("bookcontext").value;
    var url = thisdomain + "ajax/php/contextsearch.php?query=" + searchword + "&bookcontext=" + bookcontext;

//alert(url);    

    request = NewHTTP();

    if (request == null) alert('kan geen verbinding maken');
    request.open("GET",url,true);
    request.onreadystatechange = OnContextData;
    request.send(null);
}


/*
* give page numbers within the book
*/
function OnContextData() {
    if (request.readyState==4) {
        if (request.status==200) {
            errorText = "";
            
            var responsestring = request.responseText;
            var pagelinks = "<p>";
            
            pagelinks = pagelinks + responsestring;
            
            pagelinks += "</p>";
            
            document.getElementById("righttab").innerHTML = pagelinks;
        }
        else {
            errorText = "niets gevonden";
            document.getElementById("righttab").innerHTML = errorText;
        }
     }
}



