var hints = ["typ naam of een trefwoord", "typ plaats of postcode"];
var lock = new Array();
lock[0] = false;
lock[1] = false;

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function showHint(element, index) {
	if (!lock[index]) {
		element.value = trim(element.value);
		if (element.value == "") {
			element.value = hints[index];
		}
	}
}

function hideHint(element, index) {
	if (!lock[index]) {
		var v = trim(element.value);
		if (v == hints[index]) {
			element.value = "";
		}
	}
}

function doSearch(defaultRubriekId) {
	var watInput = YAHOO.util.Dom.get("wat");
	var watInputField = YAHOO.util.Dom.get("watInputField");
	var watInputCapLeft = YAHOO.util.Dom.get("watInputCapLeft");
	var watInputCapRight = YAHOO.util.Dom.get("watInputCapRight");
	var waarInput = YAHOO.util.Dom.get("waar");
	var waarInputField = YAHOO.util.Dom.get("waarInputField");
	var waarInputCapLeft = YAHOO.util.Dom.get("waarInputCapLeft");
	var waarInputCapRight = YAHOO.util.Dom.get("waarInputCapRight");
	watInputField.style.backgroundImage = "url('/images/search_box_bg.png')";
	watInputCapLeft.style.backgroundImage = "url('/images/search_box_cap_left.png')";
	watInputCapRight.style.backgroundImage = "url('/images/search_box_cap_right.png')";
	waarInputField.style.backgroundImage = "url('/images/search_box_bg.png')";
	waarInputCapLeft.style.backgroundImage = "url('/images/search_box_cap_left.png')";
	waarInputCapRight.style.backgroundImage = "url('/images/search_box_cap_right.png')";

	var waarId = 0 + YAHOO.util.Dom.get("waarId").value;
	if (waarId == 0) {
		var waar = trim(waarInput.value);

		if (waar == hints[1]) {
			waar = "";
		}


		if (waar == "") {
			lock[1] = true;
			waarInput.value = "";
		}
		else {
			var ok = true;
			if (waar.length < 2) {
				ok = false;
			}
			else {
				if (waar.match(/^\d.*$/) && !waar.match(/^[1-9]{1}\d{3}$/) && !waar.match(/^[1-9]{1}\d{3}\s*[A-Za-z]{2}$/)) {
					ok = false;
				}
			}

			if (!ok) {
				waarInputField.style.backgroundImage = "url('/images/search_box_bg_error.png')";
				waarInputCapLeft.style.backgroundImage = "url('/images/search_box_cap_left_error.png')";
				waarInputCapRight.style.backgroundImage = "url('/images/search_box_cap_right_error.png')";
				waarInput.focus();
				return false;
			}
		}
	}

	var watId = 0 + YAHOO.util.Dom.get("watId").value;
	if (watId == 0) {
		var wat = trim(watInput.value);
		if (wat == hints[0]) {
			wat = "";
		}

		if (wat == "" && watId == 0) {
			YAHOO.util.Dom.get("wat").value = "";
			YAHOO.util.Dom.get("watId").value = defaultRubriekId;
			lock[0] = true;
		}
		else {
			if (wat.length < 2) {
				watInputField.style.backgroundImage = "url('/images/search_box_bg_error.png')";
				watInputCapLeft.style.backgroundImage = "url('/images/search_box_cap_left_error.png')";
				watInputCapRight.style.backgroundImage = "url('/images/search_box_cap_right_error.png')";
				watInput.focus();
				return false;
			}
		}
	}

	return true;
}

function highlightMatch(full, snippet, matchIndex) {
	if (matchIndex == -1) {
		return full;
	}
	return full.substr(0, matchIndex) +
		   "<span class=\"match\">" +
		   full.substr(matchIndex, snippet.length) + 
		   "</span>" +
		   full.substr(matchIndex + snippet.length);
}

function initWat() {
	var watInput = YAHOO.util.Dom.get("wat");
	if (watInput.value == "") {
		watInput.value = hints[0];
	}

	var xhrDataSource = new YAHOO.util.XHRDataSource("/ajax/wat.php");
	xhrDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
	xhrDataSource.responseSchema = {
		recordDelim: "\n",
		fieldDelim: "\t",
		fields: ["naam", "id"]
	};
	xhrDataSource.maxCacheEntries = 20;

	var autoComplete = new YAHOO.widget.AutoComplete("wat", "watContainer", xhrDataSource);
	autoComplete.useShadow = true;
	autoComplete.allowBrowserAutocomplete = false;
	autoComplete.maxResultsDisplayed = 20;
	autoComplete.resultTypeList = false;
	autoComplete.minQueryLength = 3;
	autoComplete.autoHighlight = false;
	autoComplete.formatResult = function(resultData, query, resultMatch) {
		var q = query.toLowerCase();
		var naam = resultData.naam;
		var matchIndex = naam.toLowerCase().indexOf(q);
		return highlightMatch(naam, q, matchIndex);
	}

	var watId = YAHOO.util.Dom.get("watId");

	var selectHandler = function(type, args) {
		var ac = args[0];
		var data = args[2];
		
		watId.value = data.id;
	}
	autoComplete.itemSelectEvent.subscribe(selectHandler);

	var unmatchedHandler = function(selection) {
		watId.value = "";
	}
	autoComplete.unmatchedItemSelectEvent.subscribe(unmatchedHandler);

	var dataReturnHandler = function(query, results) {
		watId.value = "";
	}
	autoComplete.dataReturnEvent.subscribe(dataReturnHandler);
}

function initWaar() {
	var waarInput = YAHOO.util.Dom.get("waar");
	if (waarInput.value == "") {
		waarInput.value = hints[1];
	}

	var xhrDataSource = new YAHOO.util.XHRDataSource("/ajax/waar.php");
	xhrDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
	xhrDataSource.responseSchema = {
		recordDelim: "\n",
		fieldDelim: "\t",
		fields: ["naam", "type", "id"]
	};
	xhrDataSource.maxCacheEntries = 20;

	var autoComplete = new YAHOO.widget.AutoComplete("waar", "waarContainer", xhrDataSource);
	autoComplete.useShadow = true;
	autoComplete.allowBrowserAutocomplete = false;
	autoComplete.maxResultsDisplayed = 20;
	autoComplete.resultTypeList = false;
	autoComplete.formatResult = function(resultData, query, resultMatch) {
		var q = query.toLowerCase();
		var naam = resultData.naam;
		var matchIndex = naam.toLowerCase().indexOf(q);
		return highlightMatch(naam, q, matchIndex);
	}

	var waarType = YAHOO.util.Dom.get("waarType");
	var waarId = YAHOO.util.Dom.get("waarId");

	var selectHandler = function(type, args) {
		var ac = args[0];
		var data = args[2];
		
		waarType.value = data.type;
		waarId.value = data.id;
	}
	autoComplete.itemSelectEvent.subscribe(selectHandler);

	var unmatchedHandler = function(selection) {
		waarType.value = "";
		waarId.value = "";
	}
	autoComplete.unmatchedItemSelectEvent.subscribe(unmatchedHandler);

	var dataReturnHandler = function(query, results) {
		waarType.value = "";
		waarId.value = "";
	}
	autoComplete.dataReturnEvent.subscribe(dataReturnHandler);
}
