function onAjaxError(n,t,i){$("#unkown-error").show();var r={status:t,error:i,message:escape(n.responseText)};$.ajax({url:ajaxErrorUrl,type:"POST",dataType:"json",data:r})}function testAdvanced(){var n=trim($("#helo-domain").val()),t=trim($("#spf-policy").val()),i=trim($("#sender-address-advanced").val()),r={ip:trim($("#ip-address-advanced").val()),sender:i?i:"",dns:dnsServer,timeOutSeconds:elapsedTimeLimitSec,HeloDomain:n?n:"",RecordData:t?t:""};beginEvaluate(r)}function testBasic(){var n={ip:trim($("#ip-address-basic").val()),sender:trim($("#sender-address-basic").val()),dns:dnsServer,timeOutSeconds:elapsedTimeLimitSec};beginEvaluate(n)}function beginEvaluate(n){timerId&&clearTimeout(timerId);$.ajax({url:spfContributorBaseURL+"/BeginEvaluation",type:"POST",cache:!1,data:n,dataType:"json",success:function(n){getLog(n)},error:onAjaxError})}function getLog(n){$.ajax({url:spfContributorBaseURL+"/GetEvaluationLog?ticket="+n,type:"GET",cache:!1,dataType:"json",error:onAjaxError,success:function(t){if(!t||t&&t.length===0){if(noDataReceivedCounter>120){$("#form-error").submit();return}noDataReceivedCounter++}else noDataReceivedCounter=0;moreMessageAvailabe(t)&&(timerId=setTimeout(function(){getLog(n)},200));displayLog(t)}})}function SortById(n,t){return n.Id<t.Id?-1:n.Id>t.Id?1:0}function merge(n,t,i){return!t[0]&&!n[0]?i:!t[0]&&n[0]?(i.push(n[0]),n.shift(),merge(n,t,i)):t[0]&&!n[0]?(i.push(t[0]),t.shift(),merge(n,t,i)):t[0].Id==n[0].Id?(i.push(t[0]),t.shift(),n.shift(),merge(n,t,i)):t[0].Id<n[0].Id?(i.push(t[0]),t.shift(),merge(n,t,i)):t[0].Id>n[0].Id?(i.push(n[0]),n.shift(),merge(n,t,i)):i}function mergeDamagedData(n,t){if(!n)return t;if(!t)return n;if(n&&t)return n=n.sort(SortById),t=t.sort(SortById),merge(n,t,[])}function displayLog(n){var r,t,i,u;if(n&&n.length>0){for(r=log?log.length:0,log&&areAnyLostDataPart(n)&&(n=mergeDamagedData(log,n),r=0,$("#live-log li").remove(),parentUlElement=$("#live-log")),t=r;t<n.length;t++){t!=0&&n[t].MessageType==LOG_MESSAGE_TYPE&&(i=getLastLevel(n,t),i<n[t].Level?appendSubUl():i>n[t].Level&&closeSubUl(i-n[t].Level));switch(n[t].MessageType){case 1:t==0?(u=n[0].Elapsed,lastElapsed=n[0].Elapsed):(u=n[t].Elapsed-lastElapsed,lastElapsed=n[t].Elapsed);totalElapsedMilliseconds=n[t].Elapsed;appendLogPart(n[t],u);break;case 2:appendExtraLogPart(n[t]);break;case 3:appendResultLogPart(n[t])}}log=n;log.sort(function(n,t){return n.Id>t.Id?1:-1})}}function htmlEncode(n){return $("<div/>").text(n).html()}function moreMessageAvailabe(n){if(!n||n.length==0)return!0;for(var t=0;t<n.length;t++)if(n[t].MessageType==FINAL_RESULT_MESSAGE_TYPE)return!1;return!0}function areAnyLostDataPart(n){if(n&&n.length>0&&log&&n){if(log.length>n.length)return!0;for(var t=0;t<log.length;t++)if(log[t].Id!=n[t].Id)return!0}return!1}function getLastLevel(n,t){if(n)for(var i=t-1;i>=0;i--)if(n[i].Level!=undefined&&n[i].Level!=null)return n[i].Level}function resetResultDisplay(){$("#spf-test-summary").hide();$("#spf-test-summary .result, #test-summary-stats").hide();$("#live-log li").remove();$("#spf-log-container").hide();$(".progress").hide();errorCount=0;warningCount=0;noDataReceivedCounter=0;parentUlElement=$("#live-log");ulId=0;parentElements=[parentUlElement]}function appendSubUl(){ulId++;parentUlElement.append('<li><ul id="subul-'+ulId+'" class="sub"><\/ul><\/li>');parentUlElement=$("#subul-"+ulId);parentElements.push(parentUlElement)}function closeSubUl(n){for(i=0;i<n;i++)parentElements.pop();parentUlElement=parentElements[parentElements.length-1]}function appendLogPart(n,t){var i="";n.Severity==1?(i="w",warningCount++):n.Severity==2&&(i="e",errorCount++);parentUlElement.append('<li class="'+i+'" ><span class="t">+'+t+" ms<\/span>"+htmlEncode(n.Message)+"<\/li>")}function appendExtraLogPart(n){parentUlElement.append('<li class="extra">'+htmlEncode(n.Message)+"<\/li>")}function appendResultLogPart(n){var t,i,r;switch(n.Result){case 0:$("#test-summary-pass").show();$("#test-status-pass").show();break;case 1:$("#test-summary-fail").show();$("#test-status-fail").show();break;case 2:$("#test-summary-softfail").show();$("#test-status-softfail").show();break;case 3:$("#test-summary-neutral").show();$("#test-status-neutral").show();break;case 4:$("#test-summary-none").show();$("#test-status-none").show();break;case 5:$("#test-summary-temperror").show();$("#test-status-temperror").show();break;case 6:$("#test-summary-permerror").show();$("#test-status-permerror").show()}t="The evaluation completed in "+totalElapsedMilliseconds+" ms, with "+errorCount+" error"+(errorCount>1?"s":"")+" and "+warningCount+" warning"+(warningCount>1?"s":"")+".";n.NotPermittedExplanation!=""&&(i='Explanation ("exp") provided by the policy owner: "'+n.NotPermittedExplanation+'"',$("#test-summary-explanation").text(i),$("#test-summary-explanation").show());n.CustomErrorMessage!=""&&(r='Error message: "'+n.CustomErrorMessage+'"',$("#test-summary-permerror-message").text(r),$("#test-summary-permerror-message").show());$("#test-summary-stats").text(t);$("#test-summary-stats").show();$("#spf-test-summary").show();$(".progress").hide()}var dnsServer,elapsedTimeLimitSec,spfContributorBaseURL,ajaxErrorUrl,timerId,FINAL_RESULT_MESSAGE_TYPE=3,LOG_MESSAGE_TYPE=1,parentUlElement,parentElements,log,ulId,errorCount,warningCount,totalElapsedMilliseconds=0,noDataReceivedCounter,lastElapsed;$(document).ready(function(){$.support.cors=!0;jQuery.validator.setDefaults({errorPlacement:function(n,t){n.appendTo($("#"+t.attr("id")+"-error"))}});jQuery.validator.addMethod("ipValidator",function(n,t){return this.optional(t)||validateIPAddress(t.value)},"");jQuery.validator.addMethod("emailValidator",function(n,t){var i=new RegExp("\\s*\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*\\s*");return this.optional(t)||i.test(n)},"");$("#ip-address-basic").focusAfterEndOfText();$("#basic-tab-link").click(function(){$("#ip-address-basic").focusAfterEndOfText()});$("#advanced-tab-link").click(function(){$("#ip-address-advanced").focusAfterEndOfText()});$("#form-basic").validate({onkeyup:!1,rules:{Ip:{required:{depends:function(){return $(this).val($.trim($(this).val())),!0}},remote:{url:spfContributorBaseURL+"/ValidateIPAddress",type:"POST",cache:!1,data:{ipAddress:function(){return $("#ip-address-basic").val()}},error:onAjaxError}},Sender:{emailValidator:!0,required:{depends:function(){return $(this).val($.trim($(this).val())),!0}}}},messages:{Sender:"Enter a valid email address.",Ip:"Enter a valid IP address."},submitHandler:function(){log=null;resetResultDisplay();$("#spf-log-container").show();$(".progress").show();testBasic()}});$("#form-adv").validate({onkeyup:!1,rules:{SenderAdvanced:{emailValidator:!0,required:{depends:function(){return $("#helo-domain").val().trim()==""}}},HeloDomain:{required:{depends:function(){return $("#sender-address-advanced").val().trim()==""}}},IpAdvanced:{required:{depends:function(){return $(this).val($.trim($(this).val())),!0}},remote:{url:spfContributorBaseURL+"/ValidateIPAddress",type:"POST",cache:!1,data:{ipAddress:function(){return $("#ip-address-advanced").val()}},error:onAjaxError}}},messages:{SenderAdvanced:"Enter a valid email address or the HELO/EHLO domain.",HeloDomain:"Enter a valid email address or the HELO/EHLO domain.",IpAdvanced:"Enter a valid IP address."},submitHandler:function(){log=null;resetResultDisplay();$("#spf-log-container").show();$(".progress").show();testAdvanced()}});$("#helo-domain").focusout(function(){($("#sender-address-advanced").val()||$("#helo-domain").val())&&$("#sender-address-advanced").valid()});$("#sender-address-advanced").focusout(function(){($("#sender-address-advanced").val()||$("#helo-domain").val())&&$("#helo-domain").valid()});$("#spf-container").show();resetResultDisplay()});noDataReceivedCounter=0