AJS.Labels=(function(A){return{operationInProgress:false,updateStatus:function(B){A("#labelOperationStatus").html(B);if(B!=""){A("#waitImageAndStatus").addClass("open")}else{A("#waitImageAndStatus").removeClass("open")}},startOperation:function(B){AJS.Labels.operationInProgress=true;A("#errorSpan").html("");AJS.Labels.labelOperationError("");AJS.Labels.updateStatus(B)},finishOperation:function(){AJS.Labels.updateStatus("");AJS.Labels.operationInProgress=false},handleError:function(B){AJS.Labels.operationInProgress=false;AJS.Labels.updateStatus("");A("#errorSpan").html(B)},labelOperationError:function(B){A("#labelOperationErrorMessage").html(B);if(B!=""){AJS.setVisible("#labelOperationErrorContainer",true)}else{AJS.setVisible("#labelOperationErrorContainer",false)}},addLabelFromInput:function(){return AJS.Labels.addLabel(A("#labelsString").val())},addLabel:function(B){if(!AJS.Labels.operationInProgress&&B&&B!=""){AJS.Labels.startOperation("Adding label...");var C={entityIdString:AJS.params.pageId,labelString:B};AJS.safe.ajax({type:"POST",url:AJS.params.contextPath+"/json/addlabelactivity.action",data:C,success:AJS.Labels.addLabelCallback,error:AJS.Labels.addLabelErrorHandler,dataType:"json"})}return false},addLabelCallback:function(B){if(B.success){A("#labelsList").html(A("#labelsList").html()+B.response);A(".labels-editor .remove-label").unbind("click");A(".labels-editor .remove-label").click(AJS.Labels.removeLabel);A("#labelsString").val("")}else{AJS.Labels.labelOperationError(B.response)}A("#labelsString").focus();AJS.safe.ajax({url:AJS.params.contextPath+"/json/suggestlabelsactivity.action",data:{entityIdString:AJS.params.pageId},success:AJS.Labels.suggestedLabelsCallback,error:AJS.Labels.suggestedLabelsErrorHandler,dataType:"json"});AJS.Labels.finishOperation()},addLabelErrorHandler:function(){AJS.Labels.handleError("[41a] Error connecting to the server. The labels have not been updated.")},removeLabel:function(){if(!AJS.Labels.operationInProgress){AJS.Labels.startOperation("Removing label ...");var C=AJS.$(this).parent().attr("id").replace(/^label-/,"");var B={entityIdString:AJS.params.pageId,labelIdString:C};AJS.safe.ajax({type:"POST",url:AJS.params.contextPath+"/json/removelabelactivity.action",data:B,success:AJS.Labels.removeLabelCallback(C),error:AJS.Labels.removeLabelErrorHandler,dataType:"json"})}return false},removeLabelCallback:function(B){return function(C){if(C.success){var D=A("#label-"+B);D.fadeOut("slow",function(){D.remove()})}else{AJS.Labels.labelOperationError(C.response)}AJS.Labels.finishOperation()}},removeLabelErrorHandler:function(B){var C="Error connecting to the server. The labels have not been updated";if(B){C+=": "+B}AJS.Labels.handleError(C)},suggestedLabelsCallback:function(B){if(!B.success){return }A("#suggestedLabelsSpan").html(B.response);A("#suggestedLabelsSpan .suggested-label").click(function(D){var E=A("#labelsString").val();if(E.length>0){E+=" "}E+=A(this).text();A("#labelsString").val(E);var C=this;if(A(this).parent().find("a").length==1){C=A(this).parent()}A(C).fadeOut(function(){A(this).remove()});D.preventDefault()})},suggestedLabelsErrorHandler:function(B){var C="Error finding suggested labels. The labels have not been updated";if(B){C+=": "+B}AJS.Labels.handleError(C)},bindAutocomplete:function(){var G=A("#labelsString"),F=G.parents("#add-labels-form").length;if(!G.length){return }var D=function(H){A("#labelsAutocompleteList").append(H)};var E=function(O){if(O.find("a.label-suggestion").length){var P=A("span",O);var L=A.data(P[0],"properties");if(F){AJS.Labels.addLabel(L.name)}else{var N=G.val();var M=AJS.Labels.queryTokens;var R=-1,J="";for(var K=0;K<M.length;K++){J=M[K];var I=N.lastIndexOf(J);if(I>R){R=I}}if(R!=-1){var Q=N.substr(0,R);var H=N.substr(R+J.length).match(/^\s+/);if(H){Q+=H[0]}G.val(Q+L.name)}else{G.val(L.name)}}}};var B=function(){if(!A("#labelsAutocompleteList .label-suggestion").length){this.hide()}else{if(!F){var J=A("#labelsAutocompleteList a.label-suggestion");for(var H=0,I=J.length;H<I;H++){J.get(H).href="#"}}}};var C="/labels/autocompletelabel.action";A(window).bind("quicksearch.ajax-success",function(I,H){if(H.url==C){AJS.Labels.queryTokens=(H.json&&H.json.queryTokens)||[];return false}});A(window).bind("quicksearch.ajax-error",function(I,H){if(H.url==C){AJS.Labels.queryTokens=[];return false}});G.quicksearch(C,B,{makeParams:function(H){return{query:H,contentId:AJS.params.pageId||""}},dropdownPlacement:D,ajsDropDownOptions:{selectionHandler:function(I,H){E(H);this.hide();I.preventDefault()}}})},TagExtractor:function(B,C){this.tagPrefix=B;this.extractFromUrls=C;this.TAG_END=" ";this.parseTagsTo=function(J,G){var I=function(L,N){var M=L;while(M>0){switch(N[M]){case"/":case"&":return true;case" ":return false;default:M--}}return false};var F=0;while(F<J.length){var E=J.indexOf(this.tagPrefix,F);if(E==-1){return }if(!this.extractFromUrls&&I(E,J)){F=E+1}else{var H=E+this.tagPrefix.length;var D=J.indexOf(this.TAG_END,H);var K=J.indexOf(this.tagPrefix,H);if(K!=-1&&(D==-1||K<D)){D=K}if(D==-1){D=J.length}if(D!=E+this.tagPrefix.length){G(J.substring(H,D),H,D)}F=D}}}}}})(AJS.$);AJS.toInit(function(){AJS.Labels.bindAutocomplete()});
AJS.toInit(function(C){var B=function(D){C("#labels_div").toggleClass("hidden");C("#labels_info").toggleClass("hidden");if(C("#labels_div").hasClass("hidden")){C("#labels_info").html(C("#labelsString").val().toLowerCase());C("#labels_edit_link").html(AJS.params.editLabel)}else{AJS.safe.ajax({url:AJS.Data.get("context-path")+"/json/suggestlabelsactivity.action",data:{entityIdString:AJS.params.pageId},success:AJS.Labels.suggestedLabelsCallback,error:AJS.Labels.suggestedLabelsErrorHandler,dataType:"json"});C("#labels_edit_link").html(AJS.params.doneLabel)}if(D){D.preventDefault()}};var A=C("#labelsShowing");if(A.length&&A.val()=="true"){B()}C("#labels_edit_link").click(B)});

