/*
 * snelZoek handler v0.2
 * author: Tommy L
 * company: Goes & Roos
 * todo:
 * -remove over-kill? xD
 */
var grSnelZoek;function Token(b,a){this._value=b;this._type=a;this._valfn=function(){};return this}Token.prototype.validate=function(){return this._valfn()};function Tokenizer(b,a){this.types={tok_none:0,tok_sym:1,tok_alpha:2,tok_alnum:3,tok_num:4};this.delim=b;this.source="";this.tokens=[];this.source=a;this.parse();return this}Tokenizer.prototype.parse=function(){tmp_source=this.source;arr_source=tmp_source.split(this.delim);for(var b=0,a=arr_source.length;b<a;++b){part_source=this.trim(arr_source[b]);if(part_source!=""){if(part_source.match(/^[\sa-zA-Z-\/\\]{3,}$/)){this.tokens.push(new Token(part_source,this.types.tok_alpha))}else{if(part_source.match(/^[0-9-]{3,}$/)){this.tokens.push(new Token(part_source,this.types.tok_num))}else{if(part_source.match(/^[\sa-zA-Z0-9-\/\\]{3,}$/)){this.tokens.push(new Token(part_source,this._types.tok_alnum))}else{this.tokens.push(new Token(part_source,this.types.tok_none))}}}}}};Tokenizer.prototype.trim=function(a){return a.replace(/^\s+|\s+$/g,"")};function TokenValidator(){return this}TokenValidator.prototype.sym=function(){if(this._value.match(/^[~//#$]+$/)){return true}return false};TokenValidator.prototype.alpha=function(){if(this._value.match(/^[\sa-zA-Z\/\\]+$/i)){return true}return false};TokenValidator.prototype.alnum=function(){if(this._value.match(/^[\sa-zA-Z0-9-//]+$/)){return true}return false};TokenValidator.prototype.num=function(){if(this._value.match(/^[0-9-]+$/)){return true}return false};function snelZoek(){if(!document.getElementById("snelzoekcontainer")){return}this.base_url=document.getElementById("base");if(!this.base_url||this.base_url!=null||typeof this.base_url!="undefined"){this.base_url=this.base_url.value}else{this.base_url=""}this.container=document.getElementById("snelzoekcontainer");if(!document.getElementsByTagName||(this.container.getElementsByTagName("select").length<1||this.container.getElementsByTagName("button").length<1)){this.container.style.display="none";return}this.container.getElementsByTagName("button")[0].onclick=function(){return grSnelZoek.send()};this.selects=this.container.getElementsByTagName("select");this.template="~{object_straat}~{object_plaats}~{object_type}~{gebouw_type}~{object_prijs}~{object_spacer}~{object_datumin}~{betaal_type}";this.storage=[];this._debug=false;this.tokenizer=null;this.validator=null;this._strict=false;if(this._debug){alert("DEBUG_[SNELZOEK] debug mode is nu geactiveerd.")}for(select in this.selects){this.selects[select].onchange=function(){grSnelZoek.update(this)}}return this}snelZoek.prototype.update=function(a){this.storage[a.name]=a.options[a.selectedIndex].value;if(this._debug){alert("DEBUG_[SNELZOEK_UPDATE] name:"+a.name)}return false};snelZoek.prototype.send=function(){var b=this.template;if(this._debug){alert("DEBUG_[SNELZOEK_SEND] BEGIN")}for(storage in this.storage){b=b.replace("{"+storage+"}",this.storage[storage])}if(b.match(/([{][a-zA-Z_]+[}])/)){b=b.replace(/([{][a-zA-Z_]+[}])/g,"")}if(this._debug){this.tokenizer=new Tokenizer("~",b);this.validator=new TokenValidator();for(var a=0;a<this.tokenizer.tokens.length;++a){token=this.tokenizer.tokens[a];if(token._type==this.tokenizer.types.tok_alpha){token._valfn=this.validator.alpha}else{if(token._type==this.tokenizer.types.tok_num){token._valfn=this.validator.num}else{if(token._type==this.tokenizer.types.tok_alnum){token._valfn=this.validator.alnum}else{alert("WAAAA"+token._value)}}}}if(this.tokenizer.tokens.length<1){return false}for(var a=0;a<this.tokenizer.tokens.length;++a){token=this.tokenizer.tokens[a];if(token.validate()){alert("TOKEN: "+token._value+" is OK")}else{alert("Mogelijk is de waarde: "+token._value+" onjuist.");return false}}return false}b=this.base_url+"huizen/woningaanbod.html?snelzoek="+b;location.href=b;return false};var grSnelZoekInit=function(){grSnelZoek=new snelZoek()};if(window.addEventListener){window.addEventListener("load",grSnelZoekInit,false)}else{if(window.attachEvent){window.attachEvent("onload",grSnelZoekInit)}else{window.onload=function(){grSnelZoekInit()}}};
