if (isJsEnabled()) {
  addLoadEvent(voteUpDownAutoAttach);
}

function voteUpDownAutoAttach() {
  var vdb = [];
  var spans = document.getElementsByTagName('span');
  for (var i = 0; span = spans[i]; i++) {
    if (span && (hasClass(span, 'vote-ok-inact') || hasClass(span, 'vote-up-inact') || hasClass(span, 'vote-down-inact') || hasClass(span, 'vote-zero-inact') || hasClass(span, 'vote-ok-act') || hasClass(span, 'vote-up-act') || hasClass(span, 'vote-down-act') || hasClass(span, 'vote-zero-act'))) {
      // Read in the path to the PHP handler
      uri = span.getAttribute('link0');
      id  = span.getAttribute('id');
      
      if (!vdb[uri]) {
        vdb[uri] = new VDB(span, uri, id);
      } 
    }
  }
}

/**
 * A Vote DataBase object
 */
function VDB(elt, uri, id) {
  var db = this;
  // By making the span element a property of this object,
  // we get the ability to attach behaviours to that element.
  this.elt = elt;
  this.uri = uri;
  this.id  = id;  
  this.elt.onclick = function() {
    HTTPGet(db.uri, db.receive, db);
  }
}

/**
 * HTTP callback function.
 */
VDB.prototype.receive = function(string, xmlhttp, vdb) {
  if (xmlhttp.status != 200) {
    //return alert('An HTTP error '+ xmlhttp.status +' occured.\n'+ vdb.uri);
  }
  // extract the cid so we can change other elements for the same cid
  var cid = vdb.id.match(/[0-9]+$/);
  var pid = 'vote_points_' + cid;
  //update the voting arrows
  var elem = document.getElementById(vdb.id);
  if (hasClass(elem, 'vote-up-inact')) {  // UP
  	removeClass(elem, 'vote-up-inact');
  	addClass(elem, 'vote-up-act');
  	var did = 'vote_down_' + cid;
    var elem2 = document.getElementById(did);    
  	if (elem2) {
      removeClass(elem2, 'vote-down-act');
    	addClass(elem2, 'vote-down-inact');
    }
    var did = 'vote_ok_' + cid;
    var elem2 = document.getElementById(did);    
  	if (elem2) {
      removeClass(elem2, 'vote-ok-act');
    	addClass(elem2, 'vote-ok-inact');
    }
    var did = 'vote_zero_' + cid;
    var elem2 = document.getElementById(did);    
    if (elem2) {
    	removeClass(elem2, 'vote-zero-act');
    	addClass(elem2, 'vote-zero-inact');
    }
  } else if (hasClass(elem, 'vote-up-act')) { // UP Act
    removeClass(elem, 'vote-up-act');
    addClass(elem, 'vote-up-inact');
  } else if (hasClass(elem, 'vote-down-inact')) { // DOWN
    removeClass(elem, 'vote-down-inact');
    addClass(elem, 'vote-down-act');
    var uid = 'vote_up_' + cid;
    var elem2 = document.getElementById(uid);
    removeClass(elem2, 'vote-up-act');
    addClass(elem2, 'vote-up-inact');
	  var did = 'vote_zero_' + cid;
    var elem2 = document.getElementById(did);    
    if (elem2) {
	     removeClass(elem2, 'vote-zero-act');
	     addClass(elem2, 'vote-zero-inact');
	  }
  } else if (hasClass(elem, 'vote-zero-inact')) { // ZERO
    removeClass(elem, 'vote-zero-inact');
    addClass(elem, 'vote-zero-act');
    var uid = 'vote_up_' + cid;
    var elem2 = document.getElementById(uid);
    removeClass(elem2, 'vote-up-act');
    addClass(elem2, 'vote-up-inact');
	 var did = 'vote_down_' + cid;
   var elem2 = document.getElementById(did);    
	 if (elem2) {
      removeClass(elem2, 'vote-down-act');
	     addClass(elem2, 'vote-down-inact');
	   }
	 var did = 'vote_ok_' + cid;
   var elem2 = document.getElementById(did);    
	 if (elem2) {
      removeClass(elem2, 'vote-ok-act');
	    addClass(elem2, 'vote-ok-inact');
	  }
  } else if (hasClass(elem, 'vote-ok-inact')) { // 1/2
    removeClass(elem, 'vote-ok-inact');
    addClass(elem, 'vote-ok-act');
    var did = 'vote_up_' + cid;
    var elem2 = document.getElementById(did);    
	 removeClass(elem2, 'vote-up-act');
	 addClass(elem2, 'vote-up-inact');    
    var did = 'vote_zero_' + cid;
    var elem2 = document.getElementById(did);   
    if (elem2) { 
	   removeClass(elem2, 'vote-zero-act');
	   addClass(elem2, 'vote-zero-inact');
	  }
  }
  
  
  // update the points
  document.getElementById(pid).innerHTML = string;
}
