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

function objReq(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5){
	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;
}

function queue_rec(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5){
	var cReq = new objReq(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5);
	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);
		}
		setTimeout('tryReq()',250);
	}
}
	
function make_req(url, funcName, qry, getpost, uqID, arg2, arg3, arg4, arg5){
	//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);
	}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(arg4)
										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= "<div class=\"divAjaxMsg\">" + strMsg+ "</div>";
	//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 = dTarget.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){
	if(!frmName)
		frmName = 'myForm';						
	var frmForm = document.getElementById(frmName);
	var screenDiv = document.getElementById('divUpdate');
	var dDiv = document.getElementById('divUpdateForm');
	
	//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 cancel_reqs(frmName){
	if(!frmName)
		frmName = 'myForm';	
	destroyModal(frmName);
	http_request.abort();
	arrReqs = new Array();
}

function showModal(frmName,width){
	//alert(frmName + ", " +width);
	if(!frmName)
		frmName = 'myForm';
	if(!width)
		width=420;
	var frmForm = document.getElementById(frmName);
	var screenDiv = document.getElementById('divUpdate');
	var newDiv = document.getElementById('divUpdateForm');
	//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.style.width = document.body.clientWidth + "px";
	screenDiv.style.height = newHeight + "px";
	screenDiv.style.top="0px";
	screenDiv.style.left="0px";
	Effect.Appear('divUpdate', {duration: 0.25, from:0.0, to:0.8, fps:100});
	screenDiv.style.textAlign = "Center";
	
	newDiv.style.zIndex = '101';
	newDiv.style.verticalAlign = "middle";
	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";
	newDiv.style.width=width + "px";	
	Effect.Appear('divUpdateForm', {duration:0.25, fps:100});
	newDiv.style.textAlign = "Center";
	
	//IE bug workaround
	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 = 'hidden';
				}
			}
		}	
	}				
	return newDiv;
}
				
function change_option(optIn,changeIn,required){
	var rad = document.getElementById(optIn);
	var txt = document.getElementById(changeIn);
	if(rad.checked){
		txt.disabled=true;
		if(required)
			txt.className='formField';
	}
	else{
		if(txt){
			txt.disabled=false;
			if(required)
				txt.className='required';
		}
				
	}
}

//Add the onclick event to link of a certain class   
function safety_links(msg){   
	//Check that browser supports the used methods   
	if(!document.getElementsByTagName) {return true;}   
	  
	//Get all links in document   
	var links = document.getElementsByTagName("a");   
	//Loop through links   
	for(i=0;i<links.length;i++){   
		//Check if there is already an onclick 
		if(!links[i].onclick && (links[i].href.length < 20)){   
			//Add the onclick event to the object/element   
			links[i].onclick = function() { if(confirm(msg)) return true; else return false; }
		}
	}
}  

function toggle_filter_expand(dirIn){
	var tdIn = document.getElementById('tdInsideFilter');
	var imgFil = document.getElementById('imgFilter');
	if(tdIn.style.visibility == "visible"){
		tdIn.style.visibility="hidden";
		tdIn.style.display = "none";
		imgFil.src=dirIn + "plus.gif";
	} else{
		tdIn.style.visibility="visible";
		tdIn.style.display = "";
		imgFil.src=dirIn + "minus.gif";
	}
}

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.value && (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';
				}
			}
		}
	}
}

function show_update_new(divTarget,strMsg){
	var dTarget = $(divTarget);
	var dUpdate = $('divUpdate_' + dTarget.id);
	if(dUpdate == null)
		dUpdate = document.createElement('div');
	
	dUpdate.id = 'divUpdate_' + dTarget.id;	
	$(dUpdate).addClassName("divUpdate");
	
	
	
	dUpdate.style.display = "none";
	dUpdate.style.zIndex = "5000";
	
	if(!strMsg)
		strMsg="Working...";	
	strMsg = strMsg + "<DIV class=\"divUpdateCancel\"><A onclick=\"hide_update_new('" + divTarget + "')\">Cancel</A></DIV>";	
	dUpdate.innerHTML =  strMsg;	
	
	document.getElementsByTagName('body')[0].appendChild(dUpdate);
	
	dUpdate.absolutize();
	Effect.Appear('divUpdate_' + dTarget.id, {duration: 0.15, fps:50, from:0.0, to:0.8});
	dUpdate.clonePosition(dTarget);
	
	//hide_form_elms(divTarget);
}

function hide_update_new(divTarget){
	var dTarget = $(divTarget);	
	if(dTarget){
		var dUpdate = $('divUpdate_' + dTarget.id);
		//alert('divUpdate_' + dTarget.id);
		if(dUpdate){
			//alert(dUpdate.id);
			Effect.Fade('divUpdate_' + dTarget.id, {duration: 0.15, fps:50});
		}
	}
}




