var ajaxSubscription = new Class({
Implements: [Options, Events],
options:{
'objectId': null,
'parentId':null,
'defaultFrequency': 'instant',
'userFrequency': null,
'type': 'inline',
'elements': null,
'isSubscribed': false,
'triggerAddId': null,
'triggerDeleteId': null,
'userFrequencyId': null,
'statId': null
},
initialize:function(trigger, options){
var self = this;
// set the options
self.setOptions(options || {});
// Mandatory
self.elements = {};
self.elements.subscriptionActionElem = $(trigger);
// Optional - Page Elements
self.elements.triggerAddElem = null;
if (self.options.triggerAddId != null) {
self.elements.triggerAddElem = $(self.options.triggerAddId);
}
self.elements.triggerDeleteElem = null;
if (self.options.triggerDeleteId != null) {
self.elements.triggerDeleteElem = $(self.options.triggerDeleteId);
}
self.elements.userFrequencyElem = null;
if (self.options.userFrequencyId != null) {
self.elements.userFrequencyElem = $(self.options.userFrequencyId);
}
// Optional - Statistics
self.elements.statElem = null;
if (self.options.statId != null) {
self.elements.statElem = $(self.options.statId);
} else {
self.elements.statElem = $("js-stats-followers");
self.options.statId = "js-stats-followers";
}
if (self.elements.statElem) {
self.elements.statNum = -1;
self.elements.statNumElem = null;
self.elements.statTextElem = null;
if ($$("#" + self.options.statId + " .js-stat").length && $$("#" + self.options.statId + " .js-type").length) {
self.elements.statNumElem = $$("#" + self.options.statId + " .js-stat")[0];
self.elements.statTextElem = $$("#" + self.options.statId + " .js-type")[0];
if (typeOf(parseInt(self.elements.statNumElem.get('html'))) == "number") {
self.elements.statNum = parseInt(self.elements.statNumElem.get('html'));
}
}
}
// Request (Add/Update/Delete)
window.addEvent('subscriptionRequest' + self.options.objectId, function(){
self.eventSubscriptionRequest( self );
});
// Success (Add/Update)
window.addEvent('subscriptionSuccess' + self.options.objectId, function( returned_frequency ){
self.eventSubscriptionSuccess( self, returned_frequency );
});
// Failure (Add/Update)
window.addEvent('subscriptionFailure' + self.options.objectId, function(){
self.eventSubscriptionFailure( self );
});
// Success (Delete)
window.addEvent('subscriptionDeleteSuccess' + self.options.objectId, function(){
self.eventSubscriptionDeleteSuccess( self );
});
// Failure (Delete)
window.addEvent('subscriptionDeleteFailure' + self.options.objectId, function(){
self.eventSubscriptionDeleteFailure( self );
});
// Add Subscription Behavior
if (self.elements.triggerAddElem) {
self.elements.triggerAddElem.addEvent('click',function( event ){ // One Way (Add / Update)
event.stop();
if (self.options.triggerAddId != self.options.triggerDeleteId || !self.options.isSubscribed) {
self.options.userFrequency = self.options.defaultFrequency;
if (self.elements.userFrequencyElem) {
self.options.userFrequency = self.elements.userFrequencyElem.value;
}
self.addSubscription();
}
});
}
// Delete Subscription Behavior
if (self.elements.triggerDeleteElem) {
self.elements.triggerDeleteElem.addEvent('click',function( event ){ // One Way (Delete)
event.stop();
if (self.options.triggerDeleteId != self.options.triggerAddId || self.options.isSubscribed) {
self.deleteSubscription();
}
});
}
// Quick Subscribe Event (Add / Update) - triggered by leaving a comment
window.addEvent('quickSubscribeToObject' + self.options.objectId, function(){
if (!self.options.isSubscribed) {
self.options.userFrequency = self.options.defaultFrequency;
self.addSubscription();
}
});
},
addSubscription:function(){
var self = this;
//========================= AJAX - ADD SUBSCRIPTION =============================
var addSubscriptionViaAjax = new ApiClient({
'headers':{'Accept': 'application/xml'},
'apimethod':'account/subscriptions/' + ( self.options.isSubscribed ? 'update' : 'add' ),
'queryparams':{
'paramList':'objectId,parentId,frequency',
'paramTypes':'id,id,string'
},
'postdata':{
'objectId':self.options.objectId,
'parentId':self.options.parentId,
'frequency':self.options.userFrequency
},
onRequest:function(instance){
window.fireEvent( "subscriptionRequest" + self.options.objectId );
},
onSuccess:function(text,xml){
window.fireEvent( "subscriptionSuccess" + self.options.objectId, xml.getElementsByTagName('response')[0].getElementsByTagName('frequency')[0].firstChild.nodeValue.toLowerCase() );
},
onFailure:function(instance){
// Handle Exceptions
if(this.status != null) {
if (this.status == "404") { // Object is gone - refresh the page and behold
document.location = document.location.toString().split('#')[0];
} else if (this.status == "403") { // Object is permed - refresh the page and behold
document.location = document.location.toString().split('#')[0];
} else if (this.status == "422") { // Subscription already exists
window.fireEvent( "subscriptionSuccess", null );
} else {
window.fireEvent( "subscriptionFailure" + self.options.objectId );
}
} else {
window.fireEvent( "subscriptionFailure" + self.options.objectId );
}
}
});
},
deleteSubscription:function(){
var self = this;
//========================= AJAX - DELETE SUBSCRIPTION =============================
var deleteSubscriptionViaAjax = new ApiClient({
'headers':{'Accept': 'application/xml'},
'apimethod':'account/subscriptions/delete',
'queryparams':{
'paramList':'objectId,parentId',
'paramTypes':'id,id'
},
'postdata':{
'objectId':self.options.objectId,
'parentId':self.options.parentId
},
onRequest:function(){
window.fireEvent( "subscriptionRequest" + self.options.objectId );
},
onSuccess:function(){
window.fireEvent( "subscriptionDeleteSuccess" + self.options.objectId );
},
onFailure:function(){
// Handle Exceptions
if (this.status != null) {
if (this.status == "404") { // Already unsubscribed - Do the same as "onSuccess"
window.fireEvent( "subscriptionDeleteSuccess" + self.options.objectId );
} else if (this.status == "403") { // User signed out! - refresh the page and behold
document.location = document.location.toString().split('#')[0];
} else {
window.fireEvent( "subscriptionDeleteFailure" + self.options.objectId );
}
} else {
window.fireEvent( "subscriptionDeleteFailure" + self.options.objectId );
}
}
});
},
// Request (Add/Update/Delete)
eventSubscriptionRequest:function( self ){
switch( self.options.type ){
// Magic Box component
case "inline":
self.elements.subscriptionActionElem.getParent().removeClass("ig-active");
self.elements.subscriptionActionElem.set("html"," ");
break;
// Trailer component
case "trailer" :
self.elements.subscriptionActionElem.addClass("icon-loading");
break;
}
},
// Success (Add/Update)
eventSubscriptionSuccess:function( self, returned_frequency ){
if (!self.options.isSubscribed) {
var count_increment = 1;
} else {
var count_increment = 0;
}
self.options.isSubscribed = true;
if (returned_frequency != null) {
self.options.userFrequency = returned_frequency;
}
switch( self.options.type ){
// Magic Box component
case "inline" :
// Update the action element
self.elements.subscriptionActionElem.set("html","" + window.translations('comps-trail-Subscribed') + "")
self.elements.subscriptionActionElem.getParent().addClass("ig-active");
// Update the statistics module if exists
if (self.elements.statNumElem != null && self.elements.statNum > -1) {
self.elements.statNum = self.elements.statNum + count_increment;
self.elements.statNumElem.set("html",self.elements.statNum);
if (self.elements.statTextElem != null) {
if (self.elements.statNum == 1) {
self.elements.statTextElem.set("html",window.translations('comps-stats-follower'));
} else {
self.elements.statTextElem.set("html",window.translations('comps-stats-followers'));
}
}
}
break;
// Trailer component
case "trailer" :
// Update the Trailer trigger
self.elements.subscriptionActionElem.removeClass("icon-loading");
self.elements.subscriptionActionElem.removeClass("icon-notify");
self.elements.subscriptionActionElem.addClass("icon-notify-active");
self.elements.subscriptionActionElem.set("html",window.translations('comps-trail-Subscribed'));
// Update the frequency to what the user has chosen if exists
if (self.elements.userFrequencyElem) {
self.elements.userFrequencyElem.value = self.options.userFrequency;
}
// Show trailer bar Unsubscribe link if exists
if (self.elements.triggerDeleteElem) {
self.elements.triggerDeleteElem.removeClass("hide");
}
break;
}
},
// Failure (Add/Update)
eventSubscriptionFailure:function( self ){
switch( self.options.type ){
// Magic Box component
case "inline" :
self.elements.subscriptionActionElem.getParent().removeClass("ig-active");
self.elements.subscriptionActionElem.set("html", "" + window.translations('comps-trail-Subscribe') + "")
break;
// Trailer component
case "trailer" :
self.elements.subscriptionActionElem.removeClass("icon-loading");
break;
}
},
// Success (Delete)
eventSubscriptionDeleteSuccess:function( self ){
self.options.isSubscribed = false;
switch( self.options.type ){
// Magic Box component
case "inline" :
// Update the action element
self.elements.subscriptionActionElem.set("html","" + window.translations('comps-trail-Subscribe')+ "")
self.elements.subscriptionActionElem.getParent().removeClass("ig-active");
// Update the statistics module if exists
if (self.elements.statNumElem != null && self.elements.statNum > -1) {
self.elements.statNum--;
self.elements.statNumElem.set("html",self.elements.statNum);
if (self.elements.statTextElem != null) {
if (self.elements.statNum == 1) {
self.elements.statTextElem.set("html",window.translations('comps-stats-follower'));
} else {
self.elements.statTextElem.set("html",window.translations('comps-stats-followers'));
}
}
}
break;
// Trailer component
case "trailer" :
// Update the Trailer trigger
self.elements.subscriptionActionElem.removeClass("icon-loading");
self.elements.subscriptionActionElem.removeClass("icon-notify-active");
self.elements.subscriptionActionElem.addClass("icon-notify");
self.elements.subscriptionActionElem.set("html",window.translations('comps-trail-Subscribe'));
// Reset the frequency back to default if exists
if (self.elements.userFrequencyElem) {
self.elements.userFrequencyElem.value = self.options.defaultFrequency;
}
// Hide trailer bar Unsubscribe link if exists
if (self.elements.triggerDeleteElem) {
self.elements.triggerDeleteElem.addClass("hide");
}
break;
}
},
// Failure (Delete)
eventSubscriptionDeleteFailure:function( self ){
switch( self.options.type ){
// Magic Box component
case "inline" :
self.elements.subscriptionActionElem.set("html", "" + window.translations('comps-trail-Unsubscribe') + "")
break;
// Trailer component
case "trailer" :
self.elements.subscriptionActionElem.removeClass("icon-loading");
break;
}
}
});
window.addEvent('domready', function(){
if (Igloo && Igloo.asset_ajax_subscriptions) {
var subscriptionLink;
Object.each(Igloo.asset_ajax_subscriptions, function(object, id){
subscriptionLink = new ajaxSubscription(id, object);
});
}
});
function applyAjaxEmaillink(elements){
elements.each(function(elem){
if (elem.dataobj){
var dataobj = JSON.decode(elem.dataobj) || elem.dataobj;
if(dataobj.emaillink){
elem.submit = function(){
var theform = elem;
var emailbutton = theform.getElements('.emailbutton')[0];
if ($('emailresponsediv')) {
$('emailresponsediv').destroy();
}
// Mandatory
var tofield = theform['to-email-address'];
var fromfield = theform['from-email-address'];
var subjectfield = theform['email-subject'];
var messagefield = theform['email-message'];
var pathfield = theform['path'];
var pathnamefield = theform['pathname'];
var to = tofield.value;
var from = fromfield.value;
var subject = subjectfield.value;
var message = messagefield.value;
var path = pathfield.value;
var pathname = pathnamefield.value;
var spinner = new Element('div',{'class':'ig-loader-small ig-normalmarginleft ig-smallmargintop ig-left'});
var emaillinkajax = new ApiClient({
'apimethod':'email/link',
'postdata':{
'to':to,
'fromAddress':from,
'fromName':from,
'subject':subject,
'message':message,
'path':path,
'pathname':pathname
},
onRequest:function(){
emailbutton.disabled = true;
emailbutton.getParent().adopt(spinner);
},
onSuccess:function(){
spinner.dispose();
var returnstring = this.response.text;
var returnjson = JSON.decode(returnstring,true);
if(returnjson != null){
emailbutton.disabled = false;
var emailresponsediv = new Element('div',{'id':'emailresponsediv','class':'ig-alert-info ig-normalmargintop ig-nomarginbottom'}).set('html',window.translations('media-js-success_message_sent')).inject(theform,'bottom');
theform.getParent('.panel').setStyles({'height':'auto'});
}else{
// what did return was not JSON.
emailbutton.disabled = false;
var emailresponsediv = new Element('div',{'id':'emailresponsediv','class':'ig-alert-error ig-normalmargintop ig-nomarginbottom'}).set('html',window.translations('media-js-your_message_could_not_be_delivered')).inject(theform,'bottom');
theform.getParent('.panel').setStyles({'height':'auto'});
return false;
}
activePanel.getChildren(0).getChildren(0)[0].fireEvent('submitcompleted'); // send confirmation to the validator...
},
onFailure:function(){
spinner.dispose();
emailbutton.disabled = false;
var emailresponsediv = new Element('div',{'id':'emailresponsediv','class':'ig-alert-error ig-normalmargintop ig-nomarginbottom'}).set('html',window.translations('media-js-your_message_could_not_be_delivered')).inject(theform,'bottom');
theform.getParent('.panel').setStyles({'height':'auto'});
return false;
}
});
return false;
};
}
}
});
}
window.addEvent('domready', function(){
// apply email behaviour to the form
if (Igloo && Igloo.asset_emaillink) {
var elements = [];
Object.each(Igloo.asset_emaillink, function(object, id){
var elem = $(id);
if (elem) {
if(!elem.dataobj || typeOf(elem.dataobj)!='hash'){
elem.dataobj = new Hash(elem.dataobj || object);
}
elem.dataobj.combine(object);
elements.push(elem);
}
});
applyAjaxEmaillink(elements);
}
});
window.addEvent('bootstrap4finished', function(){
// apply email behaviour to the form
var elements = window.dependents['emaillink'] || [];//$$('.js');
applyAjaxEmaillink(elements);
});
window.addEvent('domready', function(){
if (Igloo && Igloo.asset_ajax_broadcast){
Object.each(Igloo.asset_ajax_broadcast, function(options, id){
var theForm = $(id);
if (theForm){
var subButtons = new Elements();
subButtons = $(theForm).getElements('input[type=submit]');
theForm.addEvent('submit', function() {
Array.each(subButtons, function(buttonElem) {
$(buttonElem).addClass('ig-button_disabled');
$(buttonElem).set('disabled', 'disabled');
});
});
theForm.addEvent('onformvalidation', function(returnVal) {
if (!returnVal) {
enableButtons(subButtons);
}
});
theForm.addClass('noDisableOnSubmit');
theForm.addEvent('onvalidformsubmit', function(){
var userToArr = [];
theForm.getElements('input[type=checkbox]:checked').each(function(box){
userToArr.push(box.value);
});
var userTo = userToArr.join(',');
var messageType = 3; // Broadcast type
var sub = theForm.elements['subject'].value;
// Check to see if mobile
if (theForm.getElementById('broadcastbody').hasClass('js-tinymce')) {
var currEditor = tinymce.get('broadcastbody');
var bod = currEditor.getContent();
} else {
var currEditor = theForm.getElementById('broadcastbody');
var bod = currEditor.value;
}
var bodyIsText = theForm.elements['bodyIsText'].value;
var linkedObj = theForm.elements['linkedObj'].value;
var messageApi = new ApiClient({
'apimethod': 'account/discussions/create',
'postdata': {
'body': bod,
'messageType': messageType,
'userTo': userTo,
'subject': sub,
'bodyIsText': bodyIsText,
'linkedObj': linkedObj
},
onComplete: function() {
enableButtons(subButtons);
},
onSuccess: function() {
theForm.fireEvent('submitcompleted'); // send confirmation to the validator...
var returnstring = this.response.text;
var returnjson = JSON.decode(returnstring, true);
if(returnjson != null){
theForm.reset();
alert( window.translations('media-js-success_message_sent') );
}else{
alert( window.translations('media-js-your_message_could_not_be_delivered') );
}
},
onFailure: function() {
alert( window.translations('media-js-your_message_could_not_be_delivered') );
}
});
return false;
});
}
if (Igloo && ! Igloo.broadcastEditors) {
Igloo.broadcastEditors = [];
}
window.addEvent('accordianOpened', function(triggerElem) {
if (triggerElem.id.toString() === "notify") {
if (!Igloo.broadcastGroupListAcquired) {
getGroupList(options.groupDivId, options.submitId, options.objectid);
}
}
});
});
var enableButtons = function(buttons) {
Array.each(buttons, function(buttonElem) {
$(buttonElem).removeClass('ig-button_disabled');
$(buttonElem).removeProperty('disabled');
});
}
}
});
var getGroupList = function(groupListDivId, submitId, objectid) {
var getViaAjax = new ApiClient({
'headers': {
'Accept': 'application/xml'
},
'method': 'post',
'apimethod': 'igloo/widgets/rendercomponent',
'queryparams': {
'paramList': 'objectId',
'paramTypes': 'id'
},
'postdata': {
'objectId': objectid,
'componentName': 'broadcastGrouplist'
},
onComplete: function() {
var groupListDiv = $(groupListDivId)
if (groupListDiv) {
if (groupListDiv.getChildren('.ig-spinny')) {
Array.each(groupListDiv.getChildren('.ig-spinny'), function(spinner) {
spinner.addClass('hide');
});
}
if (groupListDiv.getPrevious() && groupListDiv.getPrevious().getChildren('.ig-spinny')) {
Array.each(groupListDiv.getPrevious().getChildren('.ig-spinny'), function(spinner) {
spinner.addClass('hide');
});
}
}
// enable the submit button
var submitButton = $(submitId);
if (submitButton) {
submitButton.removeClass('ig-button_disabled');
submitButton.removeProperty('disabled');
}
},
onSuccess: function(text, xml) {
var response = Utils.IARParse(xml);
groupListDiv = $(groupListDivId);
groupListDiv.set('html', response.apihtml);
bootstrap(groupListDiv);
Igloo.broadcastGroupListAcquired = true;
},
onFailure: function() {
// put a message here.
groupListDiv.set('html', window.translations('media-js-api_error'));
}
});
}
window.addEvent('domready', function(){
// apply modal behaviour to the links
if (Igloo && Igloo.asset_modalapp) {
var elements = [],
elem;
Object.each(Igloo.asset_modalapp, function(object, id){
elem = $(id);
if( elem ){
if(!elem.dataobj || typeOf(elem.dataobj)!='hash'){
elem.dataobj = new Hash(elem.dataobj || object);
}
elem.dataobj.combine(object);
elements.push(elem);
}
});
applyMessage(elements);
}
});
function applyMessage(elements){
if(!elements){return;}
elements.each(function(elem){
if (elem.dataobj){
var dataobj = elem.dataobj;
if(dataobj.modalapp){
if (dataobj.modalapp.sendmessage){
elem.addEvent('click',function(event){
event.preventDefault();
var dataobj = elem.dataobj;
toadopt = dataobj.modalapp.sendmessage.formelem;
toadoptElem = $(toadopt);
var messagemodal = new Modalbox({
'width':450,
'draggable':false,
'title':window.translations('media-js-send_a_feedback'),
'adoptclone':toadoptElem,
'onOpen':function(){
modalsendmessage(this.mymodal);
if(dataobj.modalapp.sendmessage.preselect){
for(var eee=0;eee
' + window.translations('media-js-your_message_could_not_be_delivered') + '
'); } }); // only submit the form when it's valid theform.addEvent('onvalidformsubmit', function(){ sendMsgRequest.send( theform.toQueryString() ); }); } window.addEvent('domready', function(){ if( Igloo && Igloo.asset_linkedinlink ){ var elem; Object.each(Igloo.asset_linkedinlink, function(object, id){ elem = $(id); if( elem ){ liJs = new Element("script", { src: parent.location.protocol + "//platform.linkedin.com/in.js", type: "text/javascript" }); liJs.inject($(elem.id), "before"); elem.addEvent('click', function(event){ IN.UI.Share().params({ url: document.URL }).place() return false; }); } }); } }); window.addEvent('domready', function(){ if( Igloo && Igloo.asset_twitterlink ){ var elem; Object.each(Igloo.asset_twitterlink, function(object, id){ elem = $(id); if( elem ){ elem.addEvent('click', function(event){ event.preventDefault(); // get a bitly from the API var twitapi = new ApiClient({ 'apimethod': 'igloo/shorten', 'method': 'get', 'queryparams':{ 'longUrl':document.location.href }, 'onRequest':function(){ // put a spinner here or something }, 'onSuccess':function(txt){ var json = JSON.decode(txt,true); var shorturl = json.response.items[0].value; // var shorturl = "http://bit.ly?weryerure"; var twittermaxlength = 140; var message = document.title.ellipsize(twittermaxlength - shorturl.length - 1)+' '+shorturl; var twitterurl = 'http://twitter.com/home?status=' + encodeURIComponent(message); var winname = twitterurl; winname = winname.replace(/\//g,''); winname = winname.replace(/\./g,''); winname = winname.replace(/:/g,''); //window.open(twitterurl,winname); // this triggers popup blockers in a big way document.location.href = twitterurl; return false; }, 'onFailure':function(){ var twitterurl = 'http://twitter.com/'; var winname = twitterurl; winname = winname.replace(/\//g,''); winname = winname.replace(/\./g,''); winname = winname.replace(/:/g,''); //window.open(twitterurl,winname); // this triggers popup blockers in a big way document.location.href = twitterurl; return false; } }); }); } }); } });