var Managers = function(core, target, data, returnCB){
var events = new EventManager,
template = new Template(),
element = getElementFromString(render(template.index, null)),
elements = null,
data = null;
this.exit = exit;
new ApiManager({ 'managersList' : null }, null, init);
function Manager(o, i){
this.id = isDefined(o.id) ? o.id : null;
this.name = isDefined(o.name) ? o.name : '[Not set]';
}
function Template(){
var header = '',
edit = 'Edit',
del = '',
manageRow = '
Manage Managers
' + edit + del + ' ',
manageTable = '';
this.index = '' + header + manageRow + manageTable + '
';
this.fresh = 'Oh no! It appears that we have no managers here. We should add some. Try it out - it\'s simple!
';
}
function init(error, d){
data = getDataObj(d);
initHeader();
setElements();
if(!error && !!d && !!d.managersList && d.managersList.length > 0) initTable();
else initFresh();
setButtons(getSimpleJSONCopy(clientsButtonObj));
if(returnCB) returnCB();
insertElement();
}
function initHeader(){ var h = element.querySelector('header'); events.add(h.querySelector('a'), 'click', popAnchor); }
function initTable(){
elements.actions = element.querySelector('actions');
data.table.rows.sort(function(a, b) { return parseInt(a.id) < parseInt(b.id) ? -1 : 1; });
elements.table = NewMTable(element.querySelector('.manageTable'), data.table, tableUpdate); tableUpdate();
}
function initFresh(){ elements.fresh = getElementFromString(template.fresh); hideManage(); data.table.rows = []; element.appendChild(elements.fresh); }
function insertElement(){ target.appendChild(element); }
function getDataObj(o){ var d = getSimpleJSONCopy(AgencyTemplateData); d.table.rows = getManagerList(o.managersList); return d; }
function getManagerList(d){
var a = [];
forEach(d, p);
return a;
function p(t, d, i){ a.push(new Manager(t, i)); }
}
function setElements(){
elements = new Elements(element, {
'edit' : { 'selector' : '.editButton' },
'del' : {}, 'fresh' : {}, 'table' : {}, 'actions' : {}, 'rows' : {}
});
}
function setButtons(buttonsObj){
elements.del = new ConfirmationButton(element.querySelector('.del'), buttonsObj.del, delAction);
events.add(elements.edit, 'click', editAction);
}
function hideManage(){ element.querySelector('.manageRow').classList.add('noDisplay'); }
function delAction(e){ if(e && e.preventDefault) e.preventDefault(); new ApiDelete(data, elements.table.getSelectedRows(), 'managers', core.userID, updateActionCB); }
function refreshTable(){ if(elements.table) elements.table.exit(); initTable(); }
function tableUpdate(){
var l = elements.table.getSelectedRows().length,
t = elements.actions;
// Get rid of show switch
if(l == 1) showActions(); else if(l == 0) hideActions();
}
function updateActionCB(e){ updateErrorCheck(e); getManagersList(updateManagersList); }
function updateErrorCheck(e){
for(var k in e){
if(isDefined(e[k]) && isDefined(e[k].error)){
new core.notifications.setError(e[k].error);
return true;
}
}
}
function editAction(e){
if(e && e.preventDefault) e.preventDefault();
pop('Pop!', 'Managers - Edit', '/dashboard/managers/edit/' + getSelectedRowId());
}
function getSelectedRowId(){ return elements.table.getSelectedRows()[0].getData().id; }
function getManagersList(cb){ new ApiManager({ 'managersList' : null }, null, cb); }
function updateManagersList(e, o){ data = getDataObj(o); refreshTable(); }
function hideActions(){ elements.actions.classList.add('noDisplay'); }
function showActions(){ elements.actions.classList.remove('noDisplay'); }
function exit(){ if(element) removeChild(target, element); if(events) events.reset(); if(elements) elements.exit(); housekeeping(); }
function housekeeping(){ core = target = data = returnCB = events = template = element = data = elements = null; }
};