// Main (base function)
// ================================================
// Takes in data obj, an element to append to, and utility functions
//
var baseMain = (function(){
'use strict'
return newMain;
function newMain(d, cid, fns, bfns){ return new Main(d, cid, fns, bfns); }
function Main(d, cid, fns, bfns){
var template = new Template(fns.core.isAdmin),
events = new EventManager,
e = getElementFromString(template.index, d),
tt,
ele = null;
setTimeout(function(){
ele = new Elements(e, getElesObj(d, e));
tt = new Tooltip(e.querySelector('.budget'), template.tooltip, {
'showOnFocus' : true,
'onShow' : function() {
updateBudgetTooltip(d.budget || d.impBudget, d.budgetType !== "credits");
}
});
if(!!ele.notes){
events.add(ele.notes, 'change', updateNotes);
}
if(!!ele.budgetType){
ele.btToggle = new ToggleInput(ele.budgetType, updateBudgetType, {
"trueLabel" : "Dollars",
"falseLabel" : "Impressions",
"transition" : "linearBlink",
"initialValue" : core.brand.name !== 'Sito Mobile' && d.budgetType === "credits"
});
}
events.add(e.querySelector('.campaignName'), 'change', updateCampaignName);
if(!!ele.budgetInput){
events.add(ele.budgetInput, 'change', updateBudget);
events.add(ele.budgetInput, 'keyup', function() {
setBudget(ele.budgetInput.value);
});
} else {
console.error("The fuck is going on here?")
}
}, 0);
this.getE = function(){ return e; };
this.exit = function(){
if(!!tt) tt.exit();
if(!!events) events.reset();
if(!!ele) ele.exit();
events = e = ele = tt = null;
};
function updateStatus(e){
d.active = e;
if(e && d.archived && ele != null) ele.status.unset();
fns.refreshSidePanel();
}
function updateArchived(e){
d.archived = e;
if(e && d.active && ele != null) ele.status.unset();
}
function updateCampaignName(e){ d.name = e.target.value; fns.refreshSidePanel(); }
function updateNotes(e){ d.notes = e.target.value; fns.refreshSidePanel(); }
function updateOpti(e){ d.optBucket = e; fns.refreshSidePanel(); }
function updateBudget(e){
var v = getBudgetValue(e.target, fns);
if(v == null) {
e.target.value = '';
return
}
setBudget(v);
fns.refreshSidePanel();
ga('send', 'event', 'Manage Campaign', 'Set campaign budget', v);
}
function setBudget(v){
switch(d.budgetType){
case "credits":
d.budget = v;
tt.resume();
updateBudgetTooltip(v);
break;
case "impressions":
d.impBudget = v;
tt.resume();
updateBudgetTooltip(v, true);
break;
}
}
function updateBudgetTooltip(v, imps) {
var n = getSchedNumDays();
tt.update({
"daily" : (imps ? '' : '$') + v,
"weekly" : (imps ? '' : '$') + (v * 7).toFixed(2),
"monthly" : (imps ? '' : '$') + (v * 30).toFixed(2),
"flight" : n ? (imps ? '' : '$') + (v * n).toFixed(2) : "N/A"
});
}
function updateBudgetType(v) {
if(!v) {
d.budgetType = "impressions";
ele.budgetInput.value = d.impBudget;
tt.resume()
d.budget = 0;
updateBudgetTooltip(d.impBudget, true);
return;
}
d.budgetType = "credits";
ele.budgetInput.value = d.budget;
d.impBudget = 0;
tt.resume()
updateBudgetTooltip(v);
}
function getSchedNumDays() {
var s = d.start,
e = d.end;
return Math.ceil((e-s) / 60 / 60 / 24);
}
function getElesObj(d, e){
var o = {
'archive': fns.core.isAdmin ? {
'target' : new ToggleInput(e.querySelector('.archiveToggle'), updateArchived, {
'initialValue' : !!d.archived
})
} : {},
'status' : {
'target' : new ToggleInput(e.querySelector('.statusToggle'), updateStatus, {
'initialValue' : d.active === true && !d.archived
})
},
'notes' : { 'selector' : '.notes' },
'budgetType' : { 'selector' : '.budgetType' },
'btToggle' : {},
'budgetInput' : { 'selector' : '.budget' }
};
if(d.isAdmin && !!cid) {
o.archived = {
'target' : new ToggleInput(e.querySelector('.archiveToggle'), updateArchived, {
'initialValue' : d.archived === true
})
};
}
o.schedule = { 'target' : new Schedule(d, e) };
return o;
}
}
function Template(isAdmin){
var achv = isAdmin ? 'Archived:
Status:
Campaign Name:
Notes:
' + notesTa + 'Budget type:
Daily Budget:
' + bdgtIpt + 'Schedule:
Start Date:
End Date: