var ajax_requests = new Array();

// JavaScript Document
function ajax_create_request(){
	var _http_request;
	try{
    	_http_request = new XMLHttpRequest();
		_http_request.overrideMimeType('text/xml');
	}catch(e){
		try{
			_http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e2){
			_http_request = new ActiveXObject("Microsoft.XMLHTTP");			
		}
	}
	return _http_request;
}

function ajax_gen_request(_func_data,_send,_func_js_pre,_func_js_post,_show_wait){
	if(_func_js_pre){
		eval(_func_js_pre);
	}
	ajax_make_request('data/data.asp','action='+_func_data+_send,_func_js_post,_show_wait);
}

function ajax_make_request(_url,_params,_func,_show_wait){
	var _request_id = _url+':'+_params+':'+_func;
	db('<br><br><br><br> STARTING REQUEST FOR:'+_request_id);
	if(ajax_requests[_request_id]){
		if(ajax_requests[_request_id]=='LOADING'){
			db('<br>REQUEST ALREADY BEING EXECUTED:'+_request_id);
			return;
		}else{
			db('<br>RELOADING AN OLD REQUEST:'+_request_id);
			ajax_requests[_request_id]='LOADING';
		}
	}else{
		db('<br>BRAND NEW REQUEST:'+_request_id);
		ajax_requests[_request_id]='LOADING';
	}
	var _request = ajax_create_request();
	_request.onreadystatechange = function(){
		ajax_parseCheck(_request,_func,_request_id,_show_wait);
	};
	_request.open('POST',_url, true);
	_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	_request.setRequestHeader("Content-length", _params.length);
	_request.setRequestHeader("Connection", "close");
	_request.send(_params);
}

function ajax_parse_tag(_node){
	for (var iNode = 0; iNode < _node.childNodes.length; iNode++){
		var _arr = new Array();
		var _sib = _node.childNodes[iNode];
		if(_sib.tagName){
			_arr[_arr.length]=_sib.tagName;
			if(_sib.childNodes.length>0){
				if(_sib.childNodes[0].data){
					_arr[_arr.length]=_sib.childNodes[0].data;
					addrow('test', _arr);
				}else{
					addrow('test', _arr);
					ajax_parse_tag(_sib);
				}
			}
		}
	}
}

var g_responseText;
function ajax_parseCheck(_request,_func,_request_id,_show_wait) {
var _obj,_return;
	if (_request.readyState == 4) {
	if(ajax_requests[_request_id]){
		ajax_requests[_request_id]='LOADED';
		db('<br>REQUEST COMPLETED FOR:'+_request_id+'<br><br><br><br>');
	}
	//alert(_request.responseText);
	db(_request.responseText);
	if (_request.status == 200||_request.status == 0) {
		var xmldoc = _request.responseXML;
		_node = xmldoc.documentElement;
		//alert(_request.responseText);
		if(_node){
			ajax_parse(_node);
			if(!_return){
				g_load = false;
			}
			if(_func){
				eval(_func);
			}
		}else{
//			alert('The returned code is not valid XML');
			g_responseText = _request.responseText;
//			alert(g_responseText);
//			var _data = eval("("+g_responseText+")");
//			alert(_data.site.nodes.node.nodes[2].node.source);
//			alert(g_responseText);
			if(_func){
				eval(_func);
			}
		}
	 }else{
		alert('There was a problem with the request.');
	 }
	 _request.close;
  }else{
	g_load = true;
//	if(!_show_wait)
//		fn_loading();
//	else
//		fn_loading(1);
 }
}

function ajax_parseReturn(_node){
var _message,_c;
var _agreements=new Array();
var _skills = new Array();
	var _c = _node.childNodes;
	for(var i=0; i<_c.length;i++){
		switch(_c[i].tagName){
			case 'message':_message =  ajax_getValue(_c[i].childNodes[0]);break;	
		}
	}
	//alert('change the message');
	fn_loading_changeText(_message);
	return true;
}

function ajax_getValue(_node,_debug){
var _ret;
	if(!_node){
		return '';
	}else{
		//alert(unescape(_node.data));
		if(_node.childNodes.length==1){
			if(_node.childNodes[0].nodeType==4){
				_ret = _node.childNodes[0].data;	
			}
		}else{
			_ret = _node.data	
		}
		return unescape(_ret);
	}
}

function do_xml() {
  makeRequest('xml.php', '?test=2');
}

function addrow(tablename, arr) {
var tbl = document.getElementById(tablename);
var lastRow = tbl.rows.length;
var row = tbl.insertRow(lastRow);
  for (r = 0; r < arr.length; r++) {   
	 var cell = row.insertCell(r);
	 cell.innerHTML = arr[r];
  }
}



