// Reloads a frame with the specified name
function reloadFrame(frameName) {
    parent[frameName].location.reload();
}

// Reloads a frame with the specified name
function reloadFrame(frameName, href) {
    parent[frameName].location.href = href;
}

// Prompts the user with the specified string. If
// The user press 'ok' the browser will be forwarded to
// the specified url.
function confirm_action(prompt, href) {
    if(confirm(prompt)) {
        window.location.href = href;
    }
}

function openWinHelp(URL) {
	var win = window.open(URL, "winHelp", "height=450,resizable,width=600");
	win.focus();
}

function openWinInfo(URL) {
	var win = window.open(URL, "winInfo", "height=450,resizable,width=600");
	win.focus();
}

function openWinResource(URL) {
	var win = window.open(URL, "winResource", "");
	win.focus();
}

function cancelClick() { return false; }

/**
 * Disable all links on the current page
 */
function disableLinks() {
	for (var i = 0; i < document.links.length; i++) {
		document.links[i].disabled = true;
		document.links[i].onclick = cancelClick;
	}
}

/**
 * Disable all buttons on the current page
 */
function disableButtons() {
	for (i = 0; i < document.forms.length; i++)	{
		for (j = 0; j < document.forms[i].length; j++) {
			if (document.forms[i][j].type == "button" || document.forms[i][j].type == "submit") {
				document.forms[i][j].disabled = true;
				document.forms[i][j].onclick = cancelClick;
			}
		}
	}
}

/**
 * Disable onclick for a specified tag
 */
function disableOnClick(tagName) {
	for (var i = 0; i < document.getElementsByTagName(tagName).length; i++) {
		document.getElementsByTagName(tagName)[i].onclick = cancelClick;
	}
}

/**
 * Call this function whenever you need a "Loading..." page
 */
function loading() {
	if(YAHOO.atlas.loadingPanel) {
		YAHOO.atlas.loadingPanel.show();
	}
}

/*
 * Used by client side tab control to set selected tab
 */
function setTab(id, countTotal, index) {
	for (var i = 0; i < countTotal; i++) {
		if (document.getElementById(id + "_tab" + i)) {
			document.getElementById(id + "_tab" + i).className = "";
			document.getElementById(id + "_tabContent" + i).style.display = "none";
		}
	}
    if (document.getElementById(id + "_tab" + index)) {
	   document.getElementById(id + "_tab" + index).className = "selected";
	   document.getElementById(id + "_tabContent" + index).style.display = "block";
    }
}

/*
 * Used by client side tab control to toggle selected tab
 */
function toggleTab(id, countTotal, index) {
	if (document.getElementById(id + "_tab" + index).className == "selected") {
		document.getElementById(id + "_tab" + index).className = "";
		document.getElementById(id + "_tab" + index).blur();
		document.getElementById(id + "_tabContent" + index).style.display = "none";
	}
	else {
		setTab(id, countTotal, index);
	}
}

/**
 * Functions for handling tooltips.
 */
var toolTipTimer;
function ToolTip(id) {
	var toolTip;
	
	toolTip = new PopupWindow(id);
	toolTip.id = id;
	toolTip.offsetX = -20;
	toolTip.offsetY = 20;
	toolTip.timeoutShow = 0;
	toolTip.timeoutHide = 0;
	toolTip.show = ToolTip_show;
	toolTip.hide = ToolTip_hide;
	
	return toolTip;
}
function ToolTip_setVisible(id, visible) {
	var obj = document.getElementById(id);
	var visibility = (visible == true ? "visible" : "hidden");
	
	if (obj) {
		obj.style.visibility = visibility;
	}
	if (toolTipTimer) {
		clearTimeout(toolTipTimer);
	}
}
function ToolTip_show(e) {
	var obj = document.getElementById(this.id);
	// When using standard compliant mode (XHTML strict), we need to change the way we accessing the scrolling offset coordinates
	var ieBody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
	var x = document.all ? ieBody.scrollLeft + e.clientX : e.pageX;
	var y = document.all ? ieBody.scrollTop + e.clientY : e.pageY;
	
	obj.style.left = (x + this.offsetX) + "px";
	obj.style.top = (y + this.offsetY) + "px";
	
	if (this.timeoutShow > 0) {
		toolTipTimer = setTimeout("ToolTip_setVisible('" + this.id + "',true)", this.timeoutShow);
	}
	else {
		ToolTip_setVisible(this.id, true);
	}
}
function ToolTip_hide() {
	if (this.timeoutHide > 0) {
		setTimeout("ToolTip_setVisible('" + this.id + "',false)", this.timeoutHide);
	}
	else {
		ToolTip_setVisible(this.id, false);
	}
}

function toggleTreeMenu(id) {
	var aElement = document.getElementById("menuLink_" + id);
	var ulElement = document.getElementById("menu_" + id);
	
	if (ulElement.style.display == "none") {
		ulElement.style.display = "block";
		aElement.className = "open";
	}
	else {
		ulElement.style.display = "none";
		aElement.className = "closed";
	}
}

function toggleMenu(id) {
	var obj = document.getElementById(id);
	
	if (obj) obj.style.display == "none" ? obj.style.display = "block" : obj.style.display = "none";
}

function toggleVisibility(id) {
	var obj = document.getElementById(id);
	var expanded = false;
	
	if (obj) {
		if (obj.style.display == "none") {
			obj.style.display = "block";
			expanded = true;
		}
		else {
			obj.style.display = "none";
			expanded = false;
		}
		
		if (document.getElementById(id + "_expanded")) 
			document.getElementById(id + "_expanded").value = expanded;
	}
}

/**
 * Functions for controlling panel visibility.
 */
function isPanelExpanded(id, index) {
	if (document.getElementById("panel_" + id + "_content_" + index).style.display == "block") {
		return true;
	}
	return false;
}
function setPanelVisibility(id, index, expanded) {
	var panelLink = document.getElementById("panel_" + id + "_link_" + index);
	var panelContent = document.getElementById("panel_" + id + "_content_" + index);
	
	if (expanded == "true") {
		panelContent.style.display = "block";
		panelLink.className = "open";
	}
	else {
		panelContent.style.display = "none";
		panelLink.className = "closed";
	}
}

/*
 * Opens a report document in a new window
 */
function createReport() {
	//Send the report output to a new window
	document.reportParameters.target = "_blanc";
	document.reportParameters.submit();
	//Reload the uese case frame to display messages
	document.location.reload();
}

/*
 * Used by the treecontrol tag to set a document's location
 */
function setLocation(link) {
	var theTop = 0;
	if (document.documentElement && document.documentElement.scrollTop)
		theTop = document.documentElement.scrollTop;
	else if (document.body)
		theTop = document.body.scrollTop;
	else
		//[Netscape stuff] - don't know
		;

	self.location.href = link + '&scroll=' + theTop;
}

/**
 * Used to control the max length for text areas.
 */
function imposeMaxLength(obj, maxLength) {
	if (obj.value.length > maxLength)
		obj.value = obj.value.substring(0, maxLength);
}

/**
 * Sets focus on the first form element (not undefined, hidden, disabled or readonly).
 * You can specify a specific form element by passing a form element id.
 */
function setFocus(id) {
	for (i = 0; i < document.forms.length; i++)	{
		for (j = 0; j < document.forms[i].length; j++) {
			if ((id == null || document.forms[i][j].id == id) 
				&& typeof(document.forms[i][j].type) != "undefined" 
				&& document.forms[i][j].type != "hidden" 
				&& !document.forms[i][j].disabled 
				&& !document.forms[i][j].readonly) {
				document.forms[i][j].focus();
				return;
			}
		}
	}
}

/*
 * Populates a select control with options from a shared list
 */
function setOptions(selectBox, optionList) {
    if(selectBox.options.length != optionList.length) {
        var initialSelect = selectBox.options[selectBox.selectedIndex].value
        selectBox.options.length = 0;
        for(var i = 0; i < optionList.length; i++) {
            selectBox.options[i] = new Option(optionList[i].text, optionList[i].value);
            if(optionList[i].value == initialSelect){
                selectBox.options[i].selected = true;
            }
        }
    }
}

/**
 * Recalculates a "checkbox" variable and constructs a CSV string
 * of checked items based on the variable name.
 */
function setCbValue(countTotal, targetId) {
	var cbValue = "";
	for(var i = 1; i < countTotal + 1; i++) {
		if (document.getElementById("cb_" + targetId + "_" + i).checked == true) {
			if (cbValue != "") {
				cbValue += ",";
			}
			cbValue += document.getElementById("cb_" + targetId + "_" + i).value;
		}
	}
	document.getElementById(targetId).value = cbValue;
}

/**
 * Function for getting an html element that belongs to a div tag. 
 */
function getDivElementById(divId, elementId) {
	var divTag = document.getElementById(divId);	    	
	var allContainedElements = divTag.getElementsByTagName("*");
	for (var i = 0; i < allContainedElements.length; i++) {
		var elem = allContainedElements[i];
		if (allContainedElements[i].id == elementId) {
			return allContainedElements[i];
		} 
	}
	return null;
}

/**
 * Functions for controlling the multilingual popup window.
 */
function MlPopup(id) {
    var mlWin;
    
    mlWin = new PopupWindow("mlEditor_" + id);
    mlWin.id = id;
    mlWin.offsetY = 2;
    mlWin.show = MlPopup_show;
    mlWin.hide = MlPopup_hide;
    mlWin.setDefaultText = MlPopoup_setDefaultText;
    
    return mlWin;
}
function MlPopup_show() {
    this.showPopup("mlButton_" + this.id);
}
function MlPopup_hide() {
    this.hidePopup();
}
function MlPopoup_setDefaultText(userLocale) {
    document.getElementById(this.id).value = document.getElementById(this.id + "_" + userLocale).value;
}

/**
 * Functions for maximizing/restoring the size of the workflow area.
 */
function isWorkspaceMaximized() {
	var mainFrameset = top.document.getElementById("mainFrameset");
	var maximized = false;
	
	if (mainFrameset) {
		var contentFrameset = top.parent.contentframe.document.getElementById("contentFrameset");
		
		if (mainFrameset.rows == "0,*" || contentFrameset.rows == "0,*" || contentFrameset.cols == "0,*") {
			maximized = true;
		}
	}
	return maximized;
}
function setWorkspaceSize(topFrameSize, contentFrameLayout, navFrameSize) {
	var mainFrameset = top.document.getElementById("mainFrameset");
	var maximized = false;
	
	if (mainFrameset) {
		var contentFrameset = top.parent.contentframe.document.getElementById("contentFrameset");
		
		mainFrameset.rows = topFrameSize + ",*";
		if (contentFrameLayout == "rows") {
			contentFrameset.rows = navFrameSize + ",*";
		}
		else {
			contentFrameset.cols = navFrameSize + ",*";
		}
	}
	else {
		alert("No frameset available!");
	}
}
function toggleWorkspaceSize(topFrameSize, contentFrameLayout, navFrameSize) {
	var workspaceSizeLink = document.getElementById("workspaceSizeLink");
	
	if (isWorkspaceMaximized()) {
		setWorkspaceSize(topFrameSize, contentFrameLayout, navFrameSize);
		workspaceSizeLink.className = "maximize";
	}
	else {
		setWorkspaceSize(0, contentFrameLayout, 0);
		workspaceSizeLink.className = "restore";
	}
}
/*
    Returns string of form attribute=value if value is not empty.
*/
function getAttributeString(attribute, value) {
    if (value != null && value != '') {
        return attribute + '=' + value;
    }
    return '';
}

/*
    Rotates text. Used from rotateText.tag.
*/
/*
    Rotates text. Used from rotateText.tag.
*/
function rotateText(url, divId, labelEncoded, labelEncodedTwice, font, fontSize, fontColor, fontStyle, degree, textLength)
{
    // Check if IE due to problems with transparency in png.
    var ie = (navigator.appName == "Microsoft Internet Explorer") && (parseFloat(navigator.appVersion) >= 4);
    // add parameters to renderservlet url
    if (ie) {
        // If IE we need to use the twice encoded label
        url += getAttributeString('text', labelEncodedTwice);
    }
    else {
        url += getAttributeString('text', labelEncoded);
    }
    url += getAttributeString('&font', font);
    url += getAttributeString('&font_size', fontSize);
    url += getAttributeString('&font_color', fontColor);
    url += getAttributeString('&font_style', fontStyle);
    url += getAttributeString('&degree', degree);
    url += getAttributeString('&text_length', textLength);
    var div;
    if (ie)
    {
        div = document.getElementById(divId);
        div.style.height = "40";
        div.style.width = "40";
        div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + url + "')";
    }
    else
    {
        div = document.getElementById(divId);
        div.innerHTML = '<img src="' + url + '" />';
    }
}

/*
    Alerts user of new messages. 
    Is called from MessageControllerImpl.alertUserOfMessagesFromServer and locally in top.jsp.
*/
function alertNewMessages(personId) {
    if (personId == top.parent.topframe.document.getElementById("personId").value) {
        top.parent.topframe.document.getElementById("messageLink").style.display = "inline";
        top.parent.topframe.document.getElementById("messageLinkA").className = "message_anim";
    }
}

/*
    Remove the message alert by hiding the message link.
*/
function removeMessageAlert() {
    top.parent.topframe.document.getElementById("messageLink").style.display = "none";
}
        
/*
    Messsage reply function. Shows or hides the message notification link. 
*/        
var hasMessageReply = function(data) {
    if (data == 'true') {
        alertNewMessages(top.parent.topframe.document.getElementById("personId").value);
    } else {
        removeMessageAlert();
    }
}

/* ***** DEPRECATED ***** */

var loadingTimer;
function displayLoading() {
	var obj = document.getElementById("loading");
	if (obj) {
		window.scroll(0, 0);
		obj.style.display = "block";
	}
	clearTimeout(loadingTimer);
}

function showTooltip(e, id) {
	var tooltipObj = document.getElementById(id);
	var x = document.all ? document.body.scrollLeft + e.clientX : e.pageX;
	var y = document.all ? document.body.scrollTop + e.clientY : e.pageY;

	if (tooltipObj) {
		tooltipObj.style.left = (x + 20) + "px";
		tooltipObj.style.top = (y + 20) + "px";
		tooltipObj.style.display = "block";
	}
}
function hideTooltip(id) {
	var tooltipObj = document.getElementById(id);
	
	if (tooltipObj)
		tooltipObj.style.display = "none";
}
