var sql;
var basic = "/api/SELECT kvk.kvk, kvk.bedrijfsnaam, kvk.adres, kvk.postcode, kvk.plaats, kvk.type, not(anbikvk.kvks is null AND anbikvk.intrekking is null) as \"anbi\", status, kvk.kvks, kvk.sub FROM kvk LEFT JOIN anbikvk ON kvk.kvks = anbikvk.kvks LEFT JOIN faillissementen ON kvk.kvks = faillissementen.kvk";
var results;
var serveroffset;
var from;
var order = '';
var orderby = '';

function addslashes ( str ) {
	return (str+'').replace(/([\\'])/g, "\\$1").replace(/\0/g, "\\0");
}
function isType(data) {
	if ($("#inputsearch").val().indexOf("adres:") === 0) {
		return 'adres';
	} else if ($("#inputsearch").val().indexOf("adresplaats:") === 0) {
		return 'adresplaats';
	}

	return null;
}

function prepend(nummer, lengte) {
	if (nummer === null) {
		return '';
	} else {
		// http://www.electrictoolbox.com/pad-number-zeroes-javascript/
		var str = '' + nummer;
		while (str.length < lengte) {
			str = '0' + str;
		}
		return str;
	}
}

function volgorde(type) {
	order = type;
	$("#searchkvk").submit();
}

function zoek(postcode) {
	$("#terug").hide();
	$("#meer").hide();
	$("#inputsearch").val(postcode);
	$("#searchkvk").submit();
	return false;
}

function render(offset) {
	if (offset < 0) {
		if (serveroffset === 0) {
			offset = 0;
		} else {
			serveroffset = serveroffset - 200;
			offset = 200 + offset;
		}
	}

	$(".results").remove();

	for (var x = offset; (x < results[0]['RESULT']['ROWS'].length && x < (offset + 10)); x++) {			
		$("#result").append('<tr class="results"><td><a href="/'+prepend(results[0]['RESULT']['ROWS'][x][8], 8)+'" onclick="javascript:zoek(this.innerHTML); return false;">'+prepend(results[0]['RESULT']['ROWS'][x][8], 8)+'</a></td>'+
				'<td>'+prepend(results[0]['RESULT']['ROWS'][x][9], 4)+'</td>'+
				'<td>'+results[0]['RESULT']['ROWS'][x][1]+'</td>'+
				'<td><a href="/adres:'+results[0]['RESULT']['ROWS'][x][2]+'" onclick="javascript:zoek(\'adres: \'+this.innerHTML); return false;">'+results[0]['RESULT']['ROWS'][x][2]+'</a><br />'+
				'<a href="/'+results[0]['RESULT']['ROWS'][x][3]+'" onclick="javascript:zoek(this.innerHTML); return false;">'+results[0]['RESULT']['ROWS'][x][3]+'</a> '+
				results[0]['RESULT']['ROWS'][x][4]+'</td>'+
				'<td>'+(results[0]['RESULT']['ROWS'][x][5] !== null ? results[0]['RESULT']['ROWS'][x][5] : '')+'</td>'+
				'<td>'+(results[0]['RESULT']['ROWS'][x][6] == 'true' ? 'Ja' : 'Nee')+'</td>'+
				'<td>'+(results[0]['RESULT']['ROWS'][x][7] !== null ? 
					'<a target="_new" style="color: #f00;" href="http://www.faillissementen.com/registernl.php?kvk='+results[0]['RESULT']['ROWS'][x][8]+'">'+
					results[0]['RESULT']['ROWS'][x][7]+
					'</a>'
					:'Actief')+'</td></tr>');
	}

	from = offset;

	if (x < results[0]['RESULT']['ROWS'].length) {
		$("#meer").show();
	} else {
		if (results[0]['RESULT']['ROWS'].length != 0 &&
				(results[0]['RESULT']['ROWS'].length % 200) === 0) {
			serveroffset = serveroffset + 200;
			$.get(sql+" OFFSET "+serveroffset+";", {}, callback, "json");
			$("#zoeken").show();
		}

		$("#meer").hide();
	}

	if (x > 10) {
		$("#terug").show();
	} else {
		$("#terug").hide();
	}
}

var callback = function (data, textStatus) {
	results = data;

	try {
		if (data[0]['RESULT']['ROWS'].length > 0) {
			$("#zoeken").hide("slow");
			$("#result").show();
			render(0);
		} else {
			$("#result").hide();
			$("#zoeken").hide("slow");
			if (isType($("#inputsearch").val()) === null) {
				$("#intro").after('<p class="results">Helaas (nog) geen resultaten...<br />Op adres zoeken kan met <a onclick="javascript:zoek(this.innerHTML); return false;">adres: '+$("#inputsearch").val()+'</a></p>');
			} else {
				$("#intro").after('<p class="results">Helaas (nog) geen resultaten...</p>');
			}
		}

	} catch(e) {
		alert("Er is een fout opgetreden, je mag hem melden op Twitter.\n"+e);
	}
};


$(document).ready(function(){
        $('div.message').fadeIn("slow");
});


var sphinxfirst = function (data, textStatus) {
	results = data;

	try {
		if (data[0]['RESULT'].length > 0) {
			kvknummers = results[0]['RESULT'][0];
			for (var x = 1; x < results[0]['RESULT'].length; x++) {
				kvknummers = kvknummers +','+results[0]['RESULT'][x];
			}
			sql = basic+" WHERE kvk.kvk IN ("+kvknummers+")"+orderby;
		} else {
			slashed = addslashes($("#inputsearch").val());
			sql = basic+" WHERE kvk.bedrijfsnaam_size >= length('"+slashed+"') AND kvk.bedrijfsnaam ILIKE '%25"+slashed+"%25'"+orderby;
		}
		$.get(sql+" OFFSET "+serveroffset+";", {}, callback, "json");
	} catch(e) {
		alert("Er is een fout opgetreden in Sphinxfirst, je mag hem melden op Twitter.\n"+e);
	}
};


$(document).ready(function(){

		$("#searchkvk").submit(function(){
			if ($("#inputsearch").val() == 'Zoek op naam, kvk of postcode' || $("#inputsearch").val() == '') {
				return false;
			}

			var adresplaats = /^adresplaats:[ ]?(.+),[ ]?(.+)/;
			var adres = /^adres:[ ]?(.*)/;
			var postcode6PP = /([0-9]{4}[A-Za-z]{2})/i;
			var postcode4PP = /([0-9]{4})/;
			var kvk = /([0-9]{7,8})/;
			var kvklong = /([0-9]{11,12})/;
			var adresplaatsm = adresplaats.exec($("#inputsearch").val());
			var adresm = adres.exec($("#inputsearch").val());
			var postcode6PPm = postcode6PP.exec($("#inputsearch").val());
			var postcode4PPm = postcode4PP.exec($("#inputsearch").val());
			var kvkm = kvk.exec($("#inputsearch").val());
			var kvklongm = kvklong.exec($("#inputsearch").val());
			serveroffset = 0;
			sql = '';


			if (order != '') {
				orderby = ' ORDER BY '+order;
			} else {
				orderby = '';
			}

			orderby = orderby + ' LIMIT 200';

			$("#intro").empty();
			$(".results").remove();

			if (adresplaatsm !== null) {
				$("#zoeken").show();
				slashed1 = addslashes(adresplaatsm[1]);
				slashed2 = addslashes(adresplaatsm[2]);
				sql = basic+" WHERE kvk.adres_size >= length('"+slashed1+"') AND kvk.adres ILIKE '%25"+slashed1+"%25' AND kvk.plaats ILIKE '%25"+slashed2+"%25'"+orderby;
			} else {
				if (adresm !== null) {
					$("#zoeken").show();
					slashed = addslashes(adresm[1]);
					sql = basic+" WHERE kvk.adres ilike '"+slashed+"%25'"+orderby;
				} else {
					if (kvklongm !== null) {
						$("#zoeken").show();
						sql = basic+" WHERE kvk.kvk = "+kvklongm[0]+orderby;
					} else {
						if (kvkm !== null) {
							$("#zoeken").show();
							sql = basic+" WHERE kvk.kvks = "+kvkm[0]+orderby;
						} else {
							if (postcode6PPm !== null) {
								$("#zoeken").show();
								sql = basic+" WHERE postcode = UPPER('"+postcode6PPm[0]+"')"+orderby;
							} else {
								if (postcode4PPm !== null) {
									$("#zoeken").show();
									sql = basic+" WHERE postcode LIKE '"+postcode4PPm[0]+"%25'"+orderby;
								} else {
									$("#zoeken").show();
									slashed = addslashes($("#inputsearch").val());
									sql = "/api/select x.kvk, x.bedrijfsnaam, x.adres, x.postcode, x.plaats, x.type, not(anbikvk.kvks is null AND anbikvk.intrekking is null) as \"anbi\", status, x.kvks, x.sub from (select kvk.kvk, kvk.bedrijfsnaam, kvk.adres, kvk.postcode, kvk.plaats, kvk.type, kvk.kvks, kvk.sub FROM sphinx_searchIndex('"+slashed+"', 'openkvk') as fts, kvk where kvk.kvk = fts.id) as x LEFT JOIN anbikvk ON x.kvks = anbikvk.kvks LEFT JOIN faillissementen ON x.kvks = faillissementen.kvk"+orderby;
								}

							}
						}
					}
				}
			}
			if (sql != '') {
				$.get(sql+" OFFSET "+serveroffset+";", {}, callback, "json");
			}
			return false;
		});

		var query = /^http\:\/\/(www\.)?openkvk\.nl\/(.+)$/;
		var querym = query.exec(window.location);
		if (querym !== null) {
			$("#inputsearch").val(unescape(querym[2]));
			$("#searchkvk").submit();
		}
});
