var PluckUtils = (function ($) { return {
twitterInit: (function () {
var $dropdown;
var loading = false;
function addDropdown() {
$('.pluck-comm-twitter-option label').not('.has-username')
.addClass('has-username')
.append(' as ')
.after($dropdown);
}
return function () {
if($dropdown) {
addDropdown();
return;
}
if(loading) {
return;
}
loading = true;
slTwitter.checkConnected(function (connected, username) {
if(username) {
$dropdown = $('')
.addClass('twitter-login-method')
.append($('').attr('value', 'use-login')
.attr('selected', true)
.text('@' + username))
.append($('').attr('value', 're-login')
.text('someone else'));
addDropdown();
}
});
};
})(),
getShareURL: function (ref, commentId) {
var url = new String(document.URL).split('#')[0];
var domainExp = new RegExp('^(https?://)(.*?)(.statesman.com/.*)$');
var match = domainExp.exec(url);
if(match && (match[2] == 'template' || match[2] == 'test')) {
url = match[1] + 'www' + match[3];
}
url = url.replace(/UrAuth=.*(&|$)/, '');
url = url.replace(/\?$/, '');
var sep = url.indexOf('?') == -1 ? '?' : '&';
if(ref) {
url += sep + 'ext_ref=comment-' + ref;
sep = '&'
}
if(commentId) {
url += sep + 'plckFindCommentKey=' + commentId;
url += '#pluck_comments_list'
sep = '&';
}
return url;
},
sendCommentToTwitter: function ($form, commentBody, commentId, callback) {
var afterSend = function () {
$('.pluck-comm-submit-wait').hide();
if(callback) {
callback();
}
};
var actuallySend = function () {
slTwitter.sendMessage(commentBody, PluckUtils.getShareURL('twitter', commentId),
'{0} @statesman {1}', afterSend);
};
slTwitter.checkConnected(function (connected) {
var $select = $('.twitter-login-method', $form);
var login = true;
if($select.size()) {
login = $select.find(':selected').val() === 're-login';
}
if(login || !connected) {
if(PluckUtils.twitterWindow) {
window.blur();
PluckUtils.twitterWindow.focus();
}
slTwitter.login(function (username) {
if(username) {
actuallySend();
} else {
afterSend();
}
});
} else {
actuallySend();
// No twitter page will ever be loaded, so we need to close the
// window we opened manually.
if(PluckUtils.twitterWindow) {
PluckUtils.twitterWindow.close();
}
}
});
},
pluck_comments_submit: function (formId, parentId, prefs) {
prefs = prefs ? prefs : {};
$(formId).submit(function() {
var form = $(formId);
$('.pluck-error-message, .pluck-confirm-message', form).hide();
var comment = $('textarea', form).val();
comment = $.trim(comment);
if (!comment) {
pluckAppProxy.fadeIn($('.pluck-comm-err-no-comment', form));
} else if (typeof(prefs.pluckCommentMaxLength) !== 'undefined' && prefs.pluckCommentMaxLength < comment.length) {
pluckAppProxy.fadeIn($('.pluck-comm-err-too-long', form));
} else {
// Popup blocker workaround
if($('#twitter-post-checkbox').attr('checked')) {
PluckUtils.twitterWindow = window.open('http://alt.coxnewsweb.com/statesman/twitter-popup.html', 'twitterLoginWindow', 'toolbar=0,status=0,width=800,height=600');
window.focus();
}
var form_top = $(this).parents('div.pluck-comm-input-content');
pluckAppProxy.displayWait($('.pluck-comm-submit-wait', form_top));
var params = { contentType: "Json", plckAction: "create", plckCommentBody: comment };
$('input:hidden', form).each(function() { params[this.name] = this.value; });
var twitter = $("input[name='plckTwitterLink']:checked", form).val();
var facebook = $("input[name='plckFacebookLink']:checked", form).val();
pluckAppProxy.callApp("pluck/comments/actions.app", params, function(data) {
var parentComment = $("input[name='plckParentCommentKey']", form).val();
data = eval('(' + data + ')');
if (data.success) {
$('textarea', form).val("");
if (data.moderating) {
pluckAppProxy.fadeIn($(".pluck-comm-info-moderating", form));
}
var updateKids = function() {
var comment_top = form.parents('div.pluck-comm-single-comment-main');
var reply_top = form_top.parents('div.pluck-comm-reply-input');
pluckAppProxy.fadeOut(reply_top);
pluckAppProxy.pluck_comments_submit_current = "";
pluckAppProxy.pluck_comments_list_refresh_replies(comment_top, parentId, "2", "1", data.commentId, true);
};
var updateList = function() {
pluckAppProxy.pluck_comments_refresh(parentId, null, null, null, null, data.commentId);
};
var updateCallback = parentComment ? updateKids : updateList;
if (parentComment) {
$(".pluck-score-volume[scoreontargetkey='" + parentComment + "']").each(function(i) {
var vol = $(this);
vol.attr("activity", "" + (parseInt(vol.attr("activity")) + 1));
});
}
var twitterDone = !twitter;
var facebookDone = !facebook;
var afterBoth = function () {
if(!data.moderating && facebookDone && twitterDone) {
setTimeout(updateCallback, 1);
}
};
var twitterFinish = function () {
twitterDone = true;
afterBoth();
};
if (twitter) {
PluckUtils.sendCommentToTwitter(form_top, comment, data.commentId, twitterFinish);
} else {
$('.pluck-comm-submit-wait', form_top).hide();
}
if (facebook) {
pluckAppProxy.loadLibrary(pluckAppProxy.baseUrl + "Direct/FacebookProxy", function(){
slFB.login(function(){
slFB.submitArticleComment(document.title, $("input[name='clientUrl']", form).val(), "", comment, [], function() {
facebookDone = true;
afterBoth();
});
});
});
}
afterBoth();
} else {
var results = pluckAppProxy.analyzeError(data.status, data.errorMsg);
$(".pluck-comm-submit-error-detail", form).html("errorCode: " + results.errorCode + ", errorMsg: " + results.errorMsg + ", fieldName: " + results.fieldName + ", fieldValue: " + results.fieldValue);
if (results.errorCode == "FloodControlTriggered") {
pluckAppProxy.fadeIn($(".pluck-comm-submit-flood-error", form));
} else if (results.status == 6 || results.status == 3 || results.status == 2) {
pluckAppProxy.fadeIn($(".pluck-comm-submit-general-error", form));
} else if (results.status == 5) {
pluckAppProxy.fadeIn($(".pluck-comm-submit-security-error", form));
} else if (results.status == 4) {
pluckAppProxy.fadeIn($(".pluck-comm-submit-deleted-error", form));
} else if (results.status == 1) {
$(".pluck-comm-submit-badword-list", form).html(results.dirtyWordsMsg);
pluckAppProxy.fadeIn($(".pluck-comm-submit-badword-error", form));
}
}
});
}
return false;
});
$(".pluck-comm-submit", $(formId)).click(function() {
$(formId).submit();
return false;
});
$(".pluck-comm-cancel", $(formId)).click(function() {
var reply = $(formId).parents(".pluck-comm-comment-input").eq(0);
pluckAppProxy.fadeOut(reply);
pluckAppProxy.pluck_comments_submit_current = "";
$('.pluck-error-message, .pluck-confirm-message', reply).hide();
return false;
});
if ($.support.boxModel) {
var top = $(formId).parents(".pluck-comm-comment-input").eq(0);
if (top.hasClass("pluck-comm-reply-input")) {
$('.pluck-comm-input-rounded-wrap', top).corner({ tl: { radius: 5 }, tr: { radius: 5 }, bl: { radius: 5}, br: {radius: 5}, antiAlias: true, autoPad: false, validTags: ["div"] });
} else {
if (top.hasClass("pluck-comm-no-comments")) {
top.corner({ tl: { radius: 4 }, tr: { radius: 4 }, bl: { radius: 4} , br: { radius: 4 }, antiAlias: true, autoPad: false, validTags: ["div"] });
} else {
top.corner({ tl: { radius: 4 }, tr: { radius: 4 }, bl: false, br: false, antiAlias: true, autoPad: false, validTags: ["div"] });
}
$('.pluck-comm-input-rounded-wrap', top).corner({ tl: { radius: 4 }, tr: { radius: 4 }, bl: false, br: false, antiAlias: true, autoPad: false, validTags: ["div"] });
}
}
/* Load the Facebook 1.0 proxies */
if ($('.pluck-comm-facebook-option', $(formId)).length != 0)
pluckAppProxy.loadLibrary(pluckAppProxy.baseUrl + "Direct/FacebookProxy", function(){
// Init the facebook proxy now in the background so it doesn't hold up posting the comment.
// Race condition where callback tries to run before loaded script has actually been executed. When in doubt, setTimeout.
window.setTimeout(function(){
if(window.slFB) slFB.init();
}, 100);
});
}
};
})(dmJQuery);