var ajaxInProgressCnt=0;var ajaxRetryTime=500;ajaxCall=function(a){ajaxInProgressCnt++;$.ajax({type:a.type,url:a.url,data:a.data||{},success:function(b){ajaxInProgressCnt--;if(a.success){a.success(b)}},error:function(d,b,c){ajaxInProgressCnt--;if(a.error){a.error(d,b,c)}else{if(a.customError){a.customError(d,b,c)}showError("Ajax error "+d.status,"The server could not process your request.")}}})};ajaxSafeLink=function(a){if(ajaxInProgressCnt===0){window.location=a}else{setTimeout(function(){ajaxSafeLink(a)},ajaxRetryTime)}};jQuery.preloadCssImages=function(c){c=jQuery.extend({statusTextEl:null,statusBarEl:null,errorDelay:999,simultaneousCacheLoading:2},c);var a=[],f=0,d=[],g,e;function i(){clearTimeout(e);if(d&&d.length&&d[f]){f++;if(c.statusTextEl){var j=(d[f])?"Now Loading: <span>"+d[f].split("/")[d[f].split("/").length-1]:"Loading complete";jQuery(c.statusTextEl).html('<span class="numLoaded">'+f+'</span> of <span class="numTotal">'+d.length+'</span> loaded (<span class="percentLoaded">'+(f/d.length*100).toFixed(0)+'%</span>) <span class="currentImg">'+j+"</span></span>")}if(c.statusBarEl){var k=jQuery(c.statusBarEl).width();jQuery(c.statusBarEl).css("background-position",-(k-(k*f/d.length).toFixed(0))+"px 50%")}h()}}function h(){if(d&&d.length&&d[f]){var j=new Image();j.src=d[f];if(!j.complete){jQuery(j).bind("error load onreadystatechange",i)}else{i()}e=setTimeout(i,c.errorDelay)}}function b(n,y){var v=false,r=[],p=[],A;var o=n.length;while(o--){var x="";if(y&&y[o]){A=y[o]}else{var C=(n[o].href)?n[o].href:"window.location.href";var B=C.split("/");B.pop();A=B.join("/");if(A){A+="/"}}try{if(n[o].cssRules||n[o].rules){g=(n[o].cssRules)?n[o].cssRules:n[o].rules;var s=g.length;while(s--){if(g[s].style&&g[s].style.cssText){var q=g[s].style.cssText;if(q.toLowerCase().indexOf("url")!=-1){x+=q}}else{if(g[s].styleSheet){r.push(g[s].styleSheet);v=true}}}}}catch(z){}var D=x.match(/[^\("]+\.(gif|jpg|jpeg|png|ico)/g);if(D){var u=D.length;while(u--){var k=(D[u].charAt(0)=="/"||D[u].match("://"))?D[u]:A+D[u];if(jQuery.inArray(k,d)==-1){d.push(k)}}}if(!v&&n[o].imports&&n[o].imports.length){for(var l=0,j=n[o].imports.length;l<j;l++){var w=n[o].imports[l].href;w=w.split("/");w.pop();w=w.join("/");if(w){w+="/"}var m=(w.charAt(0)=="/"||w.match("://"))?w:A+w;p.push(m);r.push(n[o].imports[l])}}}if(r.length){b(r,p);return false}var t=c.simultaneousCacheLoading;while(t--){setTimeout(h,t)}}b(document.styleSheets);return d};var allowedExtensions={".jpg":true,".jpeg":true,".png":true,".gif":true,".pdf":true,".bmp":true};function showDialog(d,b,a){var c="";c+='<div id="'+d+'" class="dialog">';c+='<table class="dialog_table" border="0" cellpadding="0" cellspacing="0">';c+="	<tr>";c+='		<td><div class="dialog_tl"></div></td>';c+='		<td class="dialog_top"></td>';c+='		<td><div class="dialog_tr"></div></td>';c+="	</tr>";c+="	<tr>";c+='		<td class="dialog_left"></td>';c+='		<td style="background-color: #e3e3e3;">';c+='			<div class="dialog_content">';c+='				<span style="font-weight: bold;">'+b+"</span><br/>";c+=a;c+="				</div>";c+="		</td>";c+='		<td class="dialog_right"></td>';c+="	</tr>";c+="	<tr>";c+='		<td> <div class="dialog_bl"></div></td>';c+='		<td class="dialog_bottom"></td>';c+='		<td class="dialog_br"><div id="dialog_br"></div></td>';c+="	</tr>";c+="</table>";c+="</div>";$(c).appendTo("body").hide().fadeIn()}function hideDialog(b){var a=$("#"+b);if(a.length>0){a.fadeOut("normal",function(){a.remove()})}}function showNewTagDialog(){if($("#newtag_dialog").length>0){$("#newtag_dialog").fadeIn()}else{var a="";a+="<table width=100%><tr><td width='230px'>";a+="Tag: <input type='text' id='tag' style='width: 180px' />";a+="</td><td width='70px'>";a+="<span style='float:left'>Color: </span><input id='color' type='text' value='#ffffff' />";a+="</td></tr>";a+="<tr><td colspan=2 align=right>";a+="<input type='button' id='create' style='margin-left: 5px' value='Create' />";a+="<input type='button' id='cancel' value='Cancel' />";a+="</td></tr></table>";showDialog("newtag_dialog","New Tag",a);$("#color","#newtag_dialog").colorPicker();$("#tag","#newtag_dialog").select();$("#cancel","#newtag_dialog").click(function(){hideDialog("newtag_dialog")});$("#create","#newtag_dialog").click(function(){var b=new Tag({name:$("#tag","#newtag_dialog").val(),color:$("#color","#newtag_dialog").val()});if(tags.length===0){$("#notification_drag").fadeIn();setTimeout(function(){if(!$("#notification_drag").is(":hidden")){$("#notification_drag").fadeOut()}},7000)}tags.push(b);hideDialog("newtag_dialog")})}}function showSendingDialog(){var b="<div style='margin-left: 130px;  display: inline'>Sending</div><span style='position: relative;' id='loadingDots'/>";showDialog("sending","",b);var a=function(){if($("#loadingDots","#sending").length>0){var c=$("#loadingDots","#sending").html();if(c.length<3){c+="."}else{c=""}$("#loadingDots","#sending").html(c);setTimeout(a,500)}};setTimeout(a,500)}function hideSendingDialog(){hideDialog("sending")}function showUploadDialog(b){var a="";if(Annotator.isDesignerAnnotator){a+='<form id="newVersionUpload" action="/designer/annotations/'+b+'" method="post" enctype="multipart/form-data">'}else{a+='<form id="newVersionUpload" action="/client/annotate/'+Annotator.projectCode+'" method="post" enctype="multipart/form-data">'}a+='    <div id="fileUploadContainer">';a+='        <input class="transparent" id="projectFile" size=35 name="projectFile" type="file"/>';a+='        <div id="replacementForm">';a+='            <input id="fakeFile" type="text" readonly=true value="Choose file for upload"/>';a+='            <img style="vertical-align: middle;" src="/media/images/annotator/newupload/browse_button.png"/>';a+="        </div>";a+="    </div>";a+="</form>";a+='<div class="emtpydiv">';a+='    <div id="cancelButton" onclick="hideDialog(\'uploadDialog_'+b+"'); return false;\">&nbsp;</div>";a+='    <div id="submitButton" onclick="processUpload(\'uploadDialog_'+b+"');\">&nbsp;</div>";a+="</div>";a+='<div style="clear: both;"></div>';showDialog("uploadDialog_"+b,"Upload New Version",a);$("#projectFile","#uploadDialog_"+b).change(function(){$("#fakeFile","#uploadDialog_"+b).val(this.value)})}function processUpload(c){var b=$("#projectFile",$("#"+c)).val();if(b===""){showError("Error","Please select a file to upload");return false}var f=b.substring(b.lastIndexOf(".")).toLowerCase();if(!allowedExtensions[f]){showError("Error","Files of extension "+f+" are not supported.");return false}var d=$("#newVersionComments",$("#"+c));var e=d.val();if(e==="Type-in Your Message"){e="uploaded by "+Annotator.name}else{if(!Annotator.isDesignerAnnotator){e=Annotator.name+": "+e}}d.attr("name","dummy");var a=$("<input type='hidden' name='generalComments' value='"+e+"'></input>");$("#newVersionUpload",$("#"+c)).append(a);$("#newVersionUpload",$("#"+c)).submit()}function showThreadRemovePrompt(a,b){var c="";c+="		Would you like to delete the whole thread or only a single comment?<br/><br/>";c+='		<div style="text-align:right">';c+='			<input id="cancelButton" type=button value="Cancel"></input>';c+='			<input id="deleteCommentButton" type=button value="Delete Comment"></input>';c+='			<input id="deleteThreadButton" type=button value="Delete Thread"></input>';c+="		</div>";showDialog("threadRemovePrompt","Confirmation",c);$("#cancelButton","#threadRemovePrompt").click(function(){hideThreadRemovePrompt()});$("#deleteCommentButton","#threadRemovePrompt").click(function(){a();hideThreadRemovePrompt()});$("#deleteThreadButton","#threadRemovePrompt").click(function(){b();hideThreadRemovePrompt()})}function hideThreadRemovePrompt(){hideDialog("threadRemovePrompt")}function hideError(){$("#errorDialog").fadeOut("normal",function(){$("#errorDialog").remove()})}function showError(b,a){a+='		<div style="text-align:right">';a+='			<input type=button onClick="hideError(); return false;" value="OK"></input>';a+="		</div>";showDialog("errorDialog",b,a)}function showUpgradeMessage(){showError("Free version limit","The free version allows only up to two clients per project. <a href='/designer/invite_friends'>Invite friends</a> to upgrade to the unlimited account to add more!")};