/**
 * ajax.js
 *
 **/

var request;       
var elementUpdate; 

//Create the XMLHttpRequest depending of the type of browser.
function httpRequest(requestType,url,form,eUpdate) {
    elementUpdate = eUpdate;
    
    if(window.XMLHttpRequest){
        request = new XMLHttpRequest();
    } else if (window.ActiveXObject){
        request = new ActiveXObject("Msxml2.XMLHTTP"); //Mozilla
        if (!request)
            request = new ActiveXObject("Microsoft.XMLHTTP"); //Microsoft
    }
    if(request)
        initReq(requestType,url,form);
    else
        alert("Your browser cannot execute this application!");
}

//Creates the conection with the remote server.
function initReq(requestType,url,form){
    try{
        if(form != null && requestType.toLowerCase() == "get")
            url=url+"?"+getFormAsString(form);
        
        request.onreadystatechange=handleResponse;
        
        request.open(requestType,url,true);

        if(requestType.toLowerCase() == "post") {
            request.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded; charset=ISO-8859-1");
            if(form != null)
                request.send(getFormAsString(form));
            else
                request.send(null);
        } else
            request.send(null);
    } catch (errv) {
        alert(  "The server cannot be called.\n"+
        "Please try again in a few seconds.\n"+
        "Error detail: "+errv.message);
    }
}

//Gets the contents of the form
function getFormAsString(form){
    var URLCodif = "";

    var formElements = form.elements;

    var sizeElements = formElements.length;
    
    for ( var i = sizeElements-1; i >= 0; --i ){
        if(i == sizeElements-1)
            URLCodif = escape(formElements[i].name) + "=" + escape(formElements[i].value);
        else
            URLCodif = URLCodif + "&" + escape(formElements[i].name) + "=" + escape(formElements[i].value);
    }
    return URLCodif; 
}

//Handles the state of the response.
function handleResponse() {
    if(request.readyState == 1 ||         //Server busy
            request.readyState == 2 ||  
            request.readyState == 3){  
    }
    else if (request.readyState == 4) { 
        if (request.status == 200) { //URL founded
            processResp();
        } else if (request.status == 404) { // URL not found
            alert("Cannot connect to the URL");
        } else if (request.status == 414) {
            alert("Forbidden values");
        } else {
            alert("Server Problem");  //Server error
        }
    }
}

//Process the response
function processResp(){
    var resp = request.responseText;
    var state = resp.substring(resp.indexOf("~")-6,resp.indexOf("~"));
    resp = resp.substring(resp.indexOf("~")+1,resp.length);
    
    if(state.toLowerCase() != "errors"){
        if(elementUpdate.tagName.toLowerCase() == "input" || 
        elementUpdate.tagName.toLowerCase() == "textarea")
            elementUpdate.value = resp;
        else
            elementUpdate.innerHTML = resp;
    } else
        document.getElementById("error").innerHTML = resp;
}

//Changes the inner HTML of the object in the param
function change(form){
    //Uses AJAX
    var id = form.sondage.value;                //Id of the poll
    var radios = form.option;                   //Option selected
    var error = form.error.value;               //Error string
    var template = form.templateResult.value;   //Template file
    var values = '';                            //Radios values
    var url = window.location;                  //URL location

    for (i = 0; i < radios.length; i++){
        if (radios[i].checked){
            var value = radios[i].value;
        }
        if (values == ''){
            values = radios[i].value;
        }
        else{
            values = values +'$$'+ radios[i].value;
        }
    }
    ident = '1'; 
    form.innerHTML='';
    httpRequest('POST','/mmcm-poll/OpinionPollServlet?id='+id+'&radio='+value+'&values='+values+
                        '&url='+url+'&template='+template+'&error='+error,null,form);    
    return false;
}