docs: function(url, data, options, callback, callbackID, timeout) {
  
  		var _this = this;
  		var error = _this.error;
  		var doc = document;
  
  		// This hack needs a form
  		var form = null;
  		var reenableAfterSubmit = [];
  		var newform;
  		var i = 0;
  		var x = null;
  		var bool = 0;
  		var cb = function(r) {
  			if (!(bool++)) {
  				callback(r);
  			}
  		};
  
  		// What is the name of the callback to contain
  		// We'll also use this to name the iframe
  		_this.globalEvent(cb, callbackID);
  
  		// Build the iframe window
  		var win;
  		try {
  			// IE7 hack, only lets us define the name here, not later.
  			win = doc.createElement('<iframe name="' + callbackID + '">');
  		}
  		catch (e) {
  			win = doc.createElement('iframe');
  		}
  
  		win.name = callbackID;
  		win.id = callbackID;
  		win.style.display = 'none';
  
  		// Override callback mechanism. Triggger a response onload/onerror
  		if (options && options.callbackonload) {
  			// Onload is being fired twice
  			win.onload = function() {
  				cb({
  					response: 'posted',
  					message: 'Content was posted'
  				});
  			};
  		}
  
  		if (timeout) {
  			setTimeout(function() {
  				cb(error('timeout', 'The post operation timed out'));
  			}, timeout);
  		}
  
  		doc.body.appendChild(win);
  
  		// If we are just posting a single item
  		if (_this.domInstance('form', data)) {
  			// Get the parent form
  			form = data.form;
  
  			// Loop through and disable all of its siblings
  			for (i = 0; i < form.elements.length; i++) {
  				if (form.elements[i] !== data) {
  					form.elements[i].setAttribute('disabled', true);
  				}
  			}
  
  			// Move the focus to the form
  			data = form;
  		}
  
  		// Posting a form
  		if (_this.domInstance('form', data)) {
  			// This is a form element
  			form = data;
  
  			// Does this form need to be a multipart form?
  			for (i = 0; i < form.elements.length; i++) {
  				if (!form.elements[i].disabled && form.elements[i].type === 'file') {
  					form.encoding = form.enctype = 'multipart/form-data';
  					form.elements[i].setAttribute('name', 'file');
  				}
  			}
  		}
  		else {
  			// Its not a form element,
  			// Therefore it must be a JSON object of Key=>Value or Key=>Element
  			// If anyone of those values are a input type=file we shall shall insert its siblings into the form for which it belongs.
  			for (x in data) if (data.hasOwnProperty(x)) {
  				// Is this an input Element?
  				if (_this.domInstance('input', data[x]) && data[x].type === 'file') {
  					form = data[x].form;
  					form.encoding = form.enctype = 'multipart/form-data';
  				}
  			}
  
  			// Do If there is no defined form element, lets create one.
  			if (!form) {
  				// Build form
  				form = doc.createElement('form');
  				doc.body.appendChild(form);
  				newform = form;
  			}
  
  			var input;
  
  			// Add elements to the form if they dont exist
  			for (x in data) if (data.hasOwnProperty(x)) {
  
  				// Is this an element?
  				var el = (_this.domInstance('input', data[x]) || _this.domInstance('textArea', data[x]) || _this.domInstance('select', data[x]));
  
  				// Is this not an input element, or one that exists outside the form.
  				if (!el || data[x].form !== form) {
  
  					// Does an element have the same name?
  					var inputs = form.elements[x];
  					if (input) {
  						// Remove it.
  						if (!(inputs instanceof NodeList)) {
  							inputs = [inputs];
  						}
  
  						for (i = 0; i < inputs.length; i++) {
  							inputs[i].parentNode.removeChild(inputs[i]);
  						}
  
  					}
  
  					// Create an input element
  					input = doc.createElement('input');
  					input.setAttribute('type', 'hidden');
  					input.setAttribute('name', x);
  
  					// Does it have a value attribute?
  					if (el) {
  						input.value = data[x].value;
  					}
  					else if (_this.domInstance(null, data[x])) {
  						input.value = data[x].innerHTML || data[x].innerText;
  					}
  					else {
  						input.value = data[x];
  					}
  
  					form.appendChild(input);
  				}
  
  				// It is an element, which exists within the form, but the name is wrong
  				else if (el && data[x].name !== x) {
  					data[x].setAttribute('name', x);
  					data[x].name = x;
  				}
  			}
  
  			// Disable elements from within the form if they weren't specified
  			for (i = 0; i < form.elements.length; i++) {
  
  				input = form.elements[i];
  
  				// Does the same name and value exist in the parent
  				if (!(input.name in data) && input.getAttribute('disabled') !== true) {
  					// Disable
  					input.setAttribute('disabled', true);
  
  					// Add re-enable to callback
  					reenableAfterSubmit.push(input);
  				}
  			}
  		}
  
  		// Set the target of the form
  		form.setAttribute('method', 'POST');
  		form.setAttribute('target', callbackID);
  		form.target = callbackID;
  
  		// Update the form URL
  		form.setAttribute('action', url);
  
  		// Submit the form
  		// Some reason this needs to be offset from the current window execution
  		setTimeout(function() {
  			form.submit();
  
  			setTimeout(function() {
  				try {
  					// Remove the iframe from the page.
  					//win.parentNode.removeChild(win);
  					// Remove the form
  					if (newform) {
  						newform.parentNode.removeChild(newform);
  					}
  				}
  				catch (e) {
  					try {
  						console.error('HelloJS: could not remove iframe');
  					}
  					catch (ee) {}
  				}
  
  				// Reenable the disabled form
  				for (var i = 0; i < reenableAfterSubmit.length; i++) {
  					if (reenableAfterSubmit[i]) {
  						reenableAfterSubmit[i].setAttribute('disabled', false);
  						reenableAfterSubmit[i].disabled = false;
  					}
  				}
  			}, 0);
  		}, 100);
  	}