//
// AJAX.js
// a quick library that lets you define your ajax XML HTTP calls
// based on http://www.degraeve.com/reference/simple-ajax-example.php


function AJAXPost(params, target, successFxn, failureFxn) {
    var xmlHttpReq = false;
    var self = this;
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    alert("your browser doesn't support AJAX requests. Support for these requests is required for Runometer.");
    }
    try {
            self.xmlHttpReq.open('POST', target, true);
    } catch (ex) {
        alert("Unable to post data; "+ex);
    }

    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            if ( (self.xmlHttpReq.status == 200) && (successFxn != null) ) {
                successFxn(self.xmlHttpReq.responseXML, params);
            } else {
                if (failureFxn != null)	{
                    failureFxn(self.xmlHttpReq.responseText, params);
                }
            }
        }
    }
    self.xmlHttpReq.send(paramDistill(params));
}

function paramDistill(params) {
	var parameterList = '';
	var firsttime = true;
	if ((undefined == params) || (null === params)) {
		return '';
	} else {
		for (var key in params) {
			if (! firsttime) {
				parameterList += "&";
			} else {
				firsttime = false;
			}
			
			if(key.indexOf("[]")!=-1){
				var values = params[key].split(",");
				for(var i=0; i<values.length; i++){
					if (! firsttime) {
						parameterList += "&";
					} else {
						firsttime = false;
					}
					parameterList += key + "=" +escape(values[i]);
				}
			} else {
				parameterList += key + "=" + escape(params[key]);		
			}
		}
	  }
	  return parameterList;
}
