// 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 = {
		asynchronous: false,
		method: "get",
	    onSuccess: function(oXHR, oJson){
			eval("fillTo = " + oXHR.responseText);
		},
	    onFailure: function (oXHR, oJson) {
		    alert("An error occurred: " + oXHR.statusText);
	    }
	};
	var oRequest = new Ajax.Request(useUrl, oOptions);
	return fillTo;
}	    	     
	        
function getRequestDataFromUrl(useUrl) {
	var fillTo = "";
	var oOptions = {
		asynchronous: false,
		method: "get",
	    onSuccess: function(oXHR, oJson){
			fillTo = oXHR.responseText;
		},
	    onFailure: function (oXHR, oJson) {
		    alert("An error occurred: " + oXHR.statusText);
	    }
	};
	var oRequest = new Ajax.Request(useUrl, oOptions);
	return fillTo;
}	    

function displayRequestInfo(sText, focusOn, width, height, fromTop) {
	var useFromTop = 150;
	if(fromTop){
		useFromTop = fromTop;
	}
	pos = getScreenDimensions(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();
	coverUpPage();
	Effect.Appear("requestInfo", {duration: ".2", afterFinish: function(){
				if(focusOn != null && focusOn != ""){
					// Needs to be called after Effect.Appear is done?
					setTimeout(function(){$(focusOn).focus();}, 500);
				}
			}
		});
}	     
	        
function displayRequest(fromUrl, params, focusOn, width, height, topOffset) {
	
	var oOptions = {
		method: "get",
	    parameters: params,
	    onSuccess: function (oXHR, oJson) {
	        displayRequestInfo(oXHR.responseText, focusOn, width, height, topOffset);
			new Draggable('requestInfo', {handle:"handle", revert:false});
	    },
	    onFailure: function (oXHR, oJson) {
		    displayRequestInfo("An error occurred: " + oXHR.statusText, null, width, height, topOffset);
	    }
	};
	var oRequest = new Ajax.Request(fromUrl, oOptions);	    
} 
	        
function replaceDivContent(whichDiv, fromUrl, params) {
	var params = params || "";
	var oOptions = {
		method: "get",
	    parameters: params,
	    onSuccess: function (oXHR, oJson) {
			var elem = $(whichDiv);
			if(!elem) return;
			elem.innerHTML = oXHR.responseText;
	    },
	    onFailure: function (oXHR, oJson) {
		    alert("An error occurred: " + oXHR.statusText);
	    }
	};
	var oRequest = new Ajax.Request(fromUrl, oOptions);	    
}

function dialog(type, title, text, width){
	var message = {};
	message.type = type;
	message.title = title;
	message.text = text;
	message.width = width || "400px";
	showMessage(message);
}

function showMessage(messageObject){
	var messageDiv = $("messagePopUp");
	var messageTextDiv = $("messagePopUpText");
	var messageTitleDiv = $("messagePopUpTitle");
	if(!messageDiv || !messageTextDiv || !messageTitleDiv){ return; }	
	
	pos = getScreenDimensions(200, 100)
	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";
	}
	messageDiv.style.width = messageObject.width
	messageDiv.style.top = (pos.top / 2) + "px";
	messageDiv.style.left = (pos.left / 2) + "px";
	messageDiv.style.display = "block";
	
	var messages = messageObject.text.split("|");
			
	messageTextDiv.innerHTML = messages.join("<br />");
	messageTitleDiv.innerHTML = messageObject.title;
}

function closeMessageDialog(){
	hideBlockDiv('messagePopUp'); 
	showElem('maincontent');
	doPostProcess();
}

function doPostProcess(){
	if(document.postProcess){
		document.postProcess();
		delete document.postProcess;
	}
}

function confirmDialog(actionObject){
	var okLink = $("confirmPopupOkLink");
	
	if(actionObject.processOnOk){
		okLink.onclick = function(){processAction(actionObject.processOnOk, actionObject.refreshWith);};
	}
	
	var confirmDiv = $("confirmPopUp");
	var confirmTextDiv = $("confirmPopUpText");
	var confirmTitleDiv = $("confirmPopUpTitle");
	if(!confirmDiv || !confirmTextDiv || !confirmTitleDiv){ return; }	
	
	pos = getScreenDimensions(200, 100)
	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";
	}
	confirmDiv.style.width = (actionObject.width || 200) + "px";
	confirmDiv.style.top = (pos.top / 2) + "px";
	confirmDiv.style.left = (pos.left / 2) + "px";
	confirmDiv.style.display = "block";
	
	var messages = actionObject.text.split(",");
			
	confirmTextDiv.innerHTML = messages.join("<br />");
	confirmTitleDiv.innerHTML = actionObject.title;
}

function closeConfirmDialog(){
	hideBlockDiv('confirmPopUp'); 
	showElem('maincontent');
}

function doAjaxSubmit(params, serviceCall, postProcess){
	scroll(0,0);
	toggleBlockElementVisibility("processingMessage");
	var oOptions = {
		method: "post",
		parameters: params,
		onSuccess: function(oXHR, oJson){
			responseData = new Array();
			toggleBlockElementVisibility("processingMessage");
			// Uncomment the following for debugging post requests
			// alert(oXHR.responseText);
			eval("responseData = " + oXHR.responseText);
			var message = null;
			if(!responseData.suppressMessage){
				if(responseData.successMessage){
					message = {
						text: responseData.successMessage,
						type: "success",
						title: responseData.messageTitle,
						width: "400px"
					}
				}else if(responseData.errorMessage){
					message = {
						text: responseData.errorMessage,
						type: "error",
						title: responseData.messageTitle,
						width: "400px"
					}
				}else{
					message = {
						text: "There was an error in the configuration of this page.",
						type: "error",
						title: "Configuration Error",
						width: "400px"
					}				
				}
			}
			if(message){
				showMessage(message);
			}
			
			if(postProcess){
				postProcess(params, responseData.actionStatus);
				if(responseData.suppressMessage){
					doPostProcess();
				}
			}
		},
		onFailure: function(oXHR, oJson){
			alert('failed');
		}
	};
	var oRequest = new Ajax.Request(serviceCall, oOptions);
}

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){
					replaceDivContent('textContent', oOptions.refreshWith);
				}
				if(oOptions.goToUrl){
					document.postProcess = function(){window.location.href = oOptions.goToUrl;};
				}
				unCoverPage('contentdiv');
			}
		}
	);
}

function processAction(urlToProcess, refreshWith){
	closeConfirmDialog();
	doAjaxSubmit('', urlToProcess,
		function (params, actionStatus){
			if(actionStatus != "ERROR"){
				if(refreshWith){
					replaceDivContent('textContent', refreshWith);
				}
				unCoverPage('contentdiv');
			}
		}
	);	
}
