function sendVoteCommand(postId, personId, complimentType, removeVoteFlag) {
    var button = document.getElementById("button_complimentArea_article" + postId + "_type" + complimentType);
    var request = makeHttpRequest();

    var clientData = new Object();
    clientData.postId = postId;
    clientData.personId = personId;
    clientData.complimentType = complimentType;
    clientData.removeVoteFlag = checkForStoredRemoveVoteFlag(removeVoteFlag, postId, complimentType);
    clientData.button = button;
    request.onreadystatechange = function() {
        voteResultCallback(request, clientData);
    }
    request.open("POST", "complimentArticle.s", true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    var sendText ="";
    if(clientData.removeVoteFlag == true ){
        sendText = "postId=" + postId + "&complimentType=" + complimentType + "&action=" + "remove";
    }else{
        sendText = "postId=" + postId + "&complimentType=" + complimentType + "&action=" + "add";
    }
    request.send(sendText);
    /*    alert("sent " + sendText); */
}

function checkForStoredRemoveVoteFlag(removeVoteFlag, postId, complimentType) {
    var spanVal = document.getElementById("count_complimentArea_article" + postId + "_type" + complimentType);
    var retVal = spanVal.storedRemoveVoteFlag != null ? spanVal.storedRemoveVoteFlag : removeVoteFlag;
    return retVal;
}

function makeHttpRequest() {
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
            return new XMLHttpRequest();
        } catch(e) {
            return null;
        }
        // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
            return new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return null;
            }
        }
    }
    return new XMLHttpRequest();
}

function voteResultCallback(request, clientData) {
    if(request.readyState == 4 && request.status == 200) {
        if(request.responseText.indexOf("success") != -1) {
            doUpdateComplimentCountArea(clientData.postId, clientData.personId, clientData.complimentType, clientData.removeVoteFlag);
        }
        else {
            showUnsuccessful(clientData.postId, clientData.personId, clientData.complimentType, clientData.removeVoteFlag);
        }
    } else if (request.readyState == 4 && request.status != 200) {
        showComplimentError(clientData.postId, clientData.personId, clientData.complimentType, clientData.removeVoteFlag);
    }
}

function  doUpdateComplimentCountArea(postId, personId, complimentType, removeVoteFlag) {
    compliment_enableButton(postId, complimentType);
    var countDiv = document.getElementById("count_complimentArea_article" + postId + "_type" + complimentType);
    var value = countDiv.innerHTML - 0;
    if(removeVoteFlag == true){
        value =  value - 1
    }else{
        value =  value + 1;        
    }
    countDiv.innerHTML = value + "";
    var spanVal = document.getElementById("count_complimentArea_article" + postId + "_type" + complimentType);
    if(removeVoteFlag == true){
        spanVal.storedRemoveVoteFlag = false;
    }else{
        spanVal.storedRemoveVoteFlag = true;
    }
    var button = document.getElementById("button_complimentArea_article" + postId + "_type" + complimentType);
    button.alreadyVoted = spanVal.storedRemoveVoteFlag;
    complimentButtonInitialView(button);
}

function compliment_enableButton(postId, complimentType) {
    var button = document.getElementById("button_complimentArea_article" + postId + "_type" + complimentType);
}

function showUnsuccessful(postId, personId, complimentType, removeVoteFlag) {
    alert("unsuccessful trying to " + (removeVoteFlag ? "remove" : "add" ) + " compliment on article" + postId + " by person " + personId + " with compliment type " + complimentType);
    compliment_enableButton(postId, complimentType);
}

function showComplimentError(postId, personId, complimentType, removeVoteFlag) {
    alert("error trying to " + (removeVoteFlag ? "remove" : "add" ) + " compliment on article" + postId + " by person " + personId + " with compliment type " + complimentType);
    compliment_enableButton(postId, complimentType);
}

var complimentImagePrefix = "images/buttons/compliments/buttonComp";

function makeImageUrl(prefix, extension) {
    return "url(" + complimentImagePrefix + prefix + extension + ".gif)";
}

function compliment_mouseover (button) {
    if(!button.pressOccurred) {
        button.style.backgroundImage = makeImageUrl(button.imagePrefix, button.alreadyVoted ? "_selectedOver" : "_over");
    } else {
        button.style.backgroundImage = makeImageUrl(button.imagePrefix, button.alreadyVoted ? "_selected" : "");
    }
}

function compliment_mouseout (button) {
    button.style.backgroundImage = makeImageUrl(button.imagePrefix, button.alreadyVoted ? "_selected" : "");
    button.pressOccurred = false;
}

function compliment_mousedown (button) {
    button.style.backgroundImage = makeImageUrl(button.imagePrefix, button.alreadyVoted ? "_selectedDown" : "_down");
    button.pressOccurred = true;
}

function compliment_mouseup (button) {
}

function complimentButtonInitialView(button) {
    button.style.backgroundImage = makeImageUrl(button.imagePrefix, button.alreadyVoted ? "_selected" : "");
}

