Thibaud Defretiere

July 22, 2015

// // =0&&n.q.splice(r,1)},n.register=function(t,i,r){n.when("$Do.Full",0,function(){n.register(t,i,r)})}}() // ]]>// // -1||e.indexOf(o+unescape(f))>-1))t=0;else{try{i=n.parent.$CJ.p==u.p}catch(s){}u.s&&(t=!i)}}catch(s){}if(t){if(i)try{n.top.location=n.location}catch(s){}else try{n.top.location.replace(n.location.href)}catch(s){try{n.top.location=n.location}catch(s){}}r=' '}else r=unescape("%3C%73")+'tyle type="text/css">body{display:block !important;}';document.write(r)})(); // ]]>// <![CDATA[ function _ge(n){return _d.getElementById(n)}var _d=document,_dh=_d.getElementsByTagName("head")[0],$U={a:"^((ftp|http|https):)?//",b:"(^(\\s?ftp:|\\s?http:|\\s?https:|\\s?//))",primaryAjaxDelimiter:"#",pairDelimiter:"&",keyValueDelimiter:"=",queryDelimiter:"?",isAbsoluteUrl:function(n){var t=new RegExp($U.a,"i"),i=new RegExp($U.b,"i");return t.test(n)||i.test(n)},getHost:function(n){var t=$U.a+"([^:/]*([:][^@/]*)?[@])?([-.a-z0-9]*)[^-.a-z0-9]?",i=new RegExp(t,"i");return urlHost=(String(n).search(i)<0?"":RegExp.$5).toLowerCase()},doesMatchHost:function(n,t){var f=new RegExp("^(mailto|tel|sms):","i"),r=$U.isAbsoluteUrl(n),i=$U.getHost(n),e=f.test(n),u="."+t,o=i.substr(i.length-u.length)==u||i==""&&!r||i.charAt(0)=="#"||i==t;return(!r||o)&&!e},isLinkABookmark:function(n,t){var i;t=t||_d,i=t.createElement("span"),i.innerHTML='';var u=i.firstChild.href,r=n.indexOf("#"),f=n.indexOf("javascript:");return r>-1&&(r==0||n.indexOf(u)==0)?1:f==0?1:0},getUrlFragment:function(n){var t="",i=n.indexOf("#");return i>-1&&(t=n.substr(i+1)),t},getHashUrl:function(){var t,r=window.location,n=r.href,i=n.indexOf($U.primaryAjaxDelimiter),u=i==-1?"":n.substr(i+1);return u&&(t=$U.getNormalizedUrl(n,$U.primaryAjaxDelimiter)),t},getNormalizedUrl:function(n,t){var r,u,i,f;return t=t||$U.primaryAjaxDelimiter,r="",u=$U.getAjaxIndex(n,t),u>-1&&(r=n.substr(u+1),n=n.substr(0,u)),i="",f=n.indexOf($U.queryDelimiter),f>-1&&(i=n.substr(f+1),n=n.substr(0,f)),i=$U.serialize($U.deserialize(r?r:i)),i&&(n=[n,$U.queryDelimiter,i].join("")),n.replace(/[!]/g,"%21")},getAjaxIndex:function(n,t){for(var u=-1,i=n.indexOf(t);i!=-1;){var r=i+1,f=n.indexOf(t,r),s=n.indexOf($U.pairDelimiter,r),h=n.indexOf($U.queryDelimiter,r),e=n.indexOf($U.keyValueDelimiter,r),c=[f,s,h,e].sort(function(n,t){return n==-1?1:t==-1?-1:n-t}),o=c[0];if(o==-1)break;else if(o==e){u=i;break}else i=f}return u},getCurrentUrl:function(){return $U.getHashUrl()||window.location.href},deserialize:function(n){var t={},f;if(n)for(var u=n.split($U.pairDelimiter),o=u.length,i=0;i0&&i.pop(),i.join("")}} // ]]>// <![CDATA[ $U.protocolDelimiter=":",$U.protocolDelimiterHtmlEncoded="&colon",$U.protocolDelimiterHtmlEncodePrefix="&#",$U.invalidProtocolCharsRegex=new RegExp("[^a-z0-9-.+:]","i"),$U.validProtocolFormatRegex=new RegExp("^[a-z0-9-.+]+:","i"),$U.isProtocolAllowed=function(n){var t,e,f,u,i,r;for(n=(n||"").toLowerCase(),t="",e=n.length,u=0;u32&&f// We’ve been working with Robert for almost 10 years now and have always been impressed with his ability to understand our requirements and translate them into fully functional web & mobile applications. We’ve worked on many projects together, from consumer websites to robust affiliate and white label platforms powering over 400 different online outlets; all this in 10 Languages. It’s always been a pleasure to work with someone you can fully trust, who has all the skills and knowledge to evolve in a web environment and who is never short on good advice.