var g_RequestMgr = new RequestMgr();
function RequestMgr() {
    var me = this;
    this.createRequest = function () {
        var request=null;
        try { request = new XMLHttpRequest();} 
        catch (trymicrosoft) {
            try { request = new ActiveXObject("Msxml2.XMLHTTP"); } 
            catch (othermicrosoft) {
                try { request = new ActiveXObject("Microsoft.XMLHTTP"); } 
                catch (failed) { request = null;}
            }
        }
    
        if (!request) { alert("Error initializing XMLHttpRequest!"); }
        return request;
    }
    this.syncCall = function (url, callback, payload, method, noServiceText ) {
        if (!noServiceText) noServiceText = url + " service not available";
        var request = me.createRequest();
        var sendMethod = "POST";
        if (method) sendMethod = method;
        
        var newUrl=url;
        var data=null;
        if (sendMethod=="GET") {
            newUrl += ("?" + payload);
        } else {
            data=payload;
        }
        request.open(sendMethod, newUrl, false);
        if (data)             // Specify that the body of the request contains form data
            request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        request.send(data);
        if (request.status == 200) {
            if (request.responseText != null && request.responseText.length>0) {
                callback(request.responseText);
            }            
        } 
        else {
            alert(noServiceText);
        }
        
    }    
}


function getFormData(form) {
    var formData = "FORM=voting_access_feedback_form";
    for (var e=0;e<form.elements.length;e++) 
    {
	var el = form.elements[e];
	var type = el.type;
   	var val=""; 
        if (type !=null )
        {
		if (type=='checkbox') { 
			if (el.checked == true) {
				val="1";
			}
		}
		else {
			val = el.value.replace(/&/g, "%26");
		}
		if (val != "") {
        		formData += "&";
        		formData += el.name + "=" + val;
		}
        }
    }
    return formData;
}

function verifyAndSubmit(form) {
    var url="/cgi-bin/state/elections/voting_difficulties.pl"; //fixme
    var payload= getFormData(form);
    var method="POST";
    
    function callback(responseText) {
	
        var parent = form.parentNode;
	var errorDiv = document.getElementById("errorDiv");
	if (errorDiv) {
		parent.removeChild(errorDiv);
	}
	
        var newChild = document.createElement("div");
	newChild.id = "errorDiv";
	newChild.style.textAlign="left";
	if (responseText.match("ERROR") != null) {
		var newResponse = responseText.replace(/^ERROR/, "");
        	newChild.innerHTML = newResponse;
        	parent.insertBefore(newChild, form);
		window.scrollTo(0, 0);
	}
	else {
        	newChild.innerHTML = responseText;
        	parent.replaceChild(newChild, form);
	}
    }
    g_RequestMgr.syncCall (url, callback, payload, method );
    return false;
}

function bodyloaded() {
	var scriptcheck = document.getElementById("javascriptcheck");
	if (scriptcheck) {
		scriptcheck.style.display="none";
	}
}

