var wchart_filter = function(r){
    var wdl = r.wd.link.join(',')
    var wdr = r.wd.read.join(',')
    var chd = 't:' + wdr + '|' + wdl;
    var max = 0;
    for(var i=0;i<r.wd.read.length;i++){
	var cm = r.wd.link[i] + r.wd.read[i];
	if(cm > max){
	    max = cm;
	}
    }
    r.wchart = 'http://chart.apis.google.com/chart?cht=bhs&chco=92ADC9,C4D2E1&chs=300x230&chxt=x,y&chxl=1:|Sunday|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|&chxs=0,,10,0,lt|1,,12,1,lt&chdl=Reads|Clicks&chdlp=t&chma=80,10,10,10|0,0&chd=' + chd + '&chds=0,' + max + '&chxr=0,0,' + max;
//    r.wchart = chd;
    return r;
}
var actions_filter = function(r){
    timestamp = r.ts;
    for(var i=0;i<r.actions.length;i++){
	var a = r.actions[i];
	r.actions[i][10] = a[1];
	a[1] = time_past(a[1], r.ts);
	if(a[3] == ''){
	    a[3] = a[2];
	}
	if(a[0] == 3){
	    var s = 'Message <a href="#messages/' + a[4] + '">' + a[5] + '</a> to';
	    var t = '<b title="' + a[2] + '">' + a[3] + '</b> bounced';
	}else{
	    var s = '<b title="' + a[2] + '">' + a[3] + '</b> ';
	    if(a[0] == 1){
		s += 'visited';
		var t = '<a href="' + a[4] + '">' + a[4].replace(new RegExp('https?\\:\\/\\/w*\\.?', 'g'), '') + '</a>';
	    }else if(a[0] == 2){
		s += 'unsubscribed from';
		var t = '<a href="#lists/' + a[4] + '">' + a[5] + '</a>';
	    }else if(a[0] == 4){
		s += 'read';
		var t = 'Message <a href="#messages/' + a[4] + '">' + a[5] + '</a>';
	    }else if(a[0] == 5){
		s += 'subscribed to';
		var t = '<a href="#lists/' + a[4] + '">' + a[5] + '</a>';
	    }
	}
	var an = {1: 'link', 2: 'unsubscribe', 3: 'bounce', 4: 'read', 5: 'subscribe'};
	r.actions[i][0] = an[a[0]];
	r.actions[i][2] = s;
	r.actions[i][3] = t;
    }
    return r;
};
var stats_filter = function(r){
    var rec = r.stats;
//    var readp = Math.round(rec.read / rec.total * 100)
//    var bouncedp = Math.round(rec.bounced / rec.total * 100)
//    var unsubp = Math.round(rec.unsubscribed / rec.total * 100)
    var readp = Math.round(rec.read / rec.sent * 100)
    var bouncedp = Math.round(rec.bounced / rec.sent * 100)
    var unsubp = Math.round(rec.unsubscribed / rec.sent * 100)
    var sentp = 100 - readp - bouncedp - unsubp;
    r.chartvals = readp + ',' + bouncedp + ',' + unsubp + ',' + sentp;
    r.chartkeys = 'Read (' + readp + '%)|Bounced (' + bouncedp + '%)|Unsubscribed (' + unsubp + '%)|Sent';
    r.traffic = nice_size(r.traffic);
    r.stats.sent = nice_number(r.stats.sent);
    r.stats.read = nice_number(r.stats.read);
    r.stats.bounced = nice_number(r.stats.bounced);
    r.stats.unsubscribed = nice_number(r.stats.unsubscribed);
    r.visitors = nice_number(r.visitors);
    r.linkhits = nice_number(r.linkhits);
    return r;
};
var templates = [
    [
	'stats',
	/stats\/\d+$/,
	jsontemplate.Template('<h3>{category.name}</h3>' +
	    '<div style="float: left;">Successfully sent <span style="font-size: 16px;"><b>{stats.sent}</b></span> emails ({traffic}) in <b>{stats.campaigns}</b> campaigns.<br /><b>{stats.read}</b> read,<br /><b>{stats.bounced}</b> bounced,<br /><b>{subscribers}</b> subscribed,<br /><b>{stats.unsubscribed}</b> unsubscribed, <br /><b>{visitors}</b> visitors, <br /><b>{linkhits}</b> clicks.</div>' +
	    '<img style="float: right;" src="http://chart.apis.google.com/chart?cht=p&chp=50&chs=370x150&chd=t:{chartvals}&chl={chartkeys}&chco=00FF00,FFFF00,FF0000,92ADC9" />' +
	    '<div style="clear: both;"></div>'),
	null,
	stats_filter
    ],[
	'home',
	/home/,
	jsontemplate.Template('<h3>Home</h3>' + 
	    '<p><b>{subscribers}</b> users subscribed.</p>' +
	    '<div style=""><label for="campaignfilter">Campaign: </label> <select id="campaignfilter" onchange="filterCampaign();"><option value="0">All</option>{.repeated section campaigns}<option value="{0}"{.section selected} selected="selected"{.end}>{1}</option>{.end}</select></div>' +
	    '<div style="float: left;">Successfully sent <span style="font-size: 16px;"><b>{stats.sent}</b></span> emails ({traffic}).<br /><b>{stats.read}</b> read,<br /><b>{stats.bounced}</b> bounced,<br /><b>{stats.unsubscribed}</b> unsubscribed, <br /><b>{visitors}</b> visitors, <br /><b>{linkhits}</b> clicks.</div>' +
	    '<img style="float: right;" src="http://chart.apis.google.com/chart?cht=p&chp=50&chs=370x150&chd=t:{chartvals}&chl={chartkeys}&chco=00FF00,FFFF00,FF0000,92ADC9" />' +
	    '<div style="clear: both;"></div>' +
	    '<div class="toggle">' +
	    '<div onclick="filterHome(\'link\');" class="link left"><span>Visits</span></div>' + 
	    '<div onclick="filterHome(\'read\');" class="read"><span>Reads</span></div>' +
	    '<div onclick="filterHome(\'subscribe\');" class="subscribe"><span>Subscriptions</span></div>' +
	    '<div onclick="filterHome(\'unsubscribe\');" class="unsubscribe"><span>Unsubscriptions</span></div>' +
	    '<div onclick="filterHome(\'bounce\');" class="bounce right"><span>Bounces</span></div>' +
	    '</div><div style="clear: both;"></div>' +
	    '<table class="activity links" style="float: left; margin-bottom: 10px;">{.repeated section actions}<tr><td class="item {0}">{2} <span class="tp" title="{10}" style="float: right;">{1}</span><br />{3}</td></tr>{.end}</table>' + 
	    '<div style="float:right;"><img src="{wchart}" /></div>' +

	    '<div style="clear: both;"></div>'),
	null,
	function(r){
	    r.subscribers = nice_number(r.subscribers);
	    return stats_filter(actions_filter(wchart_filter(r)));
	},
	function(r){
	    filterHome();
	}
    ],[
	'admin',
	/admin$/,
	jsontemplate.Template('<h3>Admin</h3><a class="ic-users-32 icbb" href="#admin/users">Users</a>')
    ],[
	'admin-users',
	/admin\/users(\/\d+)?/,
	jsontemplate.Template('<h3>Admin - Users</h3>' + 
	    '<table><tr><th>Id</th><th>Username</th><th>Email</th><th>Name</th><th>Last seen</th><th>Actions</th></tr>{.repeated section records}<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td><a href="javascript:deleteUser({0});" class="icc ic-delete">Delete</a> <a href="#admin/user/{0}" class="icc ic-pencil">Edit</a></td></tr>{.or}<tr><td>No subscribers</td></tr>{.end}</table>{.section records}{pager}{.end}</div>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-add ic" href="#admin/user/add">Add User</a></li></ul>'),
	function(r){
	    for(var i=0;i<r.records.length;i++){
		if(r.records[i][4] == null){
		    r.records[i][4] = '';
		}
	    }
	    return pager(r);
	}
    ],[
	'admin-user',
	/admin\/user\/(.+)/,
	jsontemplate.Template('<h3>Admin - {.section new}Add user{.end}</h3>' +
	    '<div class="error" id="addusererror" style="display: none;"></div>' + 
	    '<input type="hidden" id="id" value="{user.id}" /><table><tr><td><label for="username">Username: </label></td><td><input type="text" id="username" value="{user.username}" /></td></tr><tr><td><label for="password">Password: </label></td><td><input type="password" id="password" value="" /></td></tr><tr><td><label for="name">Name: </label></td><td><input type="text" id="name" value="{user.name}" /></td></tr><tr><td><label for="email">Email: </label></td><td><input type="text" id="email" value="{user.email}" /></td></tr><tr><td><label for="admin">Administrator: </label></td><td><input id="admin" type="checkbox" {user.ac}/></td></tr></table>' + 
	    ''),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-tick ic" href="javascript:saveUser();">Save User</a></li></ul>'),
	function(r){
	    if(r.user.admin){
		r.user.ac = 'checked="checked"';
	    }else{
		r.user.ac = '';
	    }
	    return r;
	}
    ],[
	'lists',
	/lists$/,
	jsontemplate.Template('<h3>Search</h3><input type="text" id="subsearchbox" onkeyup="enterSubscriberSearch(event);" /> <button onclick="subscriberSearch();">Go</button><br /><br />' + 
	    '<h3>Lists</h3><ul class="list-list">{.repeated section records}<li><h3><a id="catcontrol-{id}" href="javascript:expandCategory({id});">{categoryname}</a><a style="background: none;font-size: 14px;" href="#stats/{id}">View stats</a></h3><ul style="display: none;" id="category-{id}">{.repeated section lists}<li><a class="main" href="#lists/{id}">{name}</a><br /><a class="ic-users-16" href="#lists/{id}/subscribers">Subscribers</a><a class="ic-stats-16" href="#lists/{id}/statistics">Statistics</a></li>{.or}No Lists{.end}</ul></li>{.end}</ul>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-add ic" href="javascript:createList();">Create list</a></li></ul>')
    ],[
	'listsearch',
	/lists\/search\/(.+)$/,
	jsontemplate.Template('<h3>Search</h3><input type="text" id="subsearchbox" onkeyup="enterSubscriberSearch(event);" value="{p1}" /> <button onclick="subscriberSearch();">Go</button><br /><br />' +
	    '<h3>Results</h3><ul class="list-search">{.repeated section subscribers}<li>{name}  {email} - {.repeated section lists}<a class="icc ic-list-16" href="#lists/{id}/subscribers/1/{email}">{name}</a>{.end}</li>{.end}</ul>')
    ],[
	'messages',
	/messages$/,
	jsontemplate.Template('<h3>Messages</h3><ul class="message-list">{.repeated section records}<li><h3><a id="catcontrol-{id}" href="javascript:expandCategory({id});">{categoryname}</a><a style="background: none;font-size: 14px;" href="#stats/{id}">View stats</a></h3><ul style="display: none;" id="category-{id}">{.repeated section messages}<li><a class="main" href="#messages/{id}">{name} ({date})</a><br /><a class="ic-calendar-16" href="#messages/{id}/history">History</a><a class="ic-stats-16" href="#lists/{id}/statistics">Statistics</a></li>{.or}No messages{.end}</ul></li>{.end}</ul>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-add ic" href="javascript:createMessage();">Create message</a></li></ul>'),
	function(r){
	    for(var i=0;i<r.records.length;i++){
		for(var j=0;j<r.records[i].messages.length;j++){
		    r.records[i].messages[j].date = getDate(r.records[i].messages[j].date, "dd/mm/yyyy h TT");
		}
	    }
	    return r;
	}
    ],[
	'categories',
	/categories$/,
	jsontemplate.Template('<h3>Categories</h3>' +
	    '<table><tr><th>Name</th><th>&nbsp;</th></tr><tr><td><input type="text" id="new-category-name" /></td><td><a class="ic-add ic" href="javascript:addCategory();">Add category</a></td></tr>' + 
	    '{.repeated section categories}<tr><td>{name}</td><td><a href="javascript:deleteCategory({id});" class="ic-delete ic">Delete Category</a></td></tr>{.end}</table>')
    ],[
	'list',
	/lists\/\d+$/,
	jsontemplate.Template('<h3><a href="#lists">Lists</a><span class="sep" />{record.name}</h3>' +
	    '<fieldset><label for="list-name">List name</label>: <input type="text" id="list-name" value="{record.name}" /><br />' + 
	    '<label for="list-category">List category</label>: <select id="list-category"><option value="0">Default Category</option>{.repeated section categories}<option value="{id}"{.section selected} selected="selected"{.end}>{name}</option>{.end}</select> <a href="#categories">Manage categories</a><br />' + 
	    '<label for="list-visibility">Public</label>: <input id="list-visibility" type="checkbox"{record.vchecked} />' + 
	    '</fieldset>' +
	    '<p>This list has <b>{totalsubscribers}</b> subscribers<br />{.repeated section bouncestats}<b>{0}</b> bounced {1} (<a href="javascript:removeBouncedFromList({record.id}, {2});">Remove them</a>)<br />{.end}</p>' +
	    '<a class="ic-users-22 icb" href="#lists/{record.id}/subscribers">Subscribers</a><br /><a class="ic-stats-22 icb" href="#lists/{record.id}/statistics">Statistics</a>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-tick ic" href="javascript:saveList({record.id});">Save list</a></li><li><a class="ic-delete ic" href="javascript:deleteList({record.id});">Delete list</a></li></ul>'),
	function(r){
	    if(r.record.visibility == 1){
		r.record.vchecked = ' checked="checked"';
	    }else{
		r.record.vchecked = '';
	    }
	    return r;
	}
    ],[
	'message',
	/messages\/\d+$/,
	jsontemplate.Template('<h3><a href="#messages">Messages</a><span class="sep" />{record.name}</h3>' + 
	    '<div class="error" id="send-error" style="display: none;"></div>' +
	    '<div class="notice" id="send-notice" style="display: none;"></div>' +
	    '<fieldset><table>' +
	    '<tr><td style="width: 100px;"><label for="message-name">Message name</label>:</td><td><input type="text" id="message-name" value="{record.name}" /></td></tr>' +
	    '<tr><td><label for="message-category">Category</label>:</td><td><select id="message-category"><option value="0">Default Category</option>{.repeated section categories}<option value="{id}"{.section selected} selected="selected"{.end}>{name}</option>{.end}</select> <a href="#categories">Manage categories</a></td></tr>' +
	    '<tr><td><label for="message-fromname">From name</label>:</td><td><input type="text" id="message-fromname" value="{record.fromname}" /></td></tr>' +
	    '<tr><td><label for="message-fromaddress">From email</label>:</td><td><input type="text" id="message-fromaddress" value="{record.fromaddress}" />&nbsp;@&nbsp;<select id="message-fromdomain">{.repeated section domains}<option value="{name}"{selected}>{name}</option>{.end}</select>&nbsp;<a href="#domains/{record.id}">Manage domains</a></td></tr>' +
	    '<tr><td><label for="message-subject">Subject</label>:</td><td><input type="text" id="message-subject" value="{record.subject}" /></td></tr>' +
	    '<tr><td>Options:</td><td><input type="checkbox" id="message-embed" {.section embed}checked="checked"{.end}/><label for="message-embed">Embed images</label> <input type="checkbox" id="message-receipt" {.section receipt}checked="checked"{.end}/><label for="message-receipt">Request Read Receipt</label></td></tr>' +
	    '<tr><td><label for="message-html">Html</label>:</td><td><textarea id="message-html"></textarea></td></tr>' +
	    '<tr><td><label for="message-text">Text</label>:</td><td><textarea id="message-text">{record.text}</textarea></td></tr>' +
//	    '<tr><td>Lists:</td><td>{.repeated section lists} <input type="checkbox" class="message-lists" id="message-list-{id}" value="{id}" {.section checked}checked="checked"{.end}/><label for="message-list-{id}">{name}</label>{.end}</td></tr>' +
	    '<tr><td>Lists:</td><td>{.repeated section glists} <h4 class="category"><a href="javascript:select_lists({id});">{categoryname}</a></h4><div id="lists-{id}" style="padding-left: 20px;">{.repeated section lists} <input type="checkbox" class="message-lists" id="message-list-{id}" value="{id}" {.section checked}checked="checked"{.end}/><label for="message-list-{id}">{name}</label>{.end}</div>{.end}</td></tr>' + 
	    '</table></fieldset>' +
	    '<a class="ic-calendar-22 icb" href="#messages/{record.id}/history">History</a><br /><a class="ic-stats-22 icb" href="#lists/{record.id}/statistics">Statistics</a>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-tick ic" href="javascript:saveMessage({record.id});">Save message</a></li><li><a class="ic-delete ic" href="javascript:deleteMessage({record.id});">Delete message</a></li><li><a class="ic-zoom ic" href="#messages/{record.id}/preview">Preview message</a></li><li><a class="ic-email_go ic" href="javascript:sendMessage({record.id});">Send message</a></li></ul>'),
	function(r){
	    if(r.record.flags & 1){
		r.embed = true;
	    }
	    if(r.record.flags & 2){
		r.receipt = true;
	    }
	    return r;
	},
	function(r){
	    Ext.fly('message-html').dom.value = r.record.html;
//	    '<tr><td>Lists:</td><td>{.repeated section lists} <input type="checkbox" class="message-lists" id="message-list-{id}" value="{id}" {.section checked}checked="checked"{.end}/><label for="message-list-{id}">{name}</label>{.end}</td></tr>' +
	}
    ],[
	'domains',
	/domains\/\d+$/,
	jsontemplate.Template('<h3>Domains</h3>' +
	    '<table id="domain-list" style="width: auto;">{.repeated section domains}<tr id="domain-{id}" style="font-size: 16px;"><td>{name}</td><td><a href="javascript:editDomain({id});" class="ic-pencil ic"></a><a href="javascript:removeDomain({id});" class="ic-delete ic"></a></td></tr>{.end}' +
	    '<tr id="domain-new"><td><input type="text" id="domain-edit-new" /></td><td><a href="javascript:saveDomain(\'new\');" class="ic-add ic"></a></td></tr></table>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-tick ic" href="#messages/{mid}">Back to message</a></li></ul>')
    ],[
	'login',
	/login$/,
	jsontemplate.Template('<h3>Login</h3><div class="error" style="display: none;" id="login-error">Invalid username or password</div><fieldset><table><tr><td><label for="username">Username:</label></td><td><input id="username" type="text" value="{username}" /></td></tr><tr><td><label for="password">Password: </label></td><td><input type="password" id="password" value="{password}" /></td></tr></table></fieldset>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-tick ic" href="javascript:login();">Login</a></li></ul>'),
	null,
	function(r){
	    Ext.get('username').on('keyup', function(e, t){
		if(e.keyCode == 13){
		    Ext.get('password').focus();
		}
	    });
	    Ext.get('password').on('keyup', function(e, t){
		if(e.keyCode == 13){
		    login();
		}
	    });
	}
    ],[
	'preview',
	/messages\/\d+\/preview$/,
	jsontemplate.Template('<h3><a href="#messages">Messages</a><span class="sep" /><a href="#messages/{message.id}">{message.name}</a><span class="sep" />Preview</h3><div style="height: 100%;"><iframe id="previewiframe" src="/messages/{message.id}/previewcontent" width="100%" height="100%" onload="resizePreview();">{html}</iframe></div>'),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-pencil ic" href="#messages/{message.id}">Edit message</a></li></ul>')
    ],[
	'campaign',
	/campaigns\/\d+$/,
	jsontemplate.Template('<h3>Status: {record.status}</h3><div class="success" id="removebounced-success" style="display: none;"></div><div class="p-off"><div class="p-on" style="width: {pc}%;"></div><div class="p-text">{record.sent} / {record.total} ({pc}%)</div></div>' + 
	'<img style="float: right;" src="http://chart.apis.google.com/chart?cht=p&chp=50&chs=370x150&chd=t:{chartvals}&chl={chartkeys}&chco=00FF00,FFFF00,FF0000,92ADC9" />' +
	'<p style="font-size: 16px;">Message <a href="#messages/{record.messageID}">{record.name}</a> started at {record.date}<br />Size: &asymp; {asciisize} (&asymp; {encodedsize} encoded)</p>' +
	'<p style="margin-bottom: 0;">Successfully sent <b>{record.sent}</b> emails.<br /><img style="cursor: pointer;" onmouseover="showChart(this, \'read\');" src="/img/icons/chart_bar.png" />&nbsp;<b>{record.read} ({readp}%)</b> read (<a href="campaigns/{record.id}/read.csv">Download csv</a>),<br /><b>{record.bounced} ({bouncedp}%)</b> bounced (<a href="campaigns/{record.id}/bounced.csv">Download csv</a>), (<a href="javascript:removeBounced({record.id});">Remove subscribers from all lists</a>)<br /><b>{record.unsubscribed} ({unsubp}%)</b> unsubscribed (<a href="campaigns/{record.id}/unsubscribed.csv">Download csv</a>), <br /><b>{visitors} ({visitorsp}%)</b> visitors, <b>{avgclicks}</b> clicks average (<a href="campaigns/{record.id}/visitors.csv">Download csv</a>), <br /><b>{linkhits} ({ctr} CTR)</b> clicks: </p><ul style="list-style-type: none;">{.repeated section domains}<li>{name} - <b>{hits}</b></li>{.end}</ul>' + 
	'<table style="width: 100%;"><tr><th>Link</th><th>Hits</th></tr><tr>{.repeated section links}<tr><td style="max-width: 100px; max-height: 19px;"><a style="white-space: nowrap; max-width: 100%; max-height: 19px; display: block; overflow: hidden; text-overflow: ellipsis;" target="_blank" href="{url}">{url}</a></td><td style="width: 100px;"><b>{hits}</b></td></tr>{.or}<tr><td colspan="2">No links have been clicked</td></tr>{.end}</table>' +
	'<img id="read-chart" onmouseout="hideChart(\'read\');" style="padding-top: 3px; background-color: #FFFFFF; border: 1px solid #DDDDDD; cursor: pointer; display: none; position: absolute;" src="http://chart.apis.google.com/chart?cht=lc&chco=92ADC9&chls=2,0,0&chs=600x200&chxt=x,y,x&chd=t:{readtimesv}&chds=0,{readtimesmax}&chxr=1,0,{readtimesmax}&chxl=0:|{readtimeshour}|2:|{readtimesday}|&chdl=Reads / h (max. {readtimesmax} / h)&chdlp=t" />'),
	jsontemplate.Template('<ul class="menu"><li id="campaign-pause" {.section hidepause}style="display: none;"{.end}><a class="ic-pause ic" href="javascript:pauseCampaign({record.id});">Pause</a></li><li id="campaign-start" {.section hidestart}style="display: none;"{.end}><a class="ic-play ic" href="javascript:resumeCampaign({record.id});">Start</a></li><li id="campaign-resume" {.section hideplay}style="display: none;"{.end}><a class="ic-play ic" href="javascript:resumeCampaign({record.id});">Resume</a></li><li id="campaign-resend" {.section hideresend}style="display: none;"{.end}><a class="ic-start ic" href="javascript:resendCampaign({record.id});">Resend ?!</a></li></ul>'),
	function(r){
	    if(r.record.size == null){
		r.record.size = '0|0';
	    }
	    sizes = r.record.size.split('|')
	    r.asciisize = Math.ceil(sizes[0] / 10.24)/100 + ' KB';
	    r.encodedsize = Math.ceil(sizes[1] / 10.24)/100 + ' KB';
	    var thits = 0;
	    for(var i=0;i<r.links.length;i++){
		thits += r.links[i].hits;
	    }
	    for(var i=0;i<r.links.length;i++){
		r.links[i].hits += ' (' + Math.round(r.links[i].hits / thits * 10000) / 100 + '%)';
	    }
	    r.pc = parseInt(r.record.sent / r.record.total * 100);
	    r.finished = r.record.status == 'finished';
	    if(r.record.status == 'running' || r.record.status == 'started'){
		r.hideplay = true;
		r.hidestart = true;
		r.hideresend = true;
		window.setTimeout(refresh, 2000);
	    }else if(r.record.status == 'new'){
		r.hideplay = true;
		r.hidepause = true;
		r.hideresend = true;
	    }else if(r.record.status == 'finished'){
		r.hideplay = true;
		r.hidepause = true;
		r.hidestart = true;
	    }else{
		r.hidepause = true;
		r.hidestart = true;
		r.hideresend = true;
	    }
	    var rec = r.record;
	    r.readp = Math.round(rec.read / rec.total * 100);
	    r.bouncedp = Math.round(rec.bounced / rec.total * 100);
	    r.unsubp = Math.round(rec.unsubscribed / rec.total * 100);
	    //r.visitorsp = Math.round(r.visitors / rec.total * 100);
	    if(rec.total){
		r.visitorsp = Math.round(r.visitors / rec.total * 100);
	    }else{
		r.visitorsp = 0;
	    }
	    r.sentp = 100 - r.readp - r.bouncedp - r.unsubp;
	    r.chartvals = r.readp + ',' + r.bouncedp + ',' + r.unsubp + ',' + r.sentp;
	    r.chartkeys = 'Read (' + r.readp + '%)|Bounced (' + r.bouncedp + '%)|Unsubscribed (' + r.unsubp + '%)|Sent';
	    r.readtimesv = [];
	    r.readtimeshour = [];
	    r.readtimesmax = 0;
	    if(rec.read){
		r.ctr = Math.round(r.linkhits / rec.read * 100) / 100;
	    }else{
		r.ctr = 0;
	    }
	    if(r.visitors){
		r.avgclicks = Math.round(r.linkhits / r.visitors * 100) / 100;
	    }else{
		r.avgclicks = 0;
	    }
	    days = {}
	    mnames = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
	    for(var i=0;i<r.readtimes.length;i++){
		r.readtimesv.push(r.readtimes[i][0]);
		if(r.readtimes.length<=24 || i % 2 == 0){
    		    r.readtimeshour.push(r.readtimes[i][1].split(' ')[1]);
    		}
		day = r.readtimes[i][1].split(' ')[0].split('.');
		var d = '|' + day[0] + ' ' + mnames[day[1]] + '|';
		days[d] = true;
		if(r.readtimes[i][0] > r.readtimesmax){
		    r.readtimesmax = r.readtimes[i][0];
		}
	    }

	    rdays = [];
	    for(var day in days){
		rdays.push(day);
	    }
	    r.readtimesday = rdays.join('|');
	    if(r.readtimeshour.length < 60){
		r.readtimeshour = r.readtimeshour.join('|');
	    }else{
		r.readtimeshour = r.readtimesday;
		r.readtimesday = '';
	    }
	    return r;
	}
    ],[
	'history',
	/messages\/(\d+)\/history$/,
	jsontemplate.Template('<h3><a href="#messages">Messages</a><span class="sep" /><a href="#messages/{message.id}">{message.name}</a><span class="sep" />History</h3><table>{.repeated section records}<tr><td><a href="#campaigns/{id}">{date}</a></td><td>Sent {sent} emails</td><td>to {listnames}</td><td>from {fromaddress}</td><td>{status}</td></tr>{.or}No history{.end}</table>')
    ],[
	'subscribers',
	/lists\/(\d+)\/subscribers(\/\d+)?\/?(.+)?$/,
	jsontemplate.Template('<h3><a href="#lists">Lists</a><span class="sep" /><a href="#lists/{list.id}">{list.name}</a><span class="sep" />Subscribers</h3>' + 
	    '<div class="error" id="import-error" style="display: none;"></div>' +
	    '<div class="success" id="import-success" style="display: none;"></div>' +
	    '<div class="notice" id="import-notice" style="display: none;"></div>' +
	    '<div id="tab-subscribers" class="tabc" style="display: block;"><div><label for="filterbox">Filter: </label><input type="text" id="filterbox" value="{p3}" onkeyup="enterFilter({list.id}, event);" /><button onclick="changeFilter({list.id});">Go</button></div><hr />' +
	    '<table>{.repeated section records}<tr><td>{0}</td><td><a href="#subscriber/{0}">{1}</a></td><td>{2}</td><td>{3}</td><td><a href="javascript:deleteSubscriber({list.id}, {0});" class="ic ic-delete">Unsubscribe</a></td></tr>{.or}<tr><td>No subscribers</td></tr>{.end}</table>{.section records}{pager}{.end}</div>' +
	    '<fieldset id="tab-text" class="tabc"><legend>Import</legend><textarea id="import-text" style="width: 100%; height: 100%;"></textarea><br /><a href="javascript:uploadText({list.id});" class="ic ic-tick">Submit</a></fieldset>' +
	    '<fieldset id="tab-file" class="tabc"><legend>Import</legend><form action="lists/{list.id}/subscribers/import" method="POST" id="file-form"><input type="file" name="file" /></form><a href="javascript:uploadFile({list.id});" class="ic ic-tick">Upload</a></fieldset>'
	),
	jsontemplate.Template('<ul class="menu"><li><a class="ic-users-16 ic" href="javascript:refresh();">View Subscribers</a></li><li><a class="ic-page_white_get ic" href="javascript:importFile({list.id});">Import from file</a></li><li><a class="ic-application_get ic" href="javascript:importText({list.id});">Import text</a></li><li><a class="ic-application_put ic" href="lists/{list.id}/subscribers/export.csv">Export to csv</a></li></ul>'),
	pager
    ],[
        'subscriber',
        /subscriber\/(\d+)$/,
        jsontemplate.Template('<h3><a href="#lists">Subscribers</a><span class="sep" />{subscriber.text}</h3>' +
            '<h4>Recently sent messages:</h4><table><tr><th>Campaign</th><th>Date</th><th>Status</th>{.repeated section campaigns}<tr><td><a href="#campaigns/{id}">{name}</a></td><td>{date}</td><td>{status}</td></tr>{.end}</table>'
        ),
        jsontemplate.Template('')
    ],[
	'atc',
	/atc.*/,
	jsontemplate.Template('' + 
	'<div>{.section item}' +
	    '<h3>{item.name} ({item.code}) <a href="javascript:preview(\'{item.code}\');" class="ic-zoom ic">Preview</a></h3>' +
	    '{.end}{.section categories}<h4>Subcategories:</h4>{.end}' +
	    '<div class="toc-menu"><ul>{.repeated section categories}<li><b>{code}</b> - <a href="#atc/{code}">{name}</a></li>{.end}</ul></div>' +
	    '<div class="sections">' +
	    '{.repeated section sections}' +
		'<h4>{name}</h4>' +
	    
	    	'<div id="section-{id}" class="section {.section properties}hasproperties{.end}">' +
	    	'{.repeated section properties}' + 
	    	    '{.section type2}' +
	    		'<div class="property type2" id="prop-{id}"><table><tr>' +
	    		'<td class="prop-actions">' +
	    		    '<a class="normal" href="javascript:editProperty({id});"><img src="img/icons/pencil.png" alt="Edit" title="Edit" /></a>' +
	    		    '<a class="normal" href="javascript:deleteProperty({id});"><img src="img/icons/delete.png" alt="Delete" title="Delete" /></a>' +
	    		    '<a class="editing" href="javascript:saveProperty({id});"><img src="img/icons/tick.png" alt="Save" title="Save" /></a>' +
	    		    '<a class="editing" href="javascript:restoreProperty({id});"><img src="img/icons/cross.png" alt="Cancel" title="Cancel" /></a>' +
	    		        
	    		'</td>' +
	    		'<td class="prop-name">{name}</td><td class="prop-val">{content}</td></tr></table></div>' +
	    	    '{.end}' +
	    	    '{.section type1}' +
	    		'<div class="property type1" id="prop-{id}"><table><tr>' +
	    		'<td class="prop-actions">' +
	    		    '<a class="normal" href="javascript:editSimpleProperty({id});"><img src="img/icons/pencil.png" alt="Edit" title="Edit" /></a>' +
	    		    '<a class="normal" href="javascript:deleteSimpleProperty({id});"><img src="img/icons/delete.png" alt="Delete" title="Delete" /></a>' +
	    		    '<a class="editing" href="javascript:saveSimpleProperty({id});"><img src="img/icons/tick.png" alt="Save" title="Save" /></a>' +
	    		    '<a class="editing" href="javascript:restoreSimpleProperty({id});"><img src="img/icons/cross.png" alt="Cancel" title="Cancel" /></a>' +
	    		'</td>' +
	    		'<td class="prop-val">{content}</td></tr></table></div>' +
	    	    '{.end}' + 
	    	'{.end}' + 
	    	'<div id="sep-{id}"></div>' +
	    	'{.section type2}' +
	    	    '<a style="margin-left: 7px;" href="javascript:addProperty(\'{item.code}\', {id});" class="ic-add ic">Add {itemname}</a>' +
	        '{.end}' +
	        
	        '{.section type1}' +
	    	    '<a style="margin-left: 7px;" href="javascript:addProperty(\'{item.code}\', {id});" class="sa ic-add ic">Add {name}</a>' +
	        '{.end}' +
		'</div>' +
	    
	    
	    '{.end}' + 
	    '</div>' +
	'</div>'
	)
    ]
];
var previewtemplates = {
    '1': jsontemplate.Template('<div class="preview"><h3>{item.name} ({item.code})</h3>' + 
	'<dl>' +
	    '{.repeated section categories}<dt>{code}</dt><dd>{name}</dd>{.end}' +
	'</dl>'),
    '4': jsontemplate.Template('<div><h3>{item.name} ({item.code})</h3>' +
	'{.repeated section sections}' +
	    '{.section properties}<p style="text-indent: -10px; padding: 0 20px 0 10px; text-align: justify; margin-bottom: 0;"><i><b>{name}</b></i>: {.end}' +
	    '{.repeated section properties}' +
		'{.section name}<b>{name}</b> - {.end}{content}<br />' +
	    '{.end}</p>' +
	'{.end}' +
	'</div>')
};
