// JavaScript Document<script type="text/javascript" language="javascript">

var kt_http_request = false;
var kt_reply_func	= null;
var kt_ajax_queue 	= new Array();
var kt_ajax_log 	= new Array();
var kt_ajax_pilot 	= 0;
var kt_ajax_logid 	= 0;
var kt_ajax_abort_req = false;
var kt_ajax_aborted	= false;

function kt_ajax_alert(val){
	var elem = document.getElementById('ajax_log');			
	if (elem && (val != '')){
		elem.innerHTML += ' - '+val+'<br />';
	}	
	kt_ajax_logid++;
}

function kt_ajax_discard(url){
	var i = kt_ajax_pilot;
	while (i < kt_ajax_queue.length){
		var itm = kt_ajax_queue[i];
		if (url == itm.url){
			//alert('[discard]['+i+'] '+itm.url);
			var ext_msg = '';
			if (i == kt_ajax_pilot){
				if (kt_http_request){
					/*
					alert('['+i+']'+kt_ajax_queue);
					kt_ajax_queue.splice(i,1);
					alert('['+i+']'+kt_ajax_queue);
					*/
					
					// Cancel current
					//kt_ajax_alert('[abort] '+kt_http_request.readyState);
					kt_ajax_abort_req = true;
					kt_http_request.abort();					
				}
				ext_msg = '(was busy)';
			} else {				
				kt_ajax_queue.splice(i,1);
				ext_msg = '(was queued)';
			}			
			kt_ajax_alert('Discard [<a href="'+itm.url+'">req '+i+'</a>] '+ext_msg);
			
			//kt_http_request = false;
			//kt_ajax_do_request(kt_ajax_pilot);
		}
		i++;
	}
}

function kt_ajax_do_request(pilot){		
	obj = kt_ajax_queue[pilot];
	if (obj && !kt_ajax_aborted){
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
		   kt_http_request = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
		   kt_http_request = new ActiveXObject("Microsoft.XMLHTTP");
		}
		kt_http_request.onreadystatechange = alertContents;
		kt_http_request.open('POST', obj.url, true);		
		kt_ajax_alert('[<a target="_blank" href="'+obj.url+'">Request</a>]');				
		kt_http_request.send(null);				
	}
}

function kt_ajax_req(url,reply_func) {	
	var busy = false;
	if (kt_http_request){
		busy = true;
	}

	var obj = new Object();
	obj.url = new String(url);		
	obj.reply_func = reply_func;
	kt_ajax_queue[kt_ajax_queue.length] = obj;
	
	if (!busy){		
		kt_ajax_do_request(kt_ajax_pilot);		
	} else {
		kt_ajax_alert('<a target="_blank" href="'+obj.url+'">Queue['+(kt_ajax_queue.length-1)+'] (length = '+(kt_ajax_queue.length-1)+')</a>');
	}
}

function alertContents() {			
	if (kt_http_request){
		//kt_ajax_alert('[readyState]'+kt_http_request.readyState);
		if (kt_http_request.readyState == 4) {
			if (kt_ajax_abort_req){
				kt_ajax_pilot++;
				kt_ajax_alert('[Aborted] (next = '+kt_ajax_pilot+') (queue length = '+kt_ajax_queue.length+')');
				kt_ajax_abort_req = false;				

				if (kt_ajax_pilot < kt_ajax_queue.length){
					kt_http_request = false;
					
					var obj = kt_ajax_queue[kt_ajax_pilot];
					if (obj && !kt_http_request){											
						//kt_ajax_alert('<a href="'+obj.url+'">Next (queued = '+(kt_ajax_queue.length-1)+')</a>');					
						kt_ajax_req(obj.url,obj.reply_func);
					}
				} else {
					kt_http_request = false;
				}

				//kt_http_request = false;
				//kt_ajax_do_request(kt_ajax_pilot);				
			} else	if (kt_http_request.status == 200) {			
				var responseText = kt_http_request.responseText;
				var this_obj = kt_ajax_queue[kt_ajax_pilot];
	
				var style = 'font-family: Verdana, Arial, Helvetica, sans-serif; '+
							'font-size: 9px; font-weight: normal; color: #000000; '+
							'background-color: #FFFFFF; border: 1px solid #CCCCCC;';
				kt_ajax_alert('Reply [<a href="javascript:box_toggle(\'repl_'+kt_ajax_logid+'\');">req '+kt_ajax_pilot+'</a>] '+
							'from [<a href="'+this_obj.url+'">source</a>]'+
							'<span id="repl_'+kt_ajax_logid+'" style="display:none">'+
								'<textarea name="textarea" cols="100" rows="20" style="'+style+'">'+
									kt_http_request.responseText+
								'</textarea>'+
							'</span>'
				);								
				
				//kt_ajax_log[kt_ajax_log.length] = this_obj;			
				kt_http_request = true;
				this_obj.reply_func(responseText);								
				kt_ajax_pilot++;
				kt_http_request = false;
								
				// If there is a queue, send next request			
				if (kt_ajax_pilot < kt_ajax_queue.length){
					//alert('[next]'+kt_ajax_pilot+' < '+kt_ajax_queue.length);
					kt_ajax_do_request(kt_ajax_pilot);
					/*
					//kt_ajax_pilot++;
					//kt_ajax_queue = kt_ajax_queue.slice(1);					
					var obj = kt_ajax_queue[kt_ajax_pilot];
					if (obj && !kt_http_request){											
						//kt_ajax_alert('<a href="'+obj.url+'">Next (queued = '+(kt_ajax_queue.length-1)+')</a>');					
						kt_ajax_req(obj.url,obj.reply_func);
					}
					*/
				}
			} else {
				//kt_ajax_pilot++;				
				kt_http_request = false;
				alert('There was a problem with an Kontrol-AJAX request.');
			}
		}	
	} else {
		kt_ajax_alert('[kt_http_request] not set');
	}
}

function test_func(val){
	alert('Test Function: '+val);
}