// Global flag
var isIE = false;

// Global request and XML document objects
var req;

// Global variable needed because of dynamic callback handler
var globalStart = 1;

// Retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function loadXMLDoc(url,type) {
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        if (type == "blader") {
        	req.onreadystatechange = processReqChange;
        } else {
        	req.onreadystatechange = processReqChange2;
        }
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
        	if (type == "blader") {
            	req.onreadystatechange = processReqChange;
            } else {
            	req.onreadystatechange = processReqChange2;            
            }
            req.open("GET", url, true);
            req.send();
        }
    }
}

// Handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
        	// Fill the select boxes
        	//alert(req.responseText);
            clearList("vorm_dummy");
            buildList("vorm_dummy","vorm");
        	clearList("richting_dummy");
        	buildList("richting_dummy","richting");
        	clearList("gemeente_dummy");
        	buildList("gemeente_dummy","gemeente");
            clearList("wijk_dummy");
            buildList("wijk_dummy","wijk");
            if (document.getElementById("gemeente_dummy").disabled==false) {
            	document.getElementById("wijk_dummy").disabled=true;
            }
            // Show the results pane
            showResults(globalStart,"blader");
         } else {
            alert("Er is een probleem opgetreden bij het ophalen van gegevens:\n" +
                req.statusText);
         }
    }
}

function processReqChange2() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
        	//alert(req.responseText);
            showResults(globalStart,"zoek");
         } else {
            alert("Er is een probleem opgetreden bij het ophalen van gegevens:\n" +
                req.statusText);
         }
    }
}

// Determine the criteria to be sent to the XML Handler Script
function formHandler(type, start) {
    try {
		if (start) {
			globalStart=start;
		} else {
			globalStart=1;
		}
        if (type == "blader") {
	    	data  = "richting=" + getFormData("richting_dummy","form_richting");
	    	data += "&vorm=" + getFormData("vorm_dummy","form_vorm");
	    	data += "&gemeente=" + getFormData("gemeente_dummy","form_gemeente");
	    	data += "&wijk=" + getFormData("wijk_dummy","form_wijk");
	   		data += "&start=" + start;
	   		showWaitMessage('blader');
	        loadXMLDoc("school_search.php?" + data,"blader");
		} else {
	        data  = "searchstring=" + getFormData("searchstring");
	       	data += "&start=" + start;
	       	showWaitMessage('zoek');
	        loadXMLDoc("school_search2.php?" + data,"zoek");
		}
    }
    catch(e) {
        var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
        alert("Kan XML data niet ophalen:\n" + msg);
        return;
    }
}	


// Get the selected data from the form and put it into the corresponding Form Field
// This is necessary so fields get submitted, even if the field is disabled
function getFormData(elemid, copyid) {
	elem = document.getElementById(elemid);
	if (elem.options) {
		value = elem.options[elem.selectedIndex].value;
	} else {
		value = elem.value;
	}
	if (copyid) {
		copy = document.getElementById(copyid);
		copy.value = value;
	}
	return value;
}


// Empty select list content
function clearList(listId) {
    var select = document.getElementById(listId);
    while (select.length > 0) {
        select.remove(0);
    }
}

// Add item to select element the less
// elegant, but compatible way.
function appendToSelect(select, value, content, selected) {
    var opt;
    opt = document.createElement("option");
    opt.value = value;
    if (selected=="true") {
    	select.disabled = true;
    	opt.selected = true;
    } 
    opt.appendChild(content);
    select.appendChild(opt);
}

// Fill Topics select list with items from
// the current XML document
function buildList(listId, listName) {
    var select = document.getElementById(listId);
    var items = req.responseXML.getElementsByTagName(listName);
    appendToSelect(select,"",document.createTextNode("Kies een " + listName),false);
    select.disabled=false;
    for (var i = 0; i < items.length; i++) {
        appendToSelect(select, items[i].getAttribute("value"), document.createTextNode(items[i].getAttribute("label")),items[i].getAttribute("selected"));
    }
}

// Display details retrieved from XML document
// 
function showResults(start,type) {
	var items = req.responseXML.getElementsByTagName("school");
	results_ul = "";
	for (var i = start-1; (i < items.length) && (i < start+4); i++) {
		if (type == "blader") {
			if ((i-start+1)%2 == 1) {
				myClass = 'even';
			} else {
				myClass = 'odd';
			}
			if (items[i].childNodes.length > 0) {
				friend = ' schoolfriend';
			} else {
				friend = '';
			}
			results_ul += '<li class="' + myClass + friend + '"><a href="#" class="' + myClass + '"';
			results_ul += ' onClick="loadDetails(\'blader\',' + items[i].getAttribute("id") + ',' + start + ');">';
			results_ul += items[i].getAttribute("name");
			results_ul += "</a></li>";
		} else {
			if ((i-start+1)%2 == 1) {
				myClass = 'even2';
			} else {
				myClass = 'odd2';
			}
			if (items[i].childNodes.length > 0) {
				friend = ' schoolfriend2';
			} else {
				friend = '';
			}
			results_ul += '<li class="' + myClass + friend + '"><a href="#" class="' + myClass + '"';
			results_ul += ' onClick="loadDetails(\'search\',' + items[i].getAttribute("id") + ',' + start + ');">';
			results_ul += items[i].getAttribute("name");
			results_ul += "</a></li>";
		}
	}
	if (items.length==0) {
		if (type =="blader") {
			document.getElementById("results_summary").innerHTML="Geen resultaten";
			//document.getElementById("results").style.display="none";
		} else {
			document.getElementById("results_summary2").innerHTML="Geen resultaten";
			//document.getElementById("results2").style.display="none";
		}
	} else {
		if (type == "blader") {
			document.getElementById("results").style.display="block";
			document.getElementById("results_scholen").innerHTML="";
			document.getElementById("results_scholen").innerHTML=results_ul;
			if (start == 1) {
				document.getElementById("results_terug").style.visibility="hidden";
			} else {
				document.getElementById("results_terug").style.visibility="visible";
			}
			summary = '-' + i + ' van ' + items.length;
			if (items.length == 1) {
				summary += " resultaat";
			} else {
				summary += " resultaten";
			}
			document.getElementById("results_start").innerHTML="";
			document.getElementById("results_start").innerHTML=start;
			document.getElementById("form_start").value=start;
			document.getElementById("results_summary").innerHTML="";
			document.getElementById("results_summary").innerHTML=summary;
			if (i == items.length) {
				document.getElementById("results_volgende").style.visibility="hidden";
			} else {
				document.getElementById("results_volgende").style.visibility="visible";
			}
		} else {
			document.getElementById("results2").style.display="block";
			document.getElementById("results_scholen2").innerHTML="";
			document.getElementById("results_scholen2").innerHTML=results_ul;
			if (start == 1) {
				document.getElementById("results_terug2").style.visibility="hidden";
			} else {
				document.getElementById("results_terug2").style.visibility="visible";
			}
			summary = '-' + i + ' van ' + items.length;
			if (items.length == 1) {
				summary += " resultaat";
			} else {
				summary += " resultaten";
			}
			document.getElementById("results_start2").innerHTML="";
			document.getElementById("results_start2").innerHTML=start;
			document.getElementById("form_start").value=start;
			document.getElementById("results_summary2").innerHTML="";
			document.getElementById("results_summary2").innerHTML=summary;
			document.getElementById("form_start").value=start;
			if (i == items.length) {
				document.getElementById("results_volgende2").style.visibility="hidden";
			} else {
				document.getElementById("results_volgende2").style.visibility="visible";
			}	
		}
	}
}

function showWaitMessage(type) {
	if (type=='blader') {
			document.getElementById("results").style.display="block";
			document.getElementById("results_scholen").innerHTML="";
			document.getElementById("results_start").innerHTML="";
			document.getElementById("results_summary").innerHTML="";
			document.getElementById("results_summary").innerHTML="Gegevens worden opgehaald";
			document.getElementById("results_terug").style.visibility="hidden";
			document.getElementById("results_volgende").style.visibility="hidden";
	} else {
			document.getElementById("results2").style.display="block";
			document.getElementById("results_scholen2").innerHTML="";
			document.getElementById("results_start2").innerHTML="";
			document.getElementById("results_summary2").innerHTML="";
			document.getElementById("results_summary2").innerHTML="Gegevens worden opgehaald";
			document.getElementById("results_terug2").style.visibility="hidden";
			document.getElementById("results_volgende2").style.visibility="hidden";
	}
}
	
function showNextResults(type) {
	if (type == "blader") {
		start = document.getElementById("results_start").innerHTML;
	} else {
		start = document.getElementById("results_start2").innerHTML;
	}
	start = start - 0;
	showResults(start+5,type);
}

function showPreviousResults(type) {
	if (type == "blader") {
		start = document.getElementById("results_start").innerHTML;
	} else {
		start = document.getElementById("results_start2").innerHTML;
	}		
	showResults(start-5,type);
}

function loadDetails(type,item,start) {
	if (type=='blader') {
		theform = document.getElementById("search_form");
		document.getElementById("form_item").value = item;
		document.getElementById("form_start").value = start;
	} else {
		theform = document.getElementById("search_form2");
		document.getElementById("item2").value = item;
		document.getElementById("start2").value = start;
	}
	theform.submit();
}

function resetForm() {
	loadXMLDoc("school_search.php","blader");
}

function show(object) {
  document.getElementById(object).style.display = "block";
}

function hide(object) { 
  document.getElementById(object).style.display = "none";
}

function searchBackHandler(evt) {
  evt = (evt) ? evt : ((window.event) ? window.event : null);
  if (evt) {
    code = (evt.charCode) ? evt.charCode : evt.keyCode;
  	if (code == 8) {
  		input = document.getElementById("searchstring").value;
  		input = input.substring(0,(input.length - 1));
  		document.getElementById("searchstring").value = input;
		formHandler('zoek',1);
		return false;
  	}
  }
}

function searchHandler(evt) {
  evt = (evt) ? evt : ((window.event) ? window.event : null);
  if (evt) {
    code = (evt.charCode) ? evt.charCode : evt.keyCode;
  	if (code == 13) {
		formHandler('zoek',1);
		return false;
  	} else if (code >= 32) {
    	document.getElementById("searchstring").value += String.fromCharCode(code);
		formHandler('zoek',1);
		return false;
	} else {
		return false;
	}
  }
}

