// IE doesn't allow popups over drop downs since it is an ActiveX control no matter what
// z-index you set.
var toHide = ["catsForm"];
function hideProblemItems(){
	for(i = 0; i < toHide.length ; i++){
		var hideElem = $(toHide[i]);
		if(hideElem){
			hideElem.style.visibility = "hidden";
		}
	}
}
function unHideProblemItems(){
	for(i = 0; i < toHide.length ; i++){
		var hideElem = $(toHide[i]);
		if(hideElem){
			hideElem.style.visibility = "visible";
		}
	}
}	     
	        
function getJsonDataFromUrl(useUrl) {
	var fillTo = {};
	var oOptions = {
		url: useUrl,
		async: false,
		method: "get",
	    onSuccess: function(responseText){
			eval("fillTo = " + responseText);
		},
	    onFailure: function (oXHR) {
		    alert("An error occurred: " + oXHR.statusText);
	    }
	};
	var oRequest = new Request(oOptions).send();
	return fillTo;
}	    	     
	        
function getRequestDataFromUrl(useUrl) {
	var fillTo = "";
	var oOptions = {
		url: useUrl,
		async: false,
		method: "get",
	    onSuccess: function(responseText){
			fillTo = responseText;
		},
	    onFailure: function (oXHR) {
		    alert("An error occurred: " + oXHR.statusText);
	    }
	};
	var oRequest = new Request( oOptions).send();
	return fillTo;
}	    

function displayRequestInfo(sText, focusOn, width, height, fromTop) {
	var useFromTop = fromTop || 75;
	pos = getDialogPosition(height, width);
	divRequestInfo = $("requestInfo");
	divRequestInfoText = $("requestInfoText");
	varOffsetTop = 0;
	if(document.documentElement){
		varOffsetTop = document.documentElement.scrollTop;
	}else if(document.body && document.body.scrollTop){
		varOffsetTop = document.body.scrollTop;
	}else{
		varOffsetTop = window.pageYOffset;
	}
	divRequestInfo.style.top = (varOffsetTop + useFromTop) + "px";
	divRequestInfo.style.left = pos.left + "px";
	divRequestInfo.style.width = width + "px";
	divRequestInfo.style.height = height + "px";
	divRequestInfoText.innerHTML = sText;
	hideProblemItems();
	enableFormPane();
	var div = $("requestInfo").setStyles({
		display: "block", 
		opacity: 0
	});
	div.get('tween', {property: 'opacity', duration: 250}).start(1);	
	div.makeDraggable({handle: "requestInfoHandle"});
}	     

function closeRequest(){
	$('requestInfo').get('tween', {property: 'opacity', duration: 250}).start(0);
	disableFormPane(); 
	unHideProblemItems(); 
}
	        
function displayRequest(fromUrl, params, focusOn, width, height, topOffset) {
	
	var oOptions = {
		url: fromUrl,
		method: "get",
	    data: params,
	    onSuccess: function (responseText) {
	        displayRequestInfo(responseText, focusOn, width, height, topOffset);
			//new Draggable('requestInfo', {handle:"handle", revert:false});
	    },
	    onFailure: function (oXHR) {
		    displayRequestInfo("An error occurred: " + oXHR.statusText, null, width, height, topOffset);
	    }
	};
	var oRequest = new Request(oOptions).send();	    
} 
	        
function updateDivFromUrl(whichDiv, fromUrl, params) {
	$("refreshingDataImage").setStyle("display", "block");
	var params = params || "";
	var oOptions = {
		url: fromUrl,
		method: "get",
	    data: params,
	    onSuccess: function (responseText) {
			var elem = $(whichDiv);
			if(!elem) return;
			elem.innerHTML = responseText;
	    },
	    onFailure: function (oXHR) {
		    alert("An error occurred: " + oXHR.statusText);
	    },
	    onComplete: function (){
	    	$("refreshingDataImage").setStyle("display", "none");
	    }
	};
	var oRequest = new Request(oOptions).send();	    
}

function dialog(type, title, text, width){
	var message = {};
	message.type = type;
	message.title = title;
	message.text = text;
	message.width = width || "400";
	
	KeyboardEvents.addListener({
		name: "dialogListener", 
		onEscape: function(e){new Event(e).stop(); closeMessageDialog();},
		onEnter: function(e){new Event(e).stop(); closeMessageDialog();}
	});
			
	showMessage(message);
}

function showMessage(messageObject){
	var messageDiv = $("messagePopUp");
	messageDiv.style.visibility = "hidden";
	messageDiv.style.display = "block";
	var messageTextDiv = $("messagePopUpText");
	var messageTitleDiv = $("messagePopUpTitle");
	if(!messageDiv || !messageTextDiv || !messageTitleDiv){ return; }	
	
	var useWidth = messageObject.width || 200;
	if(messageObject.type){
		if(messageObject.type == "error"){
			messageDiv.className = "errorMessage";
		}else if(messageObject.type == "warning"){
			messageDiv.className = "warningMessage";
		}else{
			messageDiv.className = "aMessage";
		}
	}else{
		messageDiv.className = "aMessage";
	}
	
	pos = getDialogPosition(messageDiv.offsetHeight, useWidth);
	messageDiv.style.width = useWidth + "px";
	messageDiv.style.top = pos.top + "px";
	messageDiv.style.left = pos.left + "px";
		
	messageDiv.style.visibility = "visible";
	
	hideProblemItems();
	enableDialogPane();
	
	var messages = messageObject.text.split("|");
	messageTextDiv.innerHTML = messages.join("<br />");
	messageTitleDiv.innerHTML = messageObject.title;
}

function closeMessageDialog(){
	hideBlockDiv('messagePopUp'); 
	showElem('maincontent');
	doPostProcess();
	KeyboardEvents.removeListener("dialogListener");
	disableDialogPane(); 
	unHideProblemItems(); 
}

function doPostProcess(){
	if(document.postProcess){
		document.postProcess();
		delete document.postProcess;
	}
}

function confirmDialog(actionObject){
	var okLink = $("confirmPopupOkLink");
	
	if(actionObject.processOnOk){
		okLink.onclick = function(){processAction(actionObject);};
	}
	
	var confirmDiv = $("confirmPopUp");
	confirmDiv.style.visibility = "hidden";
	confirmDiv.style.display = "block";
	var confirmTextDiv = $("confirmPopUpText");
	var confirmTitleDiv = $("confirmPopUpTitle");
	if(!confirmDiv || !confirmTextDiv || !confirmTitleDiv){ return; }	
	
	var useWidth = actionObject.width || 200;
	
	if(actionObject.type){
		if(actionObject.type == "error"){
			confirmDiv.className = "errorMessage";
		}else if(actionObject.type == "warning"){
			confirmDiv.className = "warningMessage";
		}else{
			confirmDiv.className = "aMessage";
		}
	}else{
		confirmDiv.className = "aMessage";
	}
		
	var messages = actionObject.text.split(",");
	
	confirmTextDiv.innerHTML = messages.join("<br />");
	confirmTitleDiv.innerHTML = actionObject.title;
		
	pos = getDialogPosition(confirmDiv.offsetHeight, useWidth);
	confirmDiv.style.width = useWidth + "px";
	confirmDiv.style.top = pos.top + "px";
	confirmDiv.style.left = pos.left + "px";
	
	confirmDiv.style.visibility = "visible";
	
	KeyboardEvents.addListener({
		name: "confirmDialogListener", 
		onEscape: function(){closeConfirmDialog();},
		onEnter: okLink.onclick
	});
}

function closeConfirmDialog(){
	hideBlockDiv('confirmPopUp'); 
	showElem('maincontent');
	KeyboardEvents.removeListener("confirmDialogListener");
}

function doAjaxSubmit(params, serviceCall, postProcess){
	scroll(0,0);
	$("processingMessage").setStyle("display", "block");
	var oOptions = {
		url: serviceCall,
		method: "post",
		data: params,
		onSuccess: function(responseText){
			responseData = new Array();
			$("processingMessage").setStyle("display", "none");
			// Uncomment the following for debugging post requests
			// alert(responseText);
			eval("responseData = " + responseText);
			var message = null;
			if(!responseData.suppressMessage){
				if(responseData.successMessage){
					DialogHelper.flashMessage({text: responseData.successMessage});
				}else if(responseData.errorMessage){
					message = {
						text: responseData.errorMessage,
						type: "error",
						title: responseData.messageTitle,
						width: "400"
					}
				}else{
					message = {
						text: "There was an error in the configuration of this page.",
						type: "error",
						title: "Configuration Error",
						width: "400"
					}				
				}
			}
			if(message){
				dialog(message.type, message.title, message.text, message.width);
			}
			
			if(postProcess){
				postProcess(params, responseData.actionStatus);
				if(responseData.suppressMessage){
					doPostProcess();
				}
			}
		},
		onFailure: function(oXHR){
			alert('failed');
		}
	};
	var oRequest = new Request(oOptions).send();
}

function doFormSubmit(oForm, oOptions){
	var oOptions = oOptions || {};
	var sBody = getRequestBody(oForm);
	doAjaxSubmit(sBody, oOptions.serviceUrl,
		function (params, actionStatus){
			if(actionStatus != "ERROR"){
				closeAndClearDiv("requestInfoText");
				hideBlockDiv("requestInfo");
				if(oOptions.refreshWith){
					refreshTextOnly(oOptions.refreshWith);
				}else if(oOptions.refreshPage){
					// This function uses a variable created in ajaxService.php call refreshUrl
					window.location.href = refreshUrl;
					return;
				}else if(!oOptions.suppressRefresh && !oOptions.goToUrl){
					// Unless explicitly asked not to, refresh textContent div with current url
					refreshTextOnly();
				}
				if(oOptions.goToUrl){
					window.location.href = oOptions.goToUrl;
					return;
				}
				disableFormPane();
			}
		}
	);
}

function processAction(actionObject){
	closeConfirmDialog();
	doAjaxSubmit('', actionObject.processOnOk,
		function (params, actionStatus){
			if(actionStatus != "ERROR"){
				if(actionObject.refreshWith){
					refreshTextOnly(actionObject.refreshWith);
				}else if(!actionObject.suppressRefresh){
					// Unless explicitly asked not to, refresh textContent div with current url
					refreshTextOnly();
				}
				disableFormPane();
			}
		}
	);	
}

function refreshTextOnly(refreshUrl){
	// Text Content is a specific div
	// This function uses a variable created in ajaxService.php call refreshTextUrl
	var useUrl = refreshUrl || refreshTextUrl;
	updateDivFromUrl('textContent', useUrl);
}

