// adapted from https://blueprints.dev.java.net/ajax-faq.html

function Ajax(url, callback) {

    var req = init();
    req.onreadystatechange = processRequest;
        
    function init() {
		if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
		} 
		else if (window.ActiveXObject) {
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
    }
    
    function processRequest () {
      
		
    	if (req.readyState == 4) {
			if (req.status == 200) {
				if (document.getElementById(callback)) {
					
					document.getElementById(callback).innerHTML = req.responseText;
				}
				else {
					callback(req.responseText);
				}
				
			}
			else {
				if (req.status == 401) {
					alert("You are probably logged out or your session expired")
				}
			}
				
		}

	}
	
	// This was taken from mybic - all credit to Jim Plush
	// Takes your form id and creates a query string from the elements.
	// check out my-bic, it's very good!
	this.getForm = function (formid) {
		var formobj = document.getElementById(formid);
		var fields = new Array();
		var form_len = formobj.elements.length;
		for (var x = 0; x < form_len; x++) {
			switch(formobj.elements[x].type) {
			   case 'select-one':
				fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].options[formobj.elements[x].selectedIndex].value));
				break;
				case 'select-multiple':
				var obj = formobj.elements[x];
					for(var y=0; y < formobj.elements[x].options.length; y++) {
					   if(formobj.elements[x].options[y].selected) {
								if(formobj.elements[x].options[y].value == ''){
									fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].options[y].text));
								} else {
									fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].options[y].value));
								}
					   }
					}
				break;
				case 'radio':
					   if(formobj.elements[x].checked) {
							   fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].value));
					   }
		        break;
				case 'checkbox':
					if(formobj.elements[x].checked) {
						fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].value));
					}
				break;
				default:
				// text, password, textarea, etc
				fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].value));
				break;
			}
		}
		var new_qstring = '&' + fields.join('&');
		return new_qstring;
	}

    this.doGet = function() {
  
      req.open("GET", url, true);
      req.send(null);
    }
    
    this.doPost = function(form_vars) {
      req.open("POST", url, true);
      req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      req.send(form_vars);
    }
}


function ajaxGet(callback, url) {
  var ajax = new Ajax(url, callback);
  ajax.doGet();
}

function ajaxPost(callback, url, form) {
  var ajax = new Ajax(url, callback);
  var form_vars = ajax.getForm(form);
  ajax.doPost(form_vars);
}