	//
    // Makes an AJAX request to the server 
    //
    function rank(post,change) {
	  // Encode the arguments in to a URI
      var query = 'ranking';
      query += '?pid=' + post;
	  query += '&' + 'change=' + change;
      // Create an XMLHttpRequest 'GET' request 
      try{
			req = new XMLHttpRequest();
                }
                catch (e){
                    try{
                        req = new ActiveXObject("Msxml2.XMLHTTP");
                    } 
                    catch (e){
                        try{
                            req = new ActiveXObject("Microsoft.XMLHTTP");
                        } 
                        catch (failed){
                            req = null;
                        }
                    }  
                }

                if (req == null)
                      alert("Error creating request object!");
    req.open('GET', '/' + query, true);
	req.onreadystatechange = handleRanking; 
      
	// Make the actual request
    req.send(null);
    }

    function handleRanking() {
	switch(req.readyState) {
        case 4:
            if(req.status!=200) {
				alert("Fehler:"+req.status); 
            }
			else{    
				var response = new Array();
				try {
					response = JSON.parse(req.responseText);
					}catch (e) {
						response = req.responseText;
					}
				var up_id = response[1] + "_up_png"
				var down_id = response[1] + "_down_png"
				var up = document.getElementById(up_id)
				var down = document.getElementById(down_id)
				switch(response[0]){
					case "login":
						alert("You have to be logged in to vote for posts")
						break;
					case "double_vote":
						var scoreField = document.getElementById(response[1])
						if (response[2] == "up"){
							scoreField.firstChild.nodeValue--
							up.setAttribute('src','static/up_active.png')
						}
						if (response[2] == "down"){
							scoreField.firstChild.nodeValue++
							down.setAttribute('src','static/down_active.png')
						}
						break;
					case "reset":
						var scoreField = document.getElementById(response[1])
						if (response[2] == "up") {
							scoreField.firstChild.nodeValue++
							down.setAttribute('src','static/down_active.png')
						}	
						else{
							if (response[2] == "down"){
								scoreField.firstChild.nodeValue--
								up.setAttribute('src','static/up_active.png')
							}
						}
						break;
					case "create":
						var scoreField = document.getElementById(response[1])
						if (response[2] == "up") {
							scoreField.firstChild.nodeValue++
							up.setAttribute('src','static/up.png')
						}	
						else{
							if (response[2] == "down"){
								scoreField.firstChild.nodeValue--
								down.setAttribute('src','static/down.png')								
							}
						}
						break;
				}					
			}
			break;
                default:
					return false;
					
                    break;     
    }
    }
