/*-------------------------------------------------------------------
	MODULE SPECIFIC SCRIPTS
-------------------------------------------------------------------*/

var Search = {
	StartDelay: 200,
	ShowDelay: 400,
	Offset_default: 0,
	Limit_default: 10,
	Offset: 0,
	Limit: 10,
	searchhighlight: "searchhighlight",
	gsTimer: null,
	totaalaantal: 0,
	
	isIE: false,
	foList: [],

	$: function() {
		var elements = new Array();
		for (var i=0; i<arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string') {
				element = document.getElementById(element);
			}
			if (arguments.length == 1) {
				return element;
			}
			elements.push(element);
		}
		return elements;
	},
	
	updateFO: function(FO) {
		return FO;
	},
	
	Init: function(FO,id){
		if (FO.IEhidden)
			FO.hiddenFields=FO.IEhidden.split(",");
		
		Search.foList[id] = Search.updateFO(FO);
		document.getElementById(FO.gsForm).setAttribute('autocomplete','off');

		if (Search.ShowDelay > 0)
			Search.$(FO.gsSearchId).onfocus = function () {
				if ((Search.$(FO.gsSearchId).value == 'Search ..') || (Search.$(FO.gsSearchId).value == 'Search ..')) {
					Search.$(FO.gsSearchId).value = '';
				}
			}
			Search.$(FO.gsSearchId).onblur = function () {
				if (Search.$(FO.gsCC).value == '') Search.$(FO.gsSearchId).value = 'Search ..';
				setTimeout(function () { 
					Search.gsHideResults(id); 
				}, Search.ShowDelay);
			}
		if (navigator.userAgent.indexOf("Safari") > 0) {
			Search.$(FO.gsSearchId).addEventListener("keyup",Search.liveSearchKeyPress,false);
		} else if (navigator.product == "Gecko") {
			Search.$(FO.gsSearchId).addEventListener("keyup",Search.liveSearchKeyPress,false);
		} else {
			Search.$(FO.gsSearchId).attachEvent('onkeyup',Search.liveSearchKeyPress);
			Search.isIE = true;
		}
	},

	liveSearchKeyPress: function(event) {
		if (event.target) {
			id = event.target.form.id;
		} else {
			id = event.srcElement.form.id;
		}

		var FO = Search.foList[id];

		if ((FO.country) && (document.getElementById(FO.country).value == '')) {
			alert('Please select a country first');
			document.getElementById(FO.country).focus();
		} else {
			//KEY DOWN
			if (event.keyCode == 40 ) {
				Search.$(FO.gsSearchId).onkeypress = '';
				highlight = Search.$(Search.searchhighlight);
				if (!highlight) {
					highlight = Search.$(FO.gsResultId).firstChild.firstChild;
				} else {
					highlight.removeAttribute("id");
					highlight = highlight.nextSibling;
				}
				if (highlight) {
					if (highlight.setAttribute) {
						highlight.setAttribute("id",Search.searchhighlight);
					}
				}
				if (!Search.isIE) { event.preventDefault(); }
			//KEY UP
			} else if (event.keyCode == 38 ) {
				highlight = Search.$(Search.searchhighlight);
				if (!highlight) {
					highlight = Search.$(FO.gsResultId).firstChild.lastChild;
				} else {
					highlight.removeAttribute("id");
					highlight = highlight.previousSibling;
				}
				if (highlight) {
					if (highlight.setAttribute) {
						highlight.setAttribute("id",Search.searchhighlight);
					}
				}
				if (!Search.isIE) { event.preventDefault(); }
			//ESC
			} else if (event.keyCode == 27) {
				highlight = Search.$(Search.searchhighlight);
				if (highlight) {
					highlight.removeAttribute("id");
				}
				$(gsResultId).style.display = "none";
			// ENTER
			} else if (event.keyCode == 13) {
				Search.$(id).onsubmit = 'return false';
				if (highlight) {
					if (event.target) {
						event.target.form.onsubmit = function () { return false; }
					} else {
						event.srcElement.form.onsubmit = function () { return false; }
					}
					
					var itemId = highlight.className;
					var item = highlight.firstChild.className;
					Search.$(FO.gsSearchId).value = item;
					Search.$(FO.gsCC).value = itemId;
					Search.gsHideResults(id);
				}
				//Search.$(id).onsubmit = 'return true';
			// PAGE UP
			} else if (event.keyCode == 33)  {
				// go to the previous 10 searchresults
				if (Search.Offset > 0) {
					Search.Offset = Search.Offset - Search.Limit;
					if (Search.Offset < 0) Search.Offset = 0;
					Search.gsStart(id);
				}

			// PAGE DOWN
			} else if (event.keyCode == 34)  {
				// go to the next 10 searchresults
				if ((Search.Offset+Search.Limit) < Search.totaalaantal) {
					Search.Offset = Search.Offset + Search.Limit;
					Search.gsStart(id);
				}

			// END
			} else if (event.keyCode == 35)  {
				// go to the last page of searchresults
				Search.Offset = Math.floor(Search.totaalaantal/10)*10;
				Search.gsStart(id);

			// HOME
			} else if (event.keyCode == 36)  {
				Search.Offset = 0;
				Search.gsStart(id);

			} else {
				Search.Limit = Search.Limit_default;
				Search.Offset = Search.Offset_default;
				Search.gsStart(id);
			}
		}
	},

	gsStart: function(id) {
		var FO = Search.foList[id];
		if (Search.gsTimer) { window.clearTimeout(Search.gsTimer); }
		for (var i = 0; i < document.getElementById(FO.gsForm).getElementsByTagName('button').length; i++) {
		      document.getElementById(FO.gsForm).getElementsByTagName('button').item(i).style.visibility = 'hidden';
		}
		Search.gsDoSearch(id);
	},
	
	gsDoSearch: function(id) {
		var FO = Search.foList[id];
		var s = Search.$(FO.gsSearchId).value;
		if (Search.$(FO.country))
			var cc = Search.$(FO.country).value;
		if (s == ""){
			Search.$(FO.gsResultId).style.display = 'none';
			return false;
		}
		var gsUrl = FO.ReqUrl + "?target="+FO.gsSearchId+"&targetId="+FO.gsCC+"&q=" + s + "&countrycode=" + cc + "&offset=" + Search.Offset + "&limit=" + Search.Limit;
		Search.gsGetXML(gsUrl,id);
	},
	
	gsGetXML: function(gsUrl,id){
		if (window.XMLHttpRequest) {
			Search.gsReq = new XMLHttpRequest();
			Search.gsReq.onreadystatechange = Search.gsProcReq;
			Search.gsReq.open("GET", gsUrl, true);
			Search.gsReq.send(null);
		} else if (window.ActiveXObject) {
			Search.gsReq = new ActiveXObject("Microsoft.XMLHTTP");
			if (Search.gsReq) {
				Search.gsReq.onreadystatechange = Search.gsProcReq;
				Search.gsReq.open("GET", gsUrl, true);
				Search.gsReq.send();
			}
		}
	},
	
	gsProcReq: function(){
		var FO = Search.foList[id];
		var response = '';
		if (Search.gsReq.readyState == 4) {
			if (Search.gsReq.status == 200) {
				var res = Search.$(FO.gsResultId);
				if(Search.gsReq.responseXML)
					response = Search.gsReq.responseXML.documentElement;
				res.innerHTML = Search.gsReq.responseText;
				var aantal = Search.$('resultnumber').innerHTML;
				Search.totaalaantal = aantal;
				res.style.display = '';
				Search.visi('hidden',id);
			} else {
				alert("There was a problem retrieving the XML data:\n" + gsReq.statusText);
			}
		}
	},
	
	gsHideResults: function(id){
		var FO = Search.foList[id];
		Search.$(FO.gsResultId).style.display = 'none';
		Search.$(FO.gsResultId).innerHTML = '';
		Search.visi('visible',id);
		for (var i = 0; i < document.getElementById(FO.gsForm).getElementsByTagName('button').length; i++) {
			document.getElementById(FO.gsForm).getElementsByTagName('button').item(i).style.visibility = 'visible';
		}
	},
	
	visi: function(status,id) {
		var FO = Search.foList[id];
		if (FO.hiddenFields) {
			for (k = 0; k <= FO.hiddenFields.length; k++) {
				var value = FO.hiddenFields[k];
				if ((document.getElementById) && (document.getElementById(value))){
					if(status){
						document.getElementById(value).style.visibility = status;
					}
				} else if ((document.layers) && (document.layers[value])) {
					vista = (document.layers[value].visibility == 'hide') ? 'show' : 'hide'
					document.layers[value].visibility = vista;
				} else if ((document.all) && (document.all[value])) {
					vista = (document.all[value].style.visibility == 'hidden') ? 'visible'	: 'hidden';
					document.all[value].style.visibility = vista;
				}
			}
		}
	}
};
function setItem(SV,SI,value,id) {
	document.getElementById(SV).value = value;
	document.getElementById(SI).value = id;
}
