Source: __methods_atom.js



"use strict";	
/** 
 * @module _methodsAtom
 *
 */

var FAM = "LOADER_METHOD"

/**
 * @function _methodsAtom:load
 * @description atom ( non assertive version of load ) basic load function that returns a Promise
 *   taken from http://www.html5rocks.com/en/tutorials/es6/promises/ <br>
 * 
 * @param {string} method
 * @param {string} url
 * @param {object} xmit (optional)
 *	@description: allows adding an Xmit instance for setting up events that 
 *   way in addition to the Promise that is returned
 * @returns {object} Promise
 */

function load(method, url, xmit) {
	xmit = (xmit && xmit.FAMILY === "XMIT") ? xmit : false;
	return new Promise( 
		function(resolve, reject) { 
			var rq = new XMLHttpRequest();
			rq.open(method, url);
			rq.onload = function() { 
				if (rq.status === 200) { 
					if (xmit!==false) xmit.xmit(83400, rq.response);
					resolve(rq.response);
				} else { 
					if (xmit!==false) xmit.xmit(834402, rq.statusText)
					reject(Error(rq.statusText));
				}
			}

			rq.onerror = function() { 
				if (xmit!==false) xmit.xmit(834402, rq.statusText)
				reject(Error("network error"));
			}

			rq.send();
		}
	);
}
load.prototype.FAMILY = FAM;


/**
 * @function _methodsAtom:get 
 * @description calls load with GET as method
 * @param {string} url
 * @returns {object} Promise
 */
function get(url) { 
	return load("GET", url);
}

/**
 * @function _methodsAtom:post
 * @description calls load with POST as method
 * @param {string} url
 * @returns {object} Promise
 */
function post(url) { 
	return load("POST", url);
}

load.prototype.FAMILY = 
	get.prototype.FAMILY = 
	post.prototype.FAMILY = FAM

module.exports = { 
	load:load,
	get:get,
	post:post
}