var arrReqs = new Array();
var reqInProgress=false;

function objReq(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5, arg6){
	this.url=url;
	this.funcName=funcName;
	this.qry=qry;
	this.getpost=getpost;
	this.uqID =  uqID;
	this.arg2 = arg2;
	this.arg3 = arg3;
	this.arg4 = arg4;
	this.arg5 = arg5;
	this.arg6 = arg6;
}

function queue_rec(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5, arg6){
	var cReq = new objReq(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5, arg6);
	arrReqs.push(cReq);
	setTimeout('tryReq()',250);
}

function tryReq(){
	if(arrReqs.length > 0){
		if(!reqInProgress){
			//reverse to grab the first item in the array
			arrReqs.reverse();
			var cReq = arrReqs.pop();
			//If theres still reqs waiting reverse back again 
			if(arrReqs.length > 0)
				arrReqs.reverse();
			make_req(cReq.url, cReq.funcName, cReq.qry, cReq.getpost, cReq.uqID, cReq.arg2, cReq.arg3, cReq.arg4, cReq.arg5, cReq.arg6);
		}
		setTimeout('tryReq()',250);
	}
}
	
function make_req(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5, arg6){
	//alert("MAKEREQ:" + url + ', ' + funcName+ ', ' + qry+ ', ' + getpost+ ', ' + uqID+ ', ' + arg2);	
	var getpost = (getpost == null) ? "GET" : getpost;
	if(reqInProgress){
		queue_rec(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5, arg6);
	}
	else{
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
				//http_request.overrideMimeType('text/xml');
			}
		} else if (window.ActiveXObject) { // IE
			try {
					http_request = new ActiveXObject("Msxml2.XMLHTTP");
				} catch (e) {
					try {
						http_request = new ActiveXObject("Microsoft.XMLHTTP");
					} catch (e) {}
				}
		}
		if (!http_request) {
			alert('Giving up :( Cannot create an XMLHTTP instance');
			reqInProgress=false;		
			return false;
		} else {
			reqInProgress=true;
			http_request.open(getpost, url, true);
			http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			http_request.onreadystatechange =   function() {
				if (http_request.readyState == 4) {
					strResponse = http_request.responseText;
					//hide_working();
					 switch (http_request.status) {
						case 404:
							alert('Error: Not Found. The requested URL ' + url + ' could not be found.');
							reqInProgress=false;
							break;
						 // Display results in a full window for server-side errors
						case 500:
							alert('Error: Not Found. The requested URL ' + url + ' could not be found. (500)');
							handleErrFullPage(strResponse);
							reqInProgress=false;
							break;
						default:
							if (strResponse.indexOf('Error:') > -1 || 
								strResponse.indexOf('Debug:') > -1) {
								alert(strResponse);
								reqInProgress=false;
							}
								// Call the desired result function
							else {
								//alert(funcName + '(' + uqID + ',  strResponse);')
								if(uqID){
									if(arg6)
										eval(funcName + '(uqID,  strResponse, arg2, arg3, arg4, arg5, arg6);');
									else if(arg5)
										eval(funcName + '(uqID,  strResponse, arg2, arg3, arg4, arg5);');
									else if(arg4)
										eval(funcName + '(uqID,  strResponse, arg2, arg3, arg4);');
									else if(arg3)
										eval(funcName + '(uqID,  strResponse, arg2, arg3);');
									else if(arg2)
											eval(funcName + '(uqID,  strResponse, arg2);');
									else
										eval(funcName + '(uqID,  strResponse);');
									
								}else
									eval(funcName + '(strResponse);');
								reqInProgress=false;
							}
							break;
					}
				}
				//else
					//show_working();
			}
			//alert(qry);
			http_request.send(qry);
		}
	}
}


function handleErrFullPage(strIn) {
	var errorWin;
	// Create new window and display error
	try {
			errorWin = window.open('', 'errorWin');
			errorWin.document.body.innerHTML = strIn;
	}
	// If pop-up gets blocked, inform user
	catch(e) {
			alert('An error occurred, but the error message cannot be' +
					' displayed because of your browser\'s pop-up blocker.\n' +
					'Please allow pop-ups from this Web site.');
	}
}

function show_update(divTarget,strMsg){
	var dTarget = document.getElementById(divTarget);
	var dUpdate = document.getElementById('divUpdate');	
	if(!strMsg)
		strMsg="Working...";
	dUpdate.innerHTML= "<table><tr><td valign=\"middle\" class=\"divAjaxMsg\">" + strMsg+ "</td></tr><table>";
	//dUpdate.style.display="Block";
	//dUpdate.style.visibility = "Visible";
	Effect.Appear('divUpdate', {duration: 0.15, fps:50, from:0.0, to:0.8});
	dUpdate.style.paddingTop = dUpdate.offsetHeight/2 +'px';
	$('divUpdate').clonePosition(dTarget);
	//clonePosition(dUpdate,dTarget);
	hide_form_elms(divTarget);		
}

function hide_update(){
	var dUpdate = document.getElementById('divUpdate');
	Effect.Fade('divUpdate', {duration: 0.15, fps:50});
	//dUpdate.style.display="None";
	//dUpdate.style.visibility = "Hidden";
	dUpdate.innerHTML="&nbsp;";
}

function getElementLeft(Elem) {	
	var elem;
	if(document.getElementById) {
		var elem = document.getElementById(Elem);
	} else if (document.all){
		var elem = document.all[Elem];
	}
	xPos = elem.offsetLeft;
	tempEl = elem.offsetParent;
	while (tempEl != null) {
		xPos += tempEl.offsetLeft;
		tempEl = tempEl.offsetParent;
	}
	return xPos;
	
}

function getElementTop(Elem) {	
	if(document.getElementById) {	
		var elem = document.getElementById(Elem);
	} else if (document.all) {
		var elem = document.all[Elem];
	}
	yPos = elem.offsetTop;
	tempEl = elem.offsetParent;
	while (tempEl != null) {
		yPos += tempEl.offsetTop;
		tempEl = tempEl.offsetParent;
	}
	return yPos;
	
}

function destroyModal(frmName, targName){
	var frmForm;
	if(frmName)					
		 frmForm = document.getElementById(frmName);
	var screenDiv = document.getElementById('divUpdate');
	
	var dDiv
	if(!targName)
	 	dDiv = document.getElementById('divUpdateForm');
	else
		dDiv = $(targName);
	//screenDiv.style.display="None";
	//screenDiv.style.visibility = "Hidden";
	//dDiv.style.display="None";
	//dDiv.style.visibility = "Hidden";
	//dDiv.innerHTML = "<strong>Updating...</strong>";
	Effect.DropOut('divUpdateForm', {fps:50});
	Effect.Fade('divUpdate', {duration:0.25, fps:100});
	if(frmForm){
		if(navigator.appName =="Microsoft Internet Explorer"){
			for (var i = 0; i < frmForm.elements.length; i++) {
				if(frmForm.elements[i].type){
					if(frmForm.elements[i].type.match('select'))
						frmForm.elements[i].style.visibility = 'visible';
				}
			}
		}
	}
	
}

function showModal(frmName,width, targName){
	//alert(frmName + ", " +width);	
	var dBody = $('divBody');
	var screenDiv = $('divUpdate');
	
	var frmForm;
	if(frmName)
		frmForm = $(frmName);
	if(!width)
		width=620;	
		
	var newDiv;
	if(!targName)
	 	newDiv = $('divUpdateForm');
	else
		newDiv = $(targName);
	
	//alert('document.body.clientHeight: ' + document.body.clientHeight + ' - document.body.scrollHeight: '  + document.body.scrollHeight + ' - document.body.offsetHeight: '  + document.body.offsetHeight + ' - document.body.scrollTop: '  + document.body.scrollTop)
	var heightOffset=0;
	if(document.documentElement.scrollTop)
		heightOffset = document.documentElement.scrollTop;
	var newHeight = document.body.scrollHeight + heightOffset;
	
	if(newHeight < document.body.clientHeight)
		newHeight = document.body.clientHeight + 10;
		
	
	screenDiv.style.zIndex = '100';
	screenDiv.absolutize();
	screenDiv.clonePosition(dBody);
	Effect.Appear('divUpdate', {duration: 0.25, from:0.0, to:0.8, fps:100});
	screenDiv.style.textAlign = "Center";
	
	newDiv.absolutize();
	newDiv.style.zIndex = '1010';
	newDiv.style.opacity = '1';
	newDiv.style.filter = 'alpha(opacity=100)';
	newDiv.style.left = (document.body.clientWidth/2) - (width/2) + "px";	
	newDiv.style.top =  document.body.scrollTop + 80 + heightOffset + "px";
	//alert(newDiv.id + " = " + ((document.body.clientWidth/2) - (width/2)) + " - " + document.body.scrollTop + " + " + heightOffset );
	newDiv.style.width=width + "px";	
	Effect.Appear(newDiv, {duration:0.25, fps:100});
	/*	
	//IE bug workaround
	if(frmName){
		if(navigator.appName =="Microsoft Internet Explorer"){
			for (var i = 0; i < frmForm.elements.length; i++) {
				if(frmForm.elements[i].type){
					if(frmForm.elements[i].type.match('select'))
						frmForm.elements[i].style.visibility = 'hidden';
				}
			}
		}	
	}	
	return newDiv;*/
}

function get_arg_list(frmIn){
	var fobj = document.getElementById(frmIn);
	var poststr;
	if(fobj){
		for(var i = 0;i < fobj.elements.length;i++){
			els = fobj.elements[i];  
			if(els.name && (els.name != 'undefined')){	
				if((els.type == 'radio' || els.type == 'checkbox') && els.checked == false)
						null;
					else{
						if(els.type == 'select-multiple'){
							 for (var j = 0; j < els.options.length; j++){
								if (els.options[j].selected)
									poststr += '&' + els.name + '=' + els.options[j].value;		
							 }
						 } else
							poststr += '&' + els.name + '=' + encodeURI(els.value);
					}
			}
		}
		return poststr;
	}
}

function hide_form_elms(frmIn){
	var frmForm = document.getElementById(frmIn);
	if(frmForm){
		if(navigator.appName =="Microsoft Internet Explorer" && frmForm.elements){
			for (var i = 0; i < frmForm.elements.length; i++) {
				if(frmForm.elements[i].type){
					if(frmForm.elements[i].type.match('select'))
						frmForm.elements[i].style.visibility = 'hidden';
				}
			}
		}
	}
}



