/*
Rubicon general functions
author: Steve Hall and Robert Whiting Novell, Inc. 2006
*/


// Basic message functions
// =======================

// support old call
function showConfirmWithMessage(message, callback) {
	private_showMessage(message,getString("js.all.confirm"),callback,'confirm');
}
// new call
function showConfirm(message,callback) {
	private_showMessage(message,getString("js.all.confirm"),callback,'confirm');
}

// support old call
function showAlertWithMessage(message) {		
	private_showMessage(message,getString("js.all.alert"));
}
function showMessage(message,title) {		
	private_showMessage(message,title);
}
// new call does all
function private_showMessage(message,title,callback,type) {		
	showCanopy();
	setTextById('messageHeader', title);	
	setTextById('messageBody', message);	
	
	 // add a callback if supplied
	if( callback ){
		getNodeById('messageContainer').callback = callback;
	}
	centerElementOnViewportById('messageContainer', -138, -110);

	// if this is a confirmation then add the yes/no buttons	
	if(type && type=='confirm') {
		replaceMessageButton('hideMessage(false);return false;',getString('js.all.no'));
		addMessageButton('hideMessage(true);return false;',getString('js.all.yes'))
	}
	else {
		replaceMessageButton('hideMessage();return false;',getString('js.all.ok'));
	}	
	
	showElementById('messageContainer');
	document.messageInUse = true;
	getNodeById("messageButtons").getElementsByTagName("a")[0].focus();
}

function hideMessage(response) {	
	setTextById('messageBody', '');	
	hideElementById('messageContainer');
	document.messageInUse = false;
	if(!isCanopyNeeded()) {
		hideElementById('canopyContainer');
		showSelectBoxesInBackground();
	}
	// call the callback if supplied
	if( getNodeById('messageContainer').callback )
		getNodeById('messageContainer').callback(response);
	getNodeById('messageContainer').callback = null;
	
	// clear out any buttons	
	setTextById('messageButtons', '');	
}

function hideConfirm(response) {	
	hideMessage(response);
}

function hideAlert(response) {	
	hideMessage(response);
}


// Basic utility functions
// =======================
function showUtility(title, source, parameters, commandSequence, width) {	// optional commandSequence and width parameters

	if(document.utilityInUse) {
		// utility window already visible, so clear out all data first
		setTextById('utilityBody', '');	
		setTextById("utilityButtons",'');
		hideElementById('utilityContainer');
	}
	deselectAllText();
	showCanopy();
	setTextById('utilityHeader', title);
	setTextById('utilityBody', '<img src="images/status_loading.gif" width="20" height="20" alt="" /><br/>');
	centerElementOnViewportById('utilityContainer', -150, -100);
		
	if( width )
	{
		var utilObj = getNodeById("utilityContainer");
		utilObj.style.width = width+"px";
	}
	
	showElementById('utilityContainer');
	document.utilityInUse = true;
	if( source )
		sndRequest(source, 'utilityBody', parameters, commandSequence);
}

function hideUtility() {	
	setTextById('utilityBody', '');	
	setTextById("utilityButtons",'');
	hideElementById('utilityContainer');
	document.utilityInUse = false;
	if(!isCanopyNeeded()) {
		hideElementById('canopyContainer');
		showSelectBoxesInBackground();
	}
}


// replaces the button in the message container 
// to add a second button.  follow this call with addMessageButton
function replaceMessageButton(functionCall,label){
	var buttonHtml = '<p class="imagebutton-dark"><a href="#" onclick="'+functionCall+';return false;">'+label+'</a></p>';
	setTextById("messageButtons",buttonHtml);
}

// add a button to the utility container 
//  note: any parameters passed in as part of the functionCall should use quotes like this:
//	addUtilityButton( "myFunc('something')", label ){
function addMessageButton(functionCall,label){
	var btnContainer = document.getElementById("messageButtons");
	btnContainer.innerHTML = '<p class="imagebutton-dark"><a href="#" onclick="'+functionCall+';return false;">'+label+'</a></p>' + btnContainer.innerHTML;
}

// remove all buttons
function removeMessageButton(){
	setTextById("messageButtons","");
}

// replaces the button in the utility container 
// to add a second button.  follow this call with addUtilityButton
function replaceUtilityButton(functionCall,label){
	var buttonHtml = '<p class="imagebutton-dark"><a href="#" onclick="'+functionCall+';return false;">'+label+'</a></p>';
	setTextById("utilityButtons",buttonHtml);
}

// add a button to the utility container 
//  note: any parameters passed in as part of the functionCall should use quotes like this:
//	addUtilityButton( "myFunc('something')", label ){
function addUtilityButton(functionCall,label){
	var btnContainer = document.getElementById("utilityButtons");
	btnContainer.innerHTML = '<p class="imagebutton-dark"><a href="#" onclick="'+functionCall+';return false;">'+label+'</a></p>' + btnContainer.innerHTML;
}

// remove all buttons
function removeUtilityButton(){
	setTextById("utilityButtons","");
}


// Basic canopy functions
function isCanopyNeeded() {
	var isNeeded = false;
	if(document.alertInUse) { isNeeded = true; }
	if(document.messageInUse) { isNeeded = true; }
	if(document.confirmInUse) { isNeeded = true; }
	if(document.utilityInUse) { isNeeded = true; }
	return isNeeded;
}

function showCanopy() {
	setElementSizeToDocumentById('canopyContainer');
	if(isIE) getNodeById("canopyContainer").style.filter = "alpha(opacity=50)";
	hideSelectBoxesInBackground();
	showElementById('canopyContainer');
}

function hideSelectBoxesInBackground() {
	// hide select boxes because they show through popup layers in IE
	if(isIE) {
		var pageContainer = document.getElementById("tier4");
		var selects = pageContainer.getElementsByTagName("select");
		for(var i = selects.length-1; i >= 0; i--) {
			selects[i].style.visibility="hidden";
		}
	}
}

function showSelectBoxesInBackground() {
	// show select boxes that have been hidden for popup layers
	if(isIE) {
		var pageContainer = document.getElementById("tier4");
		var selects = pageContainer.getElementsByTagName("select");
		for(var i = selects.length-1; i >= 0; i--) {
			selects[i].style.visibility="visible";
		}
	}
}

// Basic status functions
function statusLoading() {
	showElementById('statusContainer');
	setImageSourceById('statusImg', 'images/status_loading.gif');
	setImageAltById('statusImg', 'Content Loading...');
	setImageTitleById('statusImg', 'Content Loading...');
	setTextById('statusText', 'Content Loading...');
}

function statusComplete(statusCode) {
	setImageSourceById('statusImg', 'images/status_loaded.gif');
	setImageAltById('statusImg', 'All Content Loaded');
	setImageTitleById('statusImg', 'All Content Loaded (' + statusCode + ')');
	setTextById('statusText', 'All Content Loaded');
	hideElementById('statusContainer');
}

function statusRequestError() {
	showElementById('statusContainer');
	setImageSourceById('statusImg', 'images/status_error.gif');
	setImageAltById('statusImg', 'Error with Request');
	setImageTitleById('statusImg', 'Error with Request');
	setTextById('statusText', 'Error with Request');
}

function statusLoadingError(errCode) {
	showElementById('statusContainer');
	setImageSourceById('statusImg', 'images/status_error.gif');
	setImageAltById('statusImg', 'Error From Server');
	setImageTitleById('statusImg', 'Error from Server (' + errCode + ')');
	setTextById('statusText', 'Error From Server');
}


// Basic oncomplete/onerror functions
function onCompleteRequest(request, target, commandSequence) {
	//alert("target: "+target+"   commandSequence: "+commandSequence);
	statusComplete(request.status);
	
	if(!isMyAppOrigination(request)) {
		setTextById(target, '');
		document.location.reload(true);
	}
}

function onErrorRequest(request, target) {
	statusLoadingError(request.status);	
	if(!isMyAppOrigination(request)) {
		// ichain timeout
		if(request.status != 500) {	
			setTextById(target, ''); // do not want to populate ichain auth into the target box.
			document.location.reload(true);
		}
		// some tomcat error
		else {
			document.location.href = 'error.jsp';
		}
	}
	// error from myApp
	else if(request.status == 700) {		
		// handle any 700 statuses
	}
	else {
		alert('[' + request.status + '] Unhandled response status detected!');
	}
}

function onTimeoutRequest(request, target) {
	statusRequestError();
	setTextById(target, '');
	showConfirmWithMessage('The previous action did not receive a response from the server! Do you wish to refresh the application?', onTimeoutReloadApplication);
}

function onTimeoutReloadApplication(response) {
	if(response) {
		document.location.reload(true);
	}
}

function isMyAppOrigination(request) {
	return true;
	/*
	try {
		if(request.getResponseHeader(myAppName) != 'true') {
			//alert("Inside isMyAppOrigination: false");
			return false;
		}
		else {
			//alert("Inside isMyAppOrigination: true");
			return true;
		}
	}
	catch(e) {
		//alert("Inside isMyAppOrigination: false");
		return false;
	}
	*/
}
