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);