// JavaScript Document
var cPage = 0;
var strSortArgs = "";
var arrReqs = new Array();
var reqInProgress=false;

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_new(divTarget,strMsg){
	var dTarget = $(divTarget);
	var dUpdate = $('divUpdate_' + dTarget.id);
	if(!dUpdate){
		dUpdate = document.createElement('div');
		dUpdate.setAttribute("class","divUpdate");
	}
	//alert(dUpdate);
	dUpdate.id = 'divUpdate_' + dTarget.id;	
	//
	dUpdate.style.display = "none";
	dUpdate.style.zIndex = "8000";
	
	//if(!strMsg)
		//strMsg="Working...";		
	//dUpdate.innerHTML =  strMsg;	
	
	document.getElementsByTagName('body')[0].appendChild(dUpdate);
	
	$(dUpdate).absolutize();
	Effect.Appear('divUpdate_' + dTarget.id, {duration: 0.1, 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.1, fps:50});
		}
	}
}


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 showModal_new(strID, strCaller, width){
	//alert(frmName + ", " +width);
	if(!width)
		width=420;
//	var frmForm = document.getElementById(frmName);
	var newDiv = document.createElement('div');
	var strDivName = 'divUpdate_' + strID;
	var objCaller = $(strCaller);
	newDiv.id = strDivName;	
	newDiv.addClassName("divUpdate");
	newDiv.style.display = "none";
	newDiv.style.zIndex = "5000";
	newDiv.style.width=width + "px";
	var strMsg="Working...";		
	newDiv.innerHTML =  strMsg;	
	
	document.getElementsByTagName('body')[0].appendChild(newDiv);
	
	
		
	Effect.Appear(newDiv, {duration:0.25, fps:100});	
	return newDiv;
}

function showModal_FR(){
	var width=420;
	var screenDiv = document.getElementById('divUpdate');
	var newDiv = document.getElementById('FR_popup');
	//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.viewport.getDimensions().width + "px";
	screenDiv.style.height = document.viewport.getDimensions().height + "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('FR_popup', {duration:0.25, fps:100});
	newDiv.style.textAlign = "Center";
	
	return newDiv;
}

function destroyModal_FR(){
						
	var screenDiv = document.getElementById('divUpdate');
	var dDiv = document.getElementById('FR_popup');
	
	//screenDiv.style.display="None";
	//screenDiv.style.visibility = "Hidden";
	//dDiv.style.display="None";
	//dDiv.style.visibility = "Hidden";
	//dDiv.innerHTML = "<strong>Updating...</strong>";
	Effect.DropOut('FR_popup', {fps:50});
	Effect.Fade('divUpdate', {duration:0.25, fps:100});
	
}

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 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.display != "none"){
		//$('aFiltToggle').innerHTML = "Show";
		Effect.BlindUp(tdIn, {duration:0.25, fps:100});
		imgFil.src=dirIn + "plus.gif";
	} else{
		Effect.BlindDown(tdIn, {duration:0.25, fps:100});
		//$('aFiltToggle').innerHTML = "Hide";
		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 update_field(strSourceObj, strTargObj, strFilename){
	strFunc = 'disp_update_field';
	var objSource = $(strSourceObj)	
	var poststr = "action=update_field&rId=" + objSource.value;	
	make_req(strAjaxUrl + strFilename,strFunc,poststr,'POST',strTargObj);	
}

function disp_update_field(strTarg,strArgs){
	$(strTarg).innerHTML = strArgs;
	//new Effect.Highlight(strTarg);
}


function showBlind(strObjSrc, strObjTargIn, strMsg, strAlign, intHeight, intWidth, intOpac, blnShadow){	
	var objSrcDiv;	
	var intLeft;
	var objTargDiv = $(strObjTargIn);
	var intLeftOffset = - 10;
	if(!intOpac)
		intOpac = 0.95;
	if($(strObjSrc)){
		objSrcDiv = $(strObjSrc);
	} else {
	    objSrcDiv = document.createElement('div');
		objSrcDiv.id = "divUpdate_" + strObjSrc.toString();	
		//$(newDiv).addClassName("divPopOver");
		objSrcDiv.innerHTML = strMsg;	
		document.getElementsByTagName('body')[0].appendChild(objSrcDiv);
	}	
	
	var arrOffset = objTargDiv.cumulativeOffset();
	var strOffset = objTargDiv.getHeight().toString();	
	
	$(objSrcDiv).absolutize();	
	objSrcDiv.style.display = "none";
	objSrcDiv.style.zIndex = "400";
	
	if(strAlign == "right"){
		//Effect.BlindDown(objSrcDiv, {duration:0.25, fps:100});
		Effect.Appear(objSrcDiv, {duration:0.25, fps:100,from:0, to:intOpac});
		$(objSrcDiv).clonePosition($(objTargDiv),{setLeft:true, setTop:true ,setWidth:true, setHeight:false, offsetLeft:0, offsetTop:0});
		objSrcDiv.style.top=arrOffset[1] + "px";
		objSrcDiv.style.height = 'auto';
		if(intHeight){
			objSrcDiv.style.height= (objTargDiv.getHeight() * (intHeight / 100)) + "px";
		}
		if(intWidth){
			objSrcDiv.style.width= (objTargDiv.getWidth() * (intWidth / 100)) + "px";
		}
		intLeft = arrOffset[0] + (objTargDiv.getWidth() - objSrcDiv.getWidth());
		intLeft =  (objTargDiv.getWidth() - objSrcDiv.getWidth());
		objSrcDiv.style.left=intLeft + "px";
		objSrcDiv.style.paddingLeft="0px";
		objSrcDiv.style.paddingRight="0px";
		objSrcDiv.style.paddingTop="0px";
	} else if(strAlign == "bottom"){
		//Effect.BlindDown(objSrcDiv, {duration:0.25, fps:100});
		Effect.Appear(objSrcDiv, {duration:0.25, fps:100,from:0, to:intOpac});
		$(objSrcDiv).clonePosition($(objTargDiv),{setLeft:true, setTop:false ,setWidth:true, setHeight:false, offsetLeft:0, offsetTop:0});
		
		objSrcDiv.style.height = 'auto';
		if(intHeight){
			objSrcDiv.style.height= Math.floor(objTargDiv.getHeight() * (intHeight / 100)) + "px";
		}
		if(intWidth){
			objSrcDiv.style.width= (objTargDiv.getWidth() * (intWidth / 100)) + "px";
		}
		objSrcDiv.style.top=arrOffset[1] + (objTargDiv.getHeight() - objSrcDiv.getHeight()) + "px";
		intLeft = arrOffset[0];
		objSrcDiv.style.left=intLeft + "px";
		objSrcDiv.style.paddingLeft="0px";
		objSrcDiv.style.paddingRight="0px";
		objSrcDiv.style.paddingTop="0px";
	}else{
		//Effect.BlindDown(objSrcDiv, {duration:0.25, fps:100});
		$(objSrcDiv).absolutize();
		$(objSrcDiv).clonePosition($(objTargDiv));
		Effect.Appear(objSrcDiv, {duration:0.25, fps:100,from:0, to:intOpac});
		//alert('opc: ' + intOpac);
		$(objSrcDiv).clonePosition($(objTargDiv));
		objSrcDiv.style.height = 'auto';
		//alert($(objTargDiv));
		
		$(objSrcDiv).clonePosition($(objTargDiv),{setLeft:true, setTop:true ,setWidth:true, setHeight:false, offsetLeft:0, offsetTop:0});
		objSrcDiv.style.top=arrOffset[1] + "px";
		objSrcDiv.style.height = 'auto';
		if(intHeight){
			objSrcDiv.style.height= Math.floor(objTargDiv.getHeight() * (intHeight / 100)) + "px";
		}
		if(intWidth){
			objSrcDiv.style.width= (objTargDiv.getWidth() * (intWidth / 100)) + "px";
		}
		intLeft = arrOffset[0];
		
		objSrcDiv.style.left = (intLeft + 1) + "px"; // why do we have to add the 1px??
		//alert(objTargDiv.getWidth() + " == " + objSrcDiv.getWidth());
		//objSrcDiv.style.width = (objSrcDiv.getWidth() - 1) + "px"; //compensate for above
		//alert(objTargDiv.getWidth() + " == " + objSrcDiv.getWidth());
		objSrcDiv.style.paddingLeft="0px";
		objSrcDiv.style.paddingRight="0px";
		objSrcDiv.style.paddingTop="0px";
		//alert(intLeft);
		//alert(objSrcDiv.id)
		//alert(objSrcDiv.style.left);
	}
	
	//alert('DEB:' + objSrcDiv.style.height);
	
	if(blnShadow)
		showShadow(objSrcDiv.id);
	return objSrcDiv;
}


function hideBlind(strObjSrc, strAlign){
	if($(strObjSrc)){
		Effect.Fade($(strObjSrc), {duration:0.25,fps:50});
		if($($(strObjSrc).id.toString() + "_shad"))
			Effect.Fade($($(strObjSrc).id.toString() + "_shad"), {duration:0.25,fps:50});
	}
}

function showShadow(strObjSrc){
	var objShadowDiv;
	var strDivName = $(strObjSrc).id;
	var objTarg = $(strObjSrc);
	if($(strDivName + "_shad")){
		shadowDiv = $(strDivName + "_shad");
	} else {
		shadowDiv = document.createElement('div');
	  	shadowDiv.id = strDivName + "_shad";	
		$(shadowDiv).addClassName("divShadow");
		shadowDiv.style.display = "none";
		shadowDiv.innerHTML = "&nbsp;";	
		document.getElementsByTagName('body')[0].appendChild(shadowDiv);
	}
	shadowDiv.style.zIndex = objTarg.style.zIndex - 1;	
	$(shadowDiv).absolutize();
	Effect.Appear(shadowDiv, {duration:0.25, fps:100,from:0,to:0.5});	
	shadowDiv.style.left= (parseInt(objTarg.style.left)  + 5) + "px";
	shadowDiv.style.top= (parseInt(objTarg.style.top)  + 5) + "px";
	shadowDiv.style.height = objTarg.getHeight() + "px";
	shadowDiv.style.width = objTarg.getWidth() + "px";
}


