function objectToArray(obj){var arr=[];for(var x in obj){arr.push(obj[x]);};return arr;}
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"");}
function selectText(element){if($.browser.msie){var range=document.body.createTextRange();range.moveToElementText(element);range.select();}else if($.browser.mozilla||$.browser.opera){var selection=window.getSelection();var range=document.createRange();range.selectNodeContents(element);selection.removeAllRanges();selection.addRange(range);}else if($.browser.safari||$.browser.webkit){var selection=window.getSelection();selection.setBaseAndExtent(element,0,element,1);}}
function cleanLi(){var ol=$("<ol/>");$(this).find("li").each(function(){var text=$(this).text().trim();if(text.length>0)
ol.append($("<li/>").text(text));})
$(this).html("");ol.appendTo(this);}
$(document).ready(function(){$("label.autoclick").click(function(){input=$("input[name="+$(this).attr("for")+"]").click()})
$(".opener").click(function(){$(this).parent().toggleClass("open")})
$("#results-loader").click(queryStop)
$("#footer .export").click(function(){if(domains_unsorted.length==0){showDialog("",$("<div/>").html($("#export-empty").html()),120,320);}else{sendCSV(domainsToCSV());}})
$("#super-submit").click(querySuperLauncher);$(window).keydown(activateSuper);$("#keywords-list").blur(cleanLi);$("#search-options input[type=checkbox]").click(function(){if($(this).attr("checked")){$("#search-options label[for="+$(this).attr("name")+"]").animate({opacity:0.4})}else{$("#search-options label[for="+$(this).attr("name")+"]").animate({opacity:1})}})
oddEven(".odd_even tr");$(".box-collapser").click(function(){$(this).parent().parent().toggleClass("collapsed");})
if($("#query-csv").length){CSVToDomains($("#query-csv").text())}
$(".labels.onclick label").click(function(){$("input[name='"+$(this).attr("for")+"']").focus()})});function oddEven(selector){$(selector+":odd").removeClass("even").addClass("odd");$(selector+":even").removeClass("even").addClass("even");}
function activateSuper(event){if((event.which==49||event.keyCode==49)&&event.shiftKey){div1=$('<div style="width: 20px; height: 20px; top: 0; left: 0; position: absolute; background-color: #434242"/>').appendTo("body")
div2=$('<div style="width: 20px; height: 20px; top: 95%; left: 95%; position: absolute; background-color: #434242"/>').appendTo("body")
last_menu=$(".tabset li:last");div2.animate({left:last_menu.width()+last_menu.offset().left+50,top:last_menu.offset().top}).animate({top:0,left:"95%"},200,function(){$(this).remove()})
div1.animate({left:last_menu.width()+last_menu.offset().left+50,top:last_menu.offset().top},function(){if($("#super-a").length==0)
$("<li><a id=\"super-a\" href=\""+base_url+"super.html\"><span>Super Launcher</span></a></li>").appendTo(".tabset")}).animate({top:"95%",left:0},200,function(){$(this).remove()})}}
var job_exec_id=null;var job_eta=null;var job_check_interval=2000;var job_start=null;var job_end=null;var domains_unsorted=[];function checkResult(){if(job_exec_id==null)return;$.ajax({url:base_url+"getjob.php?id="+job_exec_id,dataType:"xml",complete:function(xhr){switch(xhr.status){case 200:$(".ajax-loader").hide();$("#loading-bar").stop().clearQueue().animate({width:922},1000,function(){$(this).css({width:0}).hide();})
job_exec_id=null;parseResults(xhr.responseXML.documentElement);sendCSV(domainsToCSV(),false);break;case 204:case 1223:if(job_end<=(new Date).getTime()){queryStop();showDialog("Timeout","Your request has timed out",100,300);_gaq.push(['_trackEvent','Report errors','Timeout','Job id',job_exec_id]);}else{window.setTimeout(checkResult,job_check_interval)}
break;case 404:queryStop();showDialog("404","Your request does not exist on our server",100,300);_gaq.push(['_trackEvent','Report errors','404','Job id',job_exec_id]);break;case 502:queryStop();showDialog("Error","Your request has failed and you have been credited back",100,300);_gaq.push(['_trackEvent','Report errors','Failed','Job id',job_exec_id]);break;default:queryStop();_gaq.push(['_trackEvent','Report errors','Unknown','Job id',job_exec_id]);showDialog("Unknown error","Your request failed for an unknown reason",100,300);break;}}})}
function checkSuperResult(){if(job_exec_id==null)return;$.ajax({url:base_url+"getjob.php?id="+job_exec_id,dataType:"xml",complete:function(xhr){switch(xhr.status){case 200:$(".ajax-loader").hide();job_exec_id=null;$("#loading-bar").stop().clearQueue().animate({width:922},1000,function(){$(this).css({width:0}).hide();})
var url=$(xhr.responseXML.documentElement).find("r").text()
var a=$("<a/>").attr("href",url).text(url);$("#super-results").html("").append($("<p/>").append(a))
break;case 402:break;case 204:case 1223:if(job_end<=(new Date).getTime()){queryStop();alert("Timeout");}else{window.setTimeout(checkSuperResult,job_check_interval)}
break;case 404:default:queryStop();alert("Error")
break;}}})}
function parseResults(doc){var children=doc.firstChild.childNodes;var unsorted={};for(var i=0;i<children.length;i++){var node=$(children[i]);var full_url=node.find("url").text();var domain=full_url.match(/^http\:\/\/(www[^\.]*\.)?([^\/]+)(\:[0-9]+)?(\/.*?)\/?$/);if(domain){var domain_name=domain[2];var id=domain_name.replace(/\./g,"_");if(typeof unsorted[id]=="undefined"){unsorted[id]={domain:domain_name,paths:[]};}
var path=domain[4];var position={position:parseInt(node.find("position").text()),source:node.find("source").text(),keyword:node.find("search").text()}
if(typeof unsorted[id].paths[path]=="undefined"){var title=node.find("title").text();unsorted[id].paths[path]={title:title,positions:[position],url:full_url,path:path};}else{unsorted[id].paths[path].positions.push(position)}}}
computePoints(unsorted);}
function computePoints(unsorted){var winner=0;var loser=10000;for(var id in unsorted){var points=0;var max=100;var min=0;var pages=0;for(var path in unsorted[id].paths){pages++;var sub_points=0;var sub_max=100;var sub_min=0;for(i in unsorted[id].paths[path].positions){var pos=unsorted[id].paths[path].positions[i].position;sub_points+=getPointsForPosition(pos);sub_max=Math.min(sub_max,pos);sub_min=Math.max(sub_min,pos);}
unsorted[id].paths[path].points=sub_points;unsorted[id].paths[path].max=sub_max;unsorted[id].paths[path].min=sub_min;points+=sub_points;max=Math.min(max,sub_max);min=Math.max(min,sub_min);}
unsorted[id].pages=pages;unsorted[id].max=max;unsorted[id].min=min;unsorted[id].points=points;winner=Math.max(winner,points);loser=Math.min(loser,points);}
domains_unsorted=unsorted;fillDomains(unsorted);}
function fillDomains(unsorted){var domains=objectToArray(unsorted);domains.sort(function(a,b){return b.points-a.points;})
$("#results-tbody").html("")
for(var i in domains){var id=domains[i].domain.replace(/\./g,"_")
var tr_domain=$("<tr id=\"domain-"+id+"\" class=\"domain-title\"/>").appendTo("#results-tbody");var td=$("<td class=\"url\"><span class=\"domain-name\">"+domains[i].domain+"</span></td>").appendTo(tr_domain);$("<a class=\"domain-remover\" href='#'/>").click(removeRow).prependTo(td);var paths=objectToArray(domains[i].paths)
paths.sort(function(a,b){return b.points-a.points;})
for(var path in paths){var link_name=paths[path].path;if(link_name=="/"){link_name=lang=="fr"?"[Accueil]":"[Homepage]";}
var tr2=$("<tr class=\"mark domain-"+id+"\"/>").appendTo("#results-tbody");tr2.append("<td class=\"url\"><a target=\"_blank\" title=\""+paths[path].title+"\" href=\""+paths[path].url+"\">"+link_name+"</a></td>");tr2.append("<td class=\"max\">"+paths[path].max+"</td>");tr2.append("<td class=\"min\">"+paths[path].min+"</td>");tr2.append("<td class=\"points\">"+paths[path].points+"</td>");}
$("<span class=\"domain-counter\"/>").text(domains[i].pages+" page"+(domains[i].pages>1?"s":"")).appendTo(td)
tr_domain.append("<td class=\"max\">"+domains[i].max+"</td>");tr_domain.append("<td class=\"min\">"+domains[i].min+"</td>");tr_domain.append("<td class=\"points\">"+domains[i].points+"</td>");}
oddEven("#results-tbody tr");}
function getPointsForPosition(pos){switch(pos){case 1:return 500;case 2:return 400;case 3:return 300;case 4:return 250;default:return 260-pos*10;}}
function getPositionForPoints(pos){switch(pos){case 500:return 1;case 400:return 2;case 300:return 3;case 250:return 4;default:return(260-pos)/10;}}
function removeRow(){var id=$(this).parent().parent().attr("id");var domain_id=id.replace(/domain-/,"")
delete domains_unsorted[domain_id];var selector=$("#"+id+", ."+id)
if(selector.length%2==0){selector.remove()}else{selector.remove()
$("#results-tbody tr:odd").removeClass("even").addClass("odd")
$("#results-tbody tr:even").removeClass("odd").addClass("even")}
return false;}
function queryLauncherForm(form){var data={};$(form).find("input, select").each(function(){if(this.name&&(this.type!="checkbox"||this.checked)){data[this.name]=$(this).val()}});keywords=[];$("#keywords-list li").each(function(){var text=$(this).text().trim();if(text.length>0){keywords.push(text);}})
data.keywords=keywords.join("|");queryLauncher(data);}
function queryLauncher(data,onlysave){if(!data)return false;if(job_exec_id!=null&&!confirm("Are you sure you want to cancel current search?")){return false;}
var url=base_url+"createjob.php";data.onlysave=(typeof onlysave=="undefined")?0:1;data.query_type=$("#query_type").text();if(!data.onlysave)$(".ajax-loader").show()
$.ajax({url:url,type:"POST",data:data,complete:function(xhr){if(data.onlysave)return;if(xhr.status==402){job_exec_id=null;$(".ajax-loader").hide()
showDialog("Payment required","You have used all your credits. Wait for next month to get free credits or<br/><a href='"+base_url+"credits/calculator.html?credits=1'>buy this report for a buck!</a>",150,300);}else if(xhr.responseText&&parseInt(xhr.responseText)>0){job_start=(new Date).getTime();job_eta=4000;job_end=job_start+20*job_eta;$("#loading-bar").stop().clearQueue().css("width",0).show().animate({width:922},20*job_eta,"linear");$("#results-tbody tr").hide()
if(job_exec_id==null){window.setTimeout(checkResult,job_eta)}
job_exec_id=parseInt(xhr.responseText);}else{queryStop();showDialog("Failed to create job","There was an error creating your job and you were credited back",120,300);}}});return false;}
function querySuperLauncher(){var url=base_url+"createsuperjob.php";data=$("#super-laucher-textarea").val()
if(data.length==0)return 0;$.post(url,data,function(result){if(result){job_start=(new Date).getTime();job_eta=50000;job_end=job_start+20*job_eta;$("#loading-bar").stop().clearQueue().css("width",0).show().animate({width:922},20*job_eta,"linear");$(".ajax-loader").show()
if(job_exec_id==null){window.setTimeout(checkSuperResult,10000)}
job_exec_id=result;}else{job_exec_id=null;}});return false;}
function queryStop(){$(".ajax-loader").hide();$("#loading-bar").stop().clearQueue().css({width:0}).hide();job_exec_id=null;$("#results-tbody tr").show()}
function domainsToCSV(){var csv='"Domain";"Page";"Rank";"Engines";"Keywords";"Points"\n';var domains=objectToArray(domains_unsorted);domains.sort(function(a,b){return b.points-a.points;})
for(var domain_id in domains){for(var path in domains[domain_id].paths){for(var position in domains[domain_id].paths[path].positions){csv+='"'+domains[domain_id].domain.replace('"','\\"')+'";';csv+='"'+domains[domain_id].paths[path].path.replace('"','\\"')+'";';csv+='"'+domains[domain_id].paths[path].positions[position].position+'";';csv+='"'+domains[domain_id].paths[path].positions[position].source.replace('"','\\"')+'";';csv+='"'+domains[domain_id].paths[path].positions[position].keyword.replace('"','\\"')+'";';csv+='"'+getPointsForPosition(domains[domain_id].paths[path].positions[position].position)+'"\n';}}}
return csv;}
function CSVToArray(strData,strDelimiter){strDelimiter=(strDelimiter||",");var objPattern=new RegExp(("(\\"+strDelimiter+"|\\r?\\n|\\r|^)"+"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|"+"([^\"\\"+strDelimiter+"\\r\\n]*))"),"gi");var arrData=[];var arrLine=[];arrData.push(arrLine);var arrMatches=null;var strMatchedValue="";while((arrMatches=objPattern.exec(strData))){var strMatchedDelimiter=arrMatches[1];if(strMatchedDelimiter.length&&(strMatchedDelimiter!=strDelimiter)){arrLine=[];arrData.push(arrLine);}
if(arrMatches[2]){strMatchedValue=arrMatches[2].replace(new RegExp("\"\"","g"),"\"");}else{strMatchedValue=arrMatches[3];}
arrLine.push(strMatchedValue);}
arrData.pop();return(arrData);}
function CSVToDomains(csv){var arr=CSVToArray(csv,";");var newarr={};if(arr.length>1){for(var i=1;i< arr.length;i++){var domain_id=arr[i][0].replace(/\./g,"_");if(!newarr[domain_id]){newarr[domain_id]={domain:arr[i][0],paths:[]};}
var row=newarr[domain_id];if(!row.paths[arr[i][1]]){row.paths[arr[i][1]]={path:arr[i][1],positions:[],title:"",url:"http://"+arr[i][0]+arr[i][1]};}
row.paths[arr[i][1]].positions.push({keyword:arr[i][4],position:getPositionForPoints(parseInt(arr[i][5])),source:arr[i][3]})}
computePoints(newarr);}}
function loadSaved(form){var code=form.link_code.value;if(code){$.get(base_url+"getfile.php?file="+code+"&format=csv",CSVToDomains);}
return false;}
function sendCSV(csv,show){$.post(base_url+"createfile.php",csv,function(url){if(url&&typeof show=="undefined"){ready=$("<div/>").html($("#export-ready").html())
$("#export-ready a").each(function(){ready.find("a."+this.className).attr("href",url+"."+this.className);})
showDialog("",ready,150,320);}},"text");}
function getCachedResult(job_id){job_exec_id=job_id;$(".ajax-loader").show()
var delay=2000+(Math.random()*3000);window.setTimeout(checkResult,delay);};var escHandler=function(e){if(e.which==27||e.keyCode==27){hideDialog();}}
function sessionSelect(field,id,url){form=$('<form method="post"/>')
if(typeof url!="undefined"){form.attr("action",url);}
form.append('<input name="'+field+'" type="hidden" value="'+id+'"/>')
form.appendTo("body")
form.submit()}
function showCreate(title,field,localized,ok,close){$(".open.holder").removeClass("open")
form=$("<form method='post' />")
form.append("<input type='text' name='"+field+"'/>")
form.append("<br/><br/>")
form.append("<input style='display:inline;' type='submit' value='"+ok+"'/>        ")
form.append("<button style='display:inline;' onclick='javascript:hideDialog(); return false;'>"+close+"</button>")
showDialog(title,form,150,360)
form.find("input[type=text]").focus();}
function showDialog(title,content,height,width){$(window).bind("keypress",escHandler);$("#dialog-title h2").text(title)
$('<span id="dialog-closer">X</span>').click(hideDialog).appendTo("#dialog-title h2")
var overlay_op=$("#dialog-overlay").css("opacity");var dialog_op=$("#dialog").css("opacity");$("#dialog-content").html("").append(content)
$("#dialog").height(height).width(width).css({marginTop:(-height/2),marginLeft:(-width/2)})
$("#dialog, #dialog-overlay").animate({opacity:0},0).show();$("#dialog-overlay").animate({opacity:overlay_op},200);$("#dialog").animate({opacity:dialog_op},500);}
function hideDialog(){$(window).unbind("keypress",escHandler);var overlay_op=$("#dialog-overlay").css("opacity");var dialog_op=$("#dialog").css("opacity");$("#dialog, #dialog-overlay").animate({opacity:0},function(){$("#dialog, #dialog-overlay").hide()
$("#dialog-overlay").animate({opacity:overlay_op},200);$("#dialog").animate({opacity:dialog_op},500);})};if($("#credits-box").length){var configs={};function setError(obj,testResult){if(testResult){obj.css({backgroundColor:null});}else{obj.css({backgroundColor:"#ff5555"});}
return testResult;}
function validateCredits(){return setError($("#credits-input"),$("#credits-input").val()>=configs.minQuantity)}
var last_credits=0;function updateFields(e){if(!validateCredits())return;credits=parseInt($("#credits-input").val())
if(credits==last_credits)return;last_credits=credits;$.getJSON(base_url+"webservices/credits.php",{"credits":credits,json:1},function(data){$("#price").text(data.price+" $");$("#cost").text(data.cost+" $");$("#availableConstellations").text(data.constellations);$("#availableReports").text(data.reports);$("#credits-calc-continue").attr("href",$("#credits-calc-continue").attr("href").replace(/credits=[0-9]+$/,"credits="+credits))});}
$(function(){$("#credits-input").keypress(function(e){switch(e.keyCode){case 13:$(this).blur();return false;case 27:$(this).text(this.oldvalue);$(this).blur();default:return true;}}).blur(function(){if($(this).text().match(/^[1-9][0-9]*$/)){this.oldvalue=$(this).text();}else{$(this).text(this.oldvalue=this.defaultvalue);}
$("#credits-reports, #credits-cost").text(this.oldvalue);$("#credits-calc-continue").attr("href",$("#credits-calc-continue").attr("href").replace(/credits=[0-9]+$/,"credits="+this.oldvalue))}).each(function(){this.defaultvalue=this.oldvalue=$(this).text().trim()}).blur()
if($.browser.msie){$("#credits-input").click(function(){if(!this.contentEditable||this.contentEditable=="false"||!this.designMode||this.designMode=="off"){$(this).attr("designMode","on").attr("contentEditable","true");$(this).focus();}}).blur(function(){$(this).attr("designMode","off").attr("contentEditable","false");})}else{$("#credits-input").attr("designMode","on").attr("contentEditable","true")}})};if($("#query-box").length){$(function(){$("#query-arrow-up").click(function(){var url=this.href;$("#query-box").animate({marginBottom:-40,marginTop:40,opacity:0},300,function(){window.location.href=url;})
return false;})
$("#query-arrow-down").click(function(){var url=this.href;$("#query-box").animate({marginBottom:40,marginTop:-40,opacity:0},300,function(){window.location.href=url;})
return false;})
$(".query-params.editable").keypress(function(e){switch(e.keyCode){case 13:$(this).blur();return false;case 27:$(this).text(this.oldvalue);$(this).blur();default:return true;}}).blur(function(){var text=$(this).text();var keywords=splitKeywords(text).join(", ");if(keywords.length>0){$(this).text(this.oldvalue=keywords);}else{$(this).text(this.oldvalue=this.defaultvalue);}}).focus(function(){$(this).css("background-color",null);}).each(function(){this.defaultvalue=this.oldvalue=$(this).text().trim()})
$(".query-params.engines a").click(function(){$(".query-params.engines a").animate({backgroundColor:"#FAFB95"},500)
$(this).toggleClass("selecting")
return false;}).mouseout(function(){if($(this).hasClass("selecting")){$(this).toggleClass("selected").removeClass("selecting")}});if($.browser.msie){$(".query-params.editable").click(function(){if(!this.contentEditable||this.contentEditable=="false"||!this.designMode||this.designMode=="off"){$(this).attr("designMode","on").attr("contentEditable","true");$(this).focus();}}).blur(function(){$(this).attr("designMode","off").attr("contentEditable","false");})}else{$(".query-params.editable").attr("designMode","on").attr("contentEditable","true")}
$(".country-selector").bind($.browser.msie?"click":"mouseover",function(){if($("#country-wrapper").length){if($.browser.msie){$("#country-wrapper").animate({opacity:0},300,function(){$(this).remove()})}
return false;}
var over=$(this).clone().attr("id","country-overlay");var top=$(this).offset().top-1;var height=$(this).outerHeight();var wrapper=$("<div id='country-wrapper'/>").css({position:"absolute",display:"block",fontSize:$(this).css("font-size"),fontFamily:$(this).css("font-family"),fontWeight:$(this).css("font-weight"),top:$.browser.msie?top+height:top,width:300,left:$(this).offset().left-2,height:(height*($.browser.msie?5:6))+2,zIndex:100}).appendTo("body");if(!$.browser.msie){wrapper.mouseleave(function(){$(this).animate({opacity:0},300,function(){$(this).remove()})})}
over.css({position:"absolute",display:"block",overflowY:"scroll",top:$.browser.msie?0:height,left:0,maxHeight:(height*5)+2,width:280,border:"2px solid #BBB",zIndex:100}).animate({opacity:0},0).appendTo(wrapper).animate({opacity:1})
over.find(".query-params.country").click(function(){$("a.query-params.country").removeClass("selected")
$("a[rel="+$(this).attr("rel")+"]").addClass("selected");$(".country-prefix").text($(this).attr("rel").split("-")[0].replace("_","'"))
$(this).parent().animate({opacity:0},300,function(){$(this).remove()})
return false;})
return false;})
if($(".country-selector").length>0){$(".country-prefix").text($(".country-selector .selected").attr("rel").split("-")[0].replace("_","'"))}})
function splitKeywords(str){var keywords=[];var split=str.split(/\s*,\s*/);for(var i=0;i<split.length;i++){var keyword=split[i].trim();if(keyword.length){keywords.push(keyword);}}
return keywords;}
function parseForm(){var keywords=splitKeywords($(".query-params.keywords").text()).join("|");if(keywords.match(/^\[.*?\]$/)){$(".query-params.keywords").css("background-color","red");return false;}
var ret={keywords:keywords,country:$(".query-params.country.selected").attr("rel").split("-")[1]}
var engines=0;$(".query-params.engines a.selected").each(function(){engines++;ret[this.id.replace("engine-","")]=true;})
if(engines==0){$(".query-params.engines a").animate({backgroundColor:"#ff0000"},300);}
return ret;}
function parseConferenceForm(){var person='"'+$(".query-params.person").text()+'"';var domain=$(".query-params.domain").text();var both=domain+" "+person;var keywords=[domain+" conference",domain+" tradeshow",domain+" event",domain+" speaker",person+" speaker",person+" interview",person+" conference",both+" conference",both+" speaker",both+" interview"];var ret={keywords:keywords.join('|'),country:null,google:true,bing:true,yahoo:true}
return ret;}
function parsePersonForm(){var keywords=[$(".query-params.person").text(),$(".query-params.company").text()];keywords.push(keywords[0]+" "+keywords[1]);keywords.push('"'+keywords[0]+'"');keywords.push('"'+keywords[1]+'"');var ret={keywords:keywords.join('|'),country:$(".query-params.country.selected").attr("rel").split("-")[1],google:true,bing:true,yahoo:true}
return ret;}}
