Ajax = {
	get: function(url, callbacks, headers) {
		var req = new XMLHttpRequest();
		//var qstr = this.createQueryString(params);
		this.setCallbacks(req, callbacks);
		var qstr = "";
		if(qstr !== "") { qstr = "?" + qstr; }
		//enyo.log("AJAX GET URL: " + url + qstr);
		req.open('GET', url + qstr);
		//Headers
		if(headers) {
			for(var i = 0; i < headers.length; i++) {
				req.setRequestHeader(headers[i].key, headers[i].value);
			}
		}
		req.send(null);
	},
	post: function(url, callbacks, headers, body) {
		var req = new XMLHttpRequest();
		this.setCallbacks(req, callbacks);
		
		req.open('POST', url);
		
		if(body) {
			//Need this? Might need multipart.
			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		} 
				
		if(headers) {
			for(var i = 0; i < headers.length; i++) {
				req.setRequestHeader(headers[i].key, headers[i].value);
			}
		}
		if(body) { req.send(body); } 
		else { req.send(null); }
	},
	createQueryString: function(params) {
		var qstr = '';
		for (var i = 0; i < params.length; i++) {
			if(i > 0) {
				qstr += '&';
			}
			qstr += params[i].key + '=' + params[i].value;
		}
		return qstr;
	},
	setCallbacks: function(req, cb) {
		req.onreadystatechange = function() {
			//AJAX REQUEST: COMPLETE
			if(req.readyState == 4) {
				//GENERIC SUCCESS
				if(req.status.toString().match(/^2\d\d$/) && cb.onSuccess) {
					cb.onSuccess(req);
				}
				//GENERIC FAILURE
				else if((req.status.toString().match(/^4\d\d$/) || req.status.toString().match(/^5\d\d$/)) && cb.onFailure) {
					console.log("GENERIC AJAX FAILURE");
					cb.onFailure(req);
				}
				else {
					console.log("GENERIC AJAX FAILURE");
					cb.onFailure(req);
				
				}
			}
			//TODO: add additional readystates
		};
	},
	
	// -------------------- Helper Methods -------------------- //
	queryStringToParams: function(qs) {
		var pairs = qs.split("&");
		var result = { error: false };
		for(var i = 0; i < pairs.length; i++) {
			var tokens = pairs[i].split("=");
			result[tokens[0]] = tokens[1];
		}
		return result;
	},
	paramsToQueryString: function(params) {
		//TODO
	},
	paramsToAuthHeader: function(params) {
		//TODO
	},
	isValidUrl: function(url) {
		return url.match(/^[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9\-_%&\?\/\.=]+$/);
	}
};

