var jah_inuse = new Array();
var jah_queue = new Array();
var jah_busy = new Array();

var jah_last_data = new Array();
var jah_last_jah = new Array();

//onClick="sub(this.form)"
function post(url, target, form){
    var str = getFormValues(form);

    open('POST&*/:' + url + '&*/:' + str, target);
}
/*
 * de functie open wordt later jah
 */

//function jah(url,target) {
//    open('GET&*/:' + url,target);
//}
function get(url,target) {
    open('GET&*/:' + url,target);
}
function open(url,target){
	if(jah_inuse[0] == 1){
		jah_put_in_queue(url,target);
	}else{
		// native XMLHttpRequest object
		document.getElementById('JahStatus').innerHTML = 'Jah is loading...';
		jah_inuse[0]=1;
		jah_busy[0] = url+"||"+target;
          var uurl = url.split("&*/:");
          var type = uurl[0];
          url = uurl[1];
          var post = uurl[2];
		if (window.XMLHttpRequest) {
			req = new XMLHttpRequest();
			req.onreadystatechange = function() {jahDone(target);};
			//req.open("GET", url, true);
			req.open(type, url, true);
               if(type == "GET"){
                   req.send(null);
               }else{
                   req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                   req.send(post);
               }
		// IE/Windows ActiveX version
		} else if (window.ActiveXObject) {
			req = new ActiveXObject("Microsoft.XMLHTTP");
			if (req) {
				req.onreadystatechange = function() {jahDone(target);};
				//req.open("GET", url, true);
				req.open(type, url, true);
                   if(type == "GET"){
                       req.send();
                   }else{
                       req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                       req.send(post);
                   }
			}
		}
	}
}

function jahDone(target) {
    // only if req is "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            results = req.responseText;
			document.getElementById(target).innerHTML = results;
			document.getElementById('JahStatus').innerHTML = 'Jah Is free';
        } else {
		document.getElementById(target).innerHTML="jah error: " + req.statusText;
		document.getElementById('JahStatus').innerHTML = "jah error";
        }
        jah_set_free();
    }
}

function jah_put_in_queue(url,target){
	if(!in_array(jah_queue,url+"||"+target) && jah_busy[0]!=url+"||"+target/* ++ */ && !array_box(target) && !jah_busy_box(target)/* ++ */){
		document.getElementById('JahStatus').innerHTML = 'Jah is pre-loading...';
		jah_queue[jah_queue.length]=url+"||"+target;
		if(jah_queue.length > 0){
			jah_check_queue();
		}
	}
}
function jah_set_free(){
        jah_inuse[0]=0;
        jah_busy[0] = "";
}
function jah_check_queue(){
    var d = new Date();
    if(jah_inuse[0] == 0 && jah_queue.length > 0){
        var data = jah_queue[jah_queue.length-1].split("||");
        open(data[0],data[1]);
        jah_queue.pop();

        jah_last_jah[0] = d.getTime()/1000;
        jah_last_data = data;
        //if(jah_queue.length < 1){
        //	clearTimeout(jah_timing[0]);
        //}
    }else if(jah_inuse[0] == 1 && jah_last_jah[0] + 30 < d.getTime()/1000){ // added: if we lost connection, jah "freezes", this will requeue the connection
        document.getElementById('JahStatus').innerHTML = 'Jah reset';
        jah_put_in_queue(jah_last_data[0], jah_last_data[1]);
        setTimeout("jah_set_free()", 30000);
    }
    if(jah_queue.length > 0){
        setTimeout("jah_check_queue()", 10);
    }
}
function in_array(array,string){
	for(i=0;i<array.length;i++){
		if(array[i] == string){
			return 1;
		}
	}
}
// only for checking that something for 1  box won't be loaded 2 different things at 1 time
// this is a control, so when the internet connection is slow and it takes a while to load, they won't open a 2nd thing
function array_box(string){
	for(i=0;i<jah_queue.length;i++){
		var data = jah_queue[i].split("||");
		if(data[1] == string){
			return 1;
		}
	}
}
function jah_busy_box(string){
	var data = jah_busy[0].split("||");
	if(data[1] == string){
		return 1;
	}
}
// ----------------------------------------------------------------------------------------------------------------------------

function getFormValues(fobj){
   var str = "";

   for(var i = 0;i < fobj.elements.length;i++){
       switch(fobj.elements[i].type){
           case "text":
           case "hidden":
           case "button":
                str += fobj.elements[i].name +
                 "=" + escape(fobj.elements[i].value) + "&";
                 break;
           case "select-one":
                str += fobj.elements[i].name +
                "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
                break;
           case "checkbox":
               if(fobj.elements[i].checked == true){
                    str += fobj.elements[i].name +
                     "=" + escape(fobj.elements[i].value) + "&";
               }
                break;
       }
   }
   str = str.substr(0,(str.length - 1));
   return str;
}
