function pickedTags(){
var sendAjax = function(tagname, reason, action, callback){
url = scriptUrl;
if (action == 'add'){
url += $.i18n._('mark-tag/');
if (reason == 'good'){
url += $.i18n._('interesting/');
}
else {
url += $.i18n._('ignored/');
}
}
else {
url += $.i18n._('unmark-tag/');
}
url = url + tagname + '/';
call_settings = {
type:'POST',
url:url
}
if (callback != false){
call_settings['success'] = callback;
}
$.ajax(call_settings);
}
var unpickTag = function(from_target ,tagname, reason, send_ajax){
//send ajax request to delete tag
var deleteTagLocally = function(){
from_target[tagname].remove();
delete from_target[tagname];
}
if (send_ajax){
sendAjax(tagname,reason,'remove',deleteTagLocally);
}
else {
deleteTagLocally();
}
}
var setupTagDeleteEvents = function(obj,tag_store,tagname,reason,send_ajax){
obj.unbind('mouseover').bind('mouseover', function(){
$(this).attr('src', scriptUrl + 'content/images/close-small-hover.png');
});
obj.unbind('mouseout').bind('mouseout', function(){
$(this).attr('src', scriptUrl + 'content/images/close-small-dark.png');
});
obj.click( function(){
unpickTag(tag_store,tagname,reason,send_ajax);
});
}
var handlePickedTag = function(obj,reason){
var tagname = $.trim($(obj).prev().attr('value'));
to_target = interestingTags;
from_target = ignoredTags;
if (reason == 'bad'){
to_target = ignoredTags;
from_target = interestingTags;
to_tag_container = $('div .tags.ignored');
}
else if (reason != 'good'){
return;
}
else {
to_tag_container = $('div .tags.interesting');
}
if (tagname in from_target){
unpickTag(from_target,tagname,reason,false);
}
if (!(tagname in to_target)){
//send ajax request to pick this tag
sendAjax(tagname,reason,'add',function(){
new_tag = $('');
new_tag.addClass('deletable-tag');
tag_link = $('');
tag_link.attr('rel','tag');
tag_link.attr('href', scriptUrl + $.i18n._('tags/') + tagname);
tag_link.html(tagname);
del_link = $('');
del_link.addClass('delete-icon');
del_link.attr('src', scriptUrl + 'content/images/close-small-dark.png');
setupTagDeleteEvents(del_link, to_target, tagname, reason, true);
new_tag.append(tag_link);
new_tag.append(del_link);
to_tag_container.append(new_tag);
to_target[tagname] = new_tag;
});
}
}
var collectPickedTags = function(){
var good_prefix = 'interesting-tag-';
var bad_prefix = 'ignored-tag-';
var good_re = RegExp('^' + good_prefix);
var bad_re = RegExp('^' + bad_prefix);
interestingTags = {};
ignoredTags = {};
$('.deletable-tag').each(
function(i,item){
item_id = $(item).attr('id')
if (good_re.test(item_id)){
tag_name = item_id.replace(good_prefix,'');
tag_store = interestingTags;
reason = 'good';
}
else if (bad_re.test(item_id)){
tag_name = item_id.replace(bad_prefix,'');
tag_store = ignoredTags;
reason = 'bad';
}
else {
return;
}
tag_store[tag_name] = $(item);
setupTagDeleteEvents($(item).find('img'),tag_store,tag_name,reason,true)
}
);
}
var setupHideIgnoredQuestionsControl = function(){
$('#hideIgnoredTagsCb').unbind('click').click(function(){
$.ajax({
type: 'POST',
dataType: 'json',
cache: false,
url: scriptUrl + $.i18n._('command/'),
data: {command:'toggle-ignored-questions'}
});
});
}
return {
init: function(){
collectPickedTags();
setupHideIgnoredQuestionsControl();
$("#interestingTagInput, #ignoredTagInput").autocomplete(tags, {
minChars: 1,
matchContains: true,
max: 20,
multiple: true,
multipleSeparator: " ",
formatItem: function(row, i, max) {
return row.n + " ("+ row.c +")";
},
formatResult: function(row, i, max){
return row.n;
}
});
$("#interestingTagAdd").click(function(){handlePickedTag(this,'good')});
$("#ignoredTagAdd").click(function(){handlePickedTag(this,'bad')});
}
};
}
$(document).ready( function(){
pickedTags().init();
});