Modified: steve/trunk/pysteve/www/htdocs/js/steve_ap.js
URL: 
http://svn.apache.org/viewvc/steve/trunk/pysteve/www/htdocs/js/steve_ap.js?rev=1723997&r1=1723996&r2=1723997&view=diff
==============================================================================
--- steve/trunk/pysteve/www/htdocs/js/steve_ap.js (original)
+++ steve/trunk/pysteve/www/htdocs/js/steve_ap.js Mon Jan 11 10:03:45 2016
@@ -17,103 +17,103 @@
 
 function displayIssueAP(code, response, state) {
     election_data = response
-       var obj = document.getElementById('preloaderWrapper')
-       obj.setAttribute("id", "ynavote")
+    var obj = document.getElementById('preloaderWrapper')
+    obj.setAttribute("id", "ynavote")
     if (code != 200) {
         obj.innerHTML = "<h1>Could not load issue:</h1><h2>" + 
response.message + "</h2>";
     } else {
-               obj.innerHTML = ""
-               
-               var title = document.createElement('h2')
-               title.innerHTML = response.issue.title;
-               obj.appendChild(title)
-               
-               obj.appendChild(keyvaluepairText("nominatedby", "Put forward 
(nominated) by:", response.issue.nominatedby))
-               obj.appendChild(keyvaluepairText("seconds", "Seconded by:", 
response.issue.seconds.length > 0 ?  response.issue.seconds.join(", ") : 
"no-one" ))
-               
-               var desc = document.createElement('pre')
-               desc.setAttribute("class", "statement")
-               desc.innerHTML = response.issue.description
-               obj.appendChild(desc)
-               
-               var outer = document.createElement('div')
-               outer.setAttribute("class", "issueListItemWide")
-               
-               var byes = document.createElement('input')
-               byes.setAttribute("type", "button")
-               byes.setAttribute("value", "Binding Yes (+1)")
-               byes.setAttribute("class", "btn-green")
-               byes.setAttribute("style", "float: right;");
-               byes.setAttribute("onclick", "castSingleVote('by');")
-               
-               var yes = document.createElement('input')
-               yes.setAttribute("type", "button")
-               yes.setAttribute("value", "Yes (+1)")
-               yes.setAttribute("class", "btn-green")
-               yes.setAttribute("style", "float: right;");
-               yes.setAttribute("onclick", "castSingleVote('y');")
-               
-               var no = document.createElement('input')
-               no.setAttribute("type", "button")
-               no.setAttribute("value", "No  (-1)")
-               no.setAttribute("class", "btn-red")
-               no.setAttribute("style", " float: right;");
-               no.setAttribute("onclick", "castSingleVote('n');")
-               
-               var bno = document.createElement('input')
-               bno.setAttribute("type", "button")
-               bno.setAttribute("value", "Binding No (-1)")
-               bno.setAttribute("class", "btn-red")
-               bno.setAttribute("style", " float: right;");
-               bno.setAttribute("onclick", "castSingleVote('bn');")
-               
-               var abstain = document.createElement('input')
-               abstain.setAttribute("type", "button")
-               abstain.setAttribute("value", "Abstain (0)")
-               abstain.setAttribute("class", "btn-yellow")
-               abstain.setAttribute("style", "float: right;");
-               abstain.setAttribute("onclick", "castSingleVote('a');")
-               
-               var p = document.createElement('p')
-               p.innerHTML = "Cast your vote by clicking on the respective 
button below. You may recast your vote as many time as you like, should you 
reconsider."
-               
-               obj.appendChild(p)
-               outer.appendChild(bno)
-               outer.appendChild(no)
-               outer.appendChild(abstain)
-               outer.appendChild(yes)
-               outer.appendChild(byes)
-               
-               obj.appendChild(outer)
-       }
+        obj.innerHTML = ""
+        
+        var title = document.createElement('h2')
+        title.innerHTML = response.issue.title;
+        obj.appendChild(title)
+        
+        obj.appendChild(keyvaluepairText("nominatedby", "Put forward 
(nominated) by:", response.issue.nominatedby))
+        obj.appendChild(keyvaluepairText("seconds", "Seconded by:", 
response.issue.seconds.length > 0 ?  response.issue.seconds.join(", ") : 
"no-one" ))
+        
+        var desc = document.createElement('pre')
+        desc.setAttribute("class", "statement")
+        desc.innerHTML = response.issue.description
+        obj.appendChild(desc)
+        
+        var outer = document.createElement('div')
+        outer.setAttribute("class", "issueListItemWide")
+        
+        var byes = document.createElement('input')
+        byes.setAttribute("type", "button")
+        byes.setAttribute("value", "Binding Yes (+1)")
+        byes.setAttribute("class", "btn-green")
+        byes.setAttribute("style", "float: right;");
+        byes.setAttribute("onclick", "castSingleVote('by');")
+        
+        var yes = document.createElement('input')
+        yes.setAttribute("type", "button")
+        yes.setAttribute("value", "Yes (+1)")
+        yes.setAttribute("class", "btn-green")
+        yes.setAttribute("style", "float: right;");
+        yes.setAttribute("onclick", "castSingleVote('y');")
+        
+        var no = document.createElement('input')
+        no.setAttribute("type", "button")
+        no.setAttribute("value", "No  (-1)")
+        no.setAttribute("class", "btn-red")
+        no.setAttribute("style", " float: right;");
+        no.setAttribute("onclick", "castSingleVote('n');")
+        
+        var bno = document.createElement('input')
+        bno.setAttribute("type", "button")
+        bno.setAttribute("value", "Binding No (-1)")
+        bno.setAttribute("class", "btn-red")
+        bno.setAttribute("style", " float: right;");
+        bno.setAttribute("onclick", "castSingleVote('bn');")
+        
+        var abstain = document.createElement('input')
+        abstain.setAttribute("type", "button")
+        abstain.setAttribute("value", "Abstain (0)")
+        abstain.setAttribute("class", "btn-yellow")
+        abstain.setAttribute("style", "float: right;");
+        abstain.setAttribute("onclick", "castSingleVote('a');")
+        
+        var p = document.createElement('p')
+        p.innerHTML = "Cast your vote by clicking on the respective button 
below. You may recast your vote as many time as you like, should you 
reconsider."
+        
+        obj.appendChild(p)
+        outer.appendChild(bno)
+        outer.appendChild(no)
+        outer.appendChild(abstain)
+        outer.appendChild(yes)
+        outer.appendChild(byes)
+        
+        obj.appendChild(outer)
+    }
 }
 
 function loadIssue(election, issue, uid, callback) {
-       
-       var messages = ["Herding cats...", "Shaving yaks...", "Shooing some 
cows away...", "Fetching election data...", "Loading issues..."]
-       if (!election || !uid) {
-               var l = document.location.search.substr(1).split("/");
-               election = l[0];
-               issue = l.length > 1 ? l[l.length-2] : "";
-               uid = l.length > 2 ? l[l.length-1] : "";
-       }
-       if (step == -1) {
-               getJSON("/steve/voter/view/" + election + "/" + issue + "?uid=" 
+ uid, [election, issue, uid], callback)
-       }
-       
-       var obj = document.getElementById('preloader');
-       step++;
-       if (!election_data && obj) {
-               if (step % 2 == 1) obj.innerHTML = 
messages[parseInt(Math.random()*messages.length-0.01)]
-       } else if (obj && (step % 2 == 1)) {
-               obj.innerHTML = "Ready..!"
-       }
-       if (step % 2 == 1) {
-               obj.style.transform = "translate(0,0)"
-       } else if (obj) {
-               obj.style.transform = "translate(0,-500%)"
-       }
-       if (!election_data|| (step % 2 == 0) ) {
-               window.setTimeout(loadElection, 750, election, uid, callback);
-       }
+    
+    var messages = ["Herding cats...", "Shaving yaks...", "Shooing some cows 
away...", "Fetching election data...", "Loading issues..."]
+    if (!election || !uid) {
+        var l = document.location.search.substr(1).split("/");
+        election = l[0];
+        issue = l.length > 1 ? l[l.length-2] : "";
+        uid = l.length > 2 ? l[l.length-1] : "";
+    }
+    if (step == -1) {
+        getJSON("/steve/voter/view/" + election + "/" + issue + "?uid=" + uid, 
[election, issue, uid], callback)
+    }
+    
+    var obj = document.getElementById('preloader');
+    step++;
+    if (!election_data && obj) {
+        if (step % 2 == 1) obj.innerHTML = 
messages[parseInt(Math.random()*messages.length-0.01)]
+    } else if (obj && (step % 2 == 1)) {
+        obj.innerHTML = "Ready..!"
+    }
+    if (step % 2 == 1) {
+        obj.style.transform = "translate(0,0)"
+    } else if (obj) {
+        obj.style.transform = "translate(0,-500%)"
+    }
+    if (!election_data|| (step % 2 == 0) ) {
+        window.setTimeout(loadElection, 750, election, uid, callback);
+    }
 }

Modified: steve/trunk/pysteve/www/htdocs/js/steve_cop.js
URL: 
http://svn.apache.org/viewvc/steve/trunk/pysteve/www/htdocs/js/steve_cop.js?rev=1723997&r1=1723996&r2=1723997&view=diff
==============================================================================
--- steve/trunk/pysteve/www/htdocs/js/steve_cop.js (original)
+++ steve/trunk/pysteve/www/htdocs/js/steve_cop.js Mon Jan 11 10:03:45 2016
@@ -24,73 +24,73 @@ var chars;
 
 
 function loadIssue(election, issue, uid, callback) {
-       
-       var messages = ["Herding cats...", "Shaving yaks...", "Shooing some 
cows away...", "Fetching election data...", "Loading issues..."]
-       if (!election || !uid) {
-               var l = document.location.search.substr(1).split("/");
-               election = l[0];
-               issue = l.length > 1 ? l[l.length-2] : "";
-               uid = l.length > 2 ? l[l.length-1] : "";
-       }
-       if (step == -1) {
-               getJSON("/steve/voter/view/" + election + "/" + issue + "?uid=" 
+ uid, [election, issue, uid], callback)
-       }
-       
-       var obj = document.getElementById('preloader');
-       step++;
-       if (!election_data && obj) {
-               if (step % 2 == 1) obj.innerHTML = 
messages[parseInt(Math.random()*messages.length-0.01)]
-       } else if (obj && (step % 2 == 1)) {
-               obj.innerHTML = "Ready..!"
-       }
-       if (step % 2 == 1) {
-               obj.style.transform = "translate(0,0)"
-       } else if (obj) {
-               obj.style.transform = "translate(0,-500%)"
-       }
-       if (!election_data|| (step % 2 == 0) ) {
-               window.setTimeout(loadElection, 750, election, uid, callback);
-       }
+    
+    var messages = ["Herding cats...", "Shaving yaks...", "Shooing some cows 
away...", "Fetching election data...", "Loading issues..."]
+    if (!election || !uid) {
+        var l = document.location.search.substr(1).split("/");
+        election = l[0];
+        issue = l.length > 1 ? l[l.length-2] : "";
+        uid = l.length > 2 ? l[l.length-1] : "";
+    }
+    if (step == -1) {
+        getJSON("/steve/voter/view/" + election + "/" + issue + "?uid=" + uid, 
[election, issue, uid], callback)
+    }
+    
+    var obj = document.getElementById('preloader');
+    step++;
+    if (!election_data && obj) {
+        if (step % 2 == 1) obj.innerHTML = 
messages[parseInt(Math.random()*messages.length-0.01)]
+    } else if (obj && (step % 2 == 1)) {
+        obj.innerHTML = "Ready..!"
+    }
+    if (step % 2 == 1) {
+        obj.style.transform = "translate(0,0)"
+    } else if (obj) {
+        obj.style.transform = "translate(0,-500%)"
+    }
+    if (!election_data|| (step % 2 == 0) ) {
+        window.setTimeout(loadElection, 750, election, uid, callback);
+    }
 }
 
 
 function drawCandidatesCOP() {
     var box = document.getElementById('candidates')
     box.innerHTML = "<h3>Candidates:</h3>"
-       var pname = null
-       var pli = null;
+    var pname = null
+    var pli = null;
     for (i in candidates) {
         var name = candidates[i]
-               if (pname != name['pname']) {
-                       pname = name['pname']
-                       var char = name['pletter']
-                       pli = document.createElement('ol')
-                       pli.setAttribute("class", "showList")
-                       pli.style.marginTop = "20px"
-                       var outer = document.createElement('div')
-                       var inner = document.createElement('span')
-                       inner.style.fontFamily = "monospace"
-                       inner.style.fontWeigth = "bold"
-                       inner.innerHTML = name['pname'];
-                       outer.setAttribute("class", "ballotbox_clist_DH")
-                       if (char == vote_COP) {
-                               outer.setAttribute("class", 
"ballotbox_clist_selectedDH")
-                       }
-                       outer.setAttribute("id", name)
-                       outer.setAttribute("onclick", "vote_COP = '"+char+"'; 
drawCandidatesCOP();")
-                       outer.appendChild(inner)
-                       outer.setAttribute("title", "Click to select "  + name 
+ " as your preference")
-                       pli.appendChild(outer)
-                       box.appendChild(pli)
-                       
-               }
+        if (pname != name['pname']) {
+            pname = name['pname']
+            var char = name['pletter']
+            pli = document.createElement('ol')
+            pli.setAttribute("class", "showList")
+            pli.style.marginTop = "20px"
+            var outer = document.createElement('div')
+            var inner = document.createElement('span')
+            inner.style.fontFamily = "monospace"
+            inner.style.fontWeigth = "bold"
+            inner.innerHTML = name['pname'];
+            outer.setAttribute("class", "ballotbox_clist_DH")
+            if (char == vote_COP) {
+                outer.setAttribute("class", "ballotbox_clist_selectedDH")
+            }
+            outer.setAttribute("id", name)
+            outer.setAttribute("onclick", "vote_COP = '"+char+"'; 
drawCandidatesCOP();")
+            outer.appendChild(inner)
+            outer.setAttribute("title", "Click to select "  + name + " as your 
preference")
+            pli.appendChild(outer)
+            box.appendChild(pli)
+            
+        }
         var char = name['letter']
         var li = document.createElement('li')
         var outer = document.createElement('div')
         var inner = document.createElement('span')
         inner.style.fontFamily = "monospace"
-               li.style.marginLeft = "30px"
-               li.style.marginBottom = "10px"
+        li.style.marginLeft = "30px"
+        li.style.marginBottom = "10px"
         inner.innerHTML = name['name'];
         outer.setAttribute("class", "ballotbox_clist_DH")
         if (char == vote_COP) {
@@ -135,8 +135,8 @@ function displayIssueCOP(code, response,
         
         var l = document.createElement('ol')
         l.setAttribute("id", "candidates")
-               l.setAttribute("type", "a")
-               l.setAttribute("class", "showList")
+        l.setAttribute("type", "a")
+        l.setAttribute("class", "showList")
         obj.appendChild(l)
         
         drawCandidatesCOP();

Modified: steve/trunk/pysteve/www/htdocs/js/steve_dh.js
URL: 
http://svn.apache.org/viewvc/steve/trunk/pysteve/www/htdocs/js/steve_dh.js?rev=1723997&r1=1723996&r2=1723997&view=diff
==============================================================================
--- steve/trunk/pysteve/www/htdocs/js/steve_dh.js (original)
+++ steve/trunk/pysteve/www/htdocs/js/steve_dh.js Mon Jan 11 10:03:45 2016
@@ -39,36 +39,35 @@ function shuffleCandidates() {
 }
 
 function loadIssue(election, issue, uid, callback) {
-       
-       var messages = ["Herding cats...", "Shaving yaks...", "Shooing some 
cows away...", "Fetching election data...", "Loading issues..."]
-       if (!election || !uid) {
-               var l = document.location.search.substr(1).split("/");
-               election = l[0];
-               issue = l.length > 1 ? l[l.length-2] : "";
-               uid = l.length > 2 ? l[l.length-1] : "";
-       }
-       if (step == -1) {
-               getJSON("/steve/voter/view/" + election + "/" + issue + "?uid=" 
+ uid, [election, issue, uid], callback)
-       }
-       
-       var obj = document.getElementById('preloader');
-       step++;
-       if (!election_data && obj) {
-               if (step % 2 == 1) obj.innerHTML = 
messages[parseInt(Math.random()*messages.length-0.01)]
-       } else if (obj && (step % 2 == 1)) {
-               obj.innerHTML = "Ready..!"
-       }
-       if (step % 2 == 1) {
-               obj.style.transform = "translate(0,0)"
-       } else if (obj) {
-               obj.style.transform = "translate(0,-500%)"
-       }
-       if (!election_data|| (step % 2 == 0) ) {
-               window.setTimeout(loadElection, 750, election, uid, callback);
-       }
+    
+    var messages = ["Herding cats...", "Shaving yaks...", "Shooing some cows 
away...", "Fetching election data...", "Loading issues..."]
+    if (!election || !uid) {
+        var l = document.location.search.substr(1).split("/");
+        election = l[0];
+        issue = l.length > 1 ? l[l.length-2] : "";
+        uid = l.length > 2 ? l[l.length-1] : "";
+    }
+    if (step == -1) {
+        getJSON("/steve/voter/view/" + election + "/" + issue + "?uid=" + uid, 
[election, issue, uid], callback)
+    }
+    
+    var obj = document.getElementById('preloader');
+    step++;
+    if (!election_data && obj) {
+        if (step % 2 == 1) obj.innerHTML = 
messages[parseInt(Math.random()*messages.length-0.01)]
+    } else if (obj && (step % 2 == 1)) {
+        obj.innerHTML = "Ready..!"
+    }
+    if (step % 2 == 1) {
+        obj.style.transform = "translate(0,0)"
+    } else if (obj) {
+        obj.style.transform = "translate(0,-500%)"
+    }
+    if (!election_data|| (step % 2 == 0) ) {
+        window.setTimeout(loadElection, 750, election, uid, callback);
+    }
 }
 
-
 function drawCandidatesDH() {
     var box = document.getElementById('candidates')
     box.innerHTML = "<h3>Candidates:</h3>"
@@ -97,7 +96,7 @@ function drawCandidatesDH() {
             statement.setAttribute("class", "statement_marker")
             statement.setAttribute("title", "Click to read " + name + "'s 
statement")
             statement.innerHTML = "<a href='#statement_"+char+"'>Statement</a>"
-
+            
             li.appendChild(statement)
             
             var popup = document.createElement("div")
@@ -111,7 +110,7 @@ function drawCandidatesDH() {
             
             var popuph = document.createElement("div")
             popuph.setAttribute("class", "modal-header")
-            popuph.innerHTML = '<h2>Statement from ' + name + '</h2><a 
href="#close" class="btn-close" aria-hidden="true">×</a>'
+            popuph.innerHTML = '<h2>Statement from ' + name + '</h2><a 
href="#close" class="btn-close" aria-hidden="true">�</a>'
             
             var popupb = document.createElement("div")
             popupb.setAttribute("class", "modal-body")

Modified: steve/trunk/pysteve/www/htdocs/js/steve_monitor.js
URL: 
http://svn.apache.org/viewvc/steve/trunk/pysteve/www/htdocs/js/steve_monitor.js?rev=1723997&r1=1723996&r2=1723997&view=diff
==============================================================================
--- steve/trunk/pysteve/www/htdocs/js/steve_monitor.js (original)
+++ steve/trunk/pysteve/www/htdocs/js/steve_monitor.js Mon Jan 11 10:03:45 2016
@@ -17,26 +17,26 @@
 
 // Function for fetching JSON from the REST API
 function getJSON(theUrl, xstate, callback) {
-       var xmlHttp = null;
-       if (window.XMLHttpRequest) {
-               xmlHttp = new XMLHttpRequest();
-       } else {
-               xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
-       }
-       xmlHttp.open("GET", theUrl, true);
-       xmlHttp.send(null);
-       xmlHttp.onreadystatechange = function(state) {
-               if (xmlHttp.readyState == 4 && xmlHttp.status && xmlHttp.status 
>= 200) {
-                       if (callback) {
-                               window.setTimeout(callback, 0.01, 
xmlHttp.status, (xmlHttp.responseText && xmlHttp.responseText.length > 1) ? 
JSON.parse(xmlHttp.responseText) : null, xstate);
-                       }
-               }
-       }
+    var xmlHttp = null;
+    if (window.XMLHttpRequest) {
+        xmlHttp = new XMLHttpRequest();
+    } else {
+        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+    xmlHttp.open("GET", theUrl, true);
+    xmlHttp.send(null);
+    xmlHttp.onreadystatechange = function(state) {
+        if (xmlHttp.readyState == 4 && xmlHttp.status && xmlHttp.status >= 
200) {
+            if (callback) {
+                window.setTimeout(callback, 0.01, xmlHttp.status, 
(xmlHttp.responseText && xmlHttp.responseText.length > 1) ? 
JSON.parse(xmlHttp.responseText) : null, xstate);
+            }
+        }
+    }
 }
 
 function getIssues() {
-       election = document.location.search.substr(1)
-       getJSON("/steve/admin/view/" + election, election, listIssues)
+    election = document.location.search.substr(1)
+    getJSON("/steve/admin/view/" + election, election, listIssues)
 }
 
 var ehash = null
@@ -51,164 +51,164 @@ var rigged = false
 var riggedIssues = {}
 
 function listIssues(code, response, election) {
-       if (code == 200) {
-               eid = election
-               issues = response.issues
-               basedata = response.base_data
-               document.getElementById('title').innerHTML += " " + 
basedata.title
-               var obj = document.getElementById('preloaderWrapper')
-               obj.innerHTML = ""
-               obj.setAttribute("id", "contents")
-               for (i in issues) {
-                       window.setTimeout(showChanges, 1000, issues[i])
-               }
-       } else {
-               alert(response.message)
-       }
+    if (code == 200) {
+        eid = election
+        issues = response.issues
+        basedata = response.base_data
+        document.getElementById('title').innerHTML += " " + basedata.title
+        var obj = document.getElementById('preloaderWrapper')
+        obj.innerHTML = ""
+        obj.setAttribute("id", "contents")
+        for (i in issues) {
+            window.setTimeout(showChanges, 1000, issues[i])
+        }
+    } else {
+        alert(response.message)
+    }
 }
 
 function updateVotes(code, response, issue) {
-       if (code == 200) {
-               recasters[issue] = recasters[issue] ? recasters[issue] : {}
-               oldvotes[issue] = votes[issue] ? votes[issue] : {}
-               votes[issue] = response.votes
-               var is = {}
-               for (i in issues) {
-                       if (issues[i].id == issue) {
-                               is = issues[i]
-                               break
-                       }
-               }
-               if (is.hash && response.issue.hash != is.hash) {
-                       riggedIssues[issue] = "WAS: " + JSON.stringify(is) + " 
- IS NOW: " + JSON.stringify(response.issue)
-               }
-               if (ehash == null) {
-                       ehash = response.hash
-               }
-               if (ehash != response.hash) {
-                       rigged = true
-               }
-               recasts[issue] = recasts[issue] ? recasts[issue] : 0
-       } else if (response.message == "Issue not found") {
-               var header = document.getElementById('issue_' + issue + 
"_header")
-               header.innerHTML = "<font color='red'><b>Issue deleted?: " + 
response.message + "</b></font>"
-       }
+    if (code == 200) {
+        recasters[issue] = recasters[issue] ? recasters[issue] : {}
+        oldvotes[issue] = votes[issue] ? votes[issue] : {}
+        votes[issue] = response.votes
+        var is = {}
+        for (i in issues) {
+            if (issues[i].id == issue) {
+                is = issues[i]
+                break
+            }
+        }
+        if (is.hash && response.issue.hash != is.hash) {
+            riggedIssues[issue] = "WAS: " + JSON.stringify(is) + " - IS NOW: " 
+ JSON.stringify(response.issue)
+        }
+        if (ehash == null) {
+            ehash = response.hash
+        }
+        if (ehash != response.hash) {
+            rigged = true
+        }
+        recasts[issue] = recasts[issue] ? recasts[issue] : 0
+    } else if (response.message == "Issue not found") {
+        var header = document.getElementById('issue_' + issue + "_header")
+        header.innerHTML = "<font color='red'><b>Issue deleted?: " + 
response.message + "</b></font>"
+    }
 }
 
 function calcChanges(issue, oldv, newv) {
-       sinceLast = 0;
-       
-       
-       // Find new votes cast since last update
-       if (!oldv || !newv) {
-               return [0,0]
-       }
-       for (i in newv) {
-               if (!oldv[i]) {
-                       sinceLast++;
-               } else if (oldv[i].timestamp != undefined && newv[i].timestamp 
!= undefined && oldv[i].timestamp != newv[i].timestamp) {
-                       recasts[issue]++;
-                       recasters[issue][i] = (recasters[issue][i] ? 
recasters[issue][i] : 0) + 1
-               }
-       }
-       var nrc = 0;
-       for (i in recasters[issue]) nrc++;
-       
-       return [sinceLast, nrc]
+    sinceLast = 0;
+    
+    
+    // Find new votes cast since last update
+    if (!oldv || !newv) {
+        return [0,0]
+    }
+    for (i in newv) {
+        if (!oldv[i]) {
+            sinceLast++;
+        } else if (oldv[i].timestamp != undefined && newv[i].timestamp != 
undefined && oldv[i].timestamp != newv[i].timestamp) {
+            recasts[issue]++;
+            recasters[issue][i] = (recasters[issue][i] ? recasters[issue][i] : 
0) + 1
+        }
+    }
+    var nrc = 0;
+    for (i in recasters[issue]) nrc++;
+    
+    return [sinceLast, nrc]
 }
 
 var timeouts = {}
 
 function showDetails(issueid, update) {
-       var obj = document.getElementById('issue_' + issueid + '_details')
-       if (obj.innerHTML.length > 0 && !update) {
-               obj.innerHTML = ""
-               window.clearTimeout(timeouts[issueid])
-       } else {
-               obj.innerHTML = ""
-               for (i in votes[issueid]) {
-                       var rawvote = votes[issueid][i]
-                       var vote = null
-                       var nrc = recasters[issueid][i] ? recasters[issueid][i] 
: 0
-                       var add = ""
-                       if (rawvote.timestamp) {
-                               vote = rawvote.vote
-                               add = ". Cast at " + new 
Date(rawvote.timestamp*1000).toLocaleString()
-                       } else {
-                               vote = rawvote
-                       }
-                       if (nrc > 0) {
-                               nrc = "Vote recast " + nrc + " time(s)"
-                       } else {
-                               nrc = "No recasts yet"
-                       }
-                       obj.innerHTML += "<b>" + i + ": </b> " + vote + " - " + 
nrc + add + "<br/>"
-               }
-               timeouts[issueid] = window.setTimeout(showDetails, 2500, 
issueid, true)
-       }
-       
+    var obj = document.getElementById('issue_' + issueid + '_details')
+    if (obj.innerHTML.length > 0 && !update) {
+        obj.innerHTML = ""
+        window.clearTimeout(timeouts[issueid])
+    } else {
+        obj.innerHTML = ""
+        for (i in votes[issueid]) {
+            var rawvote = votes[issueid][i]
+            var vote = null
+            var nrc = recasters[issueid][i] ? recasters[issueid][i] : 0
+            var add = ""
+            if (rawvote.timestamp) {
+                vote = rawvote.vote
+                add = ". Cast at " + new 
Date(rawvote.timestamp*1000).toLocaleString()
+            } else {
+                vote = rawvote
+            }
+            if (nrc > 0) {
+                nrc = "Vote recast " + nrc + " time(s)"
+            } else {
+                nrc = "No recasts yet"
+            }
+            obj.innerHTML += "<b>" + i + ": </b> " + vote + " - " + nrc + add 
+ "<br/>"
+        }
+        timeouts[issueid] = window.setTimeout(showDetails, 2500, issueid, true)
+    }
+    
 }
 
 
 function showChanges(issue) {
-       var parent = document.getElementById('issue_' + issue.id)
-       var header = document.getElementById('issue_' + issue.id + "_header")
-       if (rigged) {
-               document.getElementById('title').innerHTML = "<font 
color='red'>ELECTION HAS BEEN CHANGED SINCE IT OPENED, POSSIBLE RIGGING 
ATTEMPT!</font>"
-       }
-       if (!parent) {
-               parent = document.createElement('div')
-               parent.setAttribute("id", "issue_" + issue.id)
-               parent.setAttribute("class", "monitor_issue")
-               document.getElementById('contents').appendChild(parent)
-               
-               parent.innerHTML = "<h3>Issue #" + issue.id + ": " + 
issue.title + "</h3>"
-               
-               header = document.createElement('div')
-               header.setAttribute("id", "issue_" + issue.id + "_header")
-               header.innerHTML = "Awaiting vote data...hang on!"
-               parent.appendChild(header)
-               
-               details = document.createElement('div')
-               details.setAttribute("id", "issue_" + issue.id + "_details")
-               details.setAttribute("class", "monitor_details")
-               parent.appendChild(details)
-               
-               window.setTimeout(showChanges, 2000, issue)
-       } else {
-               window.setTimeout(showChanges, 15000, issue)
-               numvotes = 0;
-               if (votes[issue.id]) {
-                       for (i in votes[issue.id]) numvotes++;
-               }
-               if (numvotes > 0) {
-                       var v = votes[issue.id]
-                       var a = calcChanges(issue.id, oldvotes[issue.id], v)
-                       sinceLast = a[0]
-                       nrc = a[1]
-                       header.innerHTML = ""
-                       if (riggedIssues[issue.id] && 
riggedIssues[issue.id].length > 0) {
-                               header.innerHTML += "<a href='#' 
onclick=\"alert(riggedIssues['" + issue.id + "']);\"><font color='red'>ISSUE 
POSSIBLY RIGGED! </font></a><br/> "
-                       }
-                       header.innerHTML += numvotes + " votes cast, " + 
sinceLast + " new votes cast since last update. " + recasts[issue.id] + " votes 
have been recast, split among " + nrc + " voters."
-                       header.innerHTML += " <a 
href='javascript:void(showDetails(\"" + issue.id + "\"));'>Show details</a>"
-                       header.innerHTML += " &nbsp; <a 
href='/steve/admin/monitor/" + eid + "/" + issue.id + "' target='_blank'>Get 
JSON</a>"
-               } else {
-                       header.innerHTML = "No votes cast yet..!"
-               }
-       }
-       getJSON("/steve/admin/monitor/" + eid + "/" + issue.id, issue.id, 
updateVotes)
-       
-       
-       
+    var parent = document.getElementById('issue_' + issue.id)
+    var header = document.getElementById('issue_' + issue.id + "_header")
+    if (rigged) {
+        document.getElementById('title').innerHTML = "<font 
color='red'>ELECTION HAS BEEN CHANGED SINCE IT OPENED, POSSIBLE RIGGING 
ATTEMPT!</font>"
+    }
+    if (!parent) {
+        parent = document.createElement('div')
+        parent.setAttribute("id", "issue_" + issue.id)
+        parent.setAttribute("class", "monitor_issue")
+        document.getElementById('contents').appendChild(parent)
+        
+        parent.innerHTML = "<h3>Issue #" + issue.id + ": " + issue.title + 
"</h3>"
+        
+        header = document.createElement('div')
+        header.setAttribute("id", "issue_" + issue.id + "_header")
+        header.innerHTML = "Awaiting vote data...hang on!"
+        parent.appendChild(header)
+        
+        details = document.createElement('div')
+        details.setAttribute("id", "issue_" + issue.id + "_details")
+        details.setAttribute("class", "monitor_details")
+        parent.appendChild(details)
+        
+        window.setTimeout(showChanges, 2000, issue)
+    } else {
+        window.setTimeout(showChanges, 15000, issue)
+        numvotes = 0;
+        if (votes[issue.id]) {
+            for (i in votes[issue.id]) numvotes++;
+        }
+        if (numvotes > 0) {
+            var v = votes[issue.id]
+            var a = calcChanges(issue.id, oldvotes[issue.id], v)
+            sinceLast = a[0]
+            nrc = a[1]
+            header.innerHTML = ""
+            if (riggedIssues[issue.id] && riggedIssues[issue.id].length > 0) {
+                header.innerHTML += "<a href='#' 
onclick=\"alert(riggedIssues['" + issue.id + "']);\"><font color='red'>ISSUE 
POSSIBLY RIGGED! </font></a><br/> "
+            }
+            header.innerHTML += numvotes + " votes cast, " + sinceLast + " new 
votes cast since last update. " + recasts[issue.id] + " votes have been recast, 
split among " + nrc + " voters."
+            header.innerHTML += " <a href='javascript:void(showDetails(\"" + 
issue.id + "\"));'>Show details</a>"
+            header.innerHTML += " &nbsp; <a href='/steve/admin/monitor/" + eid 
+ "/" + issue.id + "' target='_blank'>Get JSON</a>"
+        } else {
+            header.innerHTML = "No votes cast yet..!"
+        }
+    }
+    getJSON("/steve/admin/monitor/" + eid + "/" + issue.id, issue.id, 
updateVotes)
+    
+    
+    
 }
 
 
 function disableF5(e) {
-       if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) {
-               e.preventDefault();
-               alert("PLEASE...Do not refresh this page")
-       }
+    if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) {
+        e.preventDefault();
+        alert("PLEASE...Do not refresh this page")
+    }
 }
 
 window.onkeydown = disableF5
\ No newline at end of file


Reply via email to