var popupHandle;
function openPopup(url, target, width, height, left, top, addRandom) {
	var screenX = (left) ? left : Math.round((792 - width) / 2);
	var screenY = (top) ? top : Math.round((480 - height) / 2);
	if (screenX < 20) {screenX = 20;}
 	if (screenY < 20) {screenY = 20;}

	if (addRandom) {
		url = url.appendUrlParameter("random=" + Math.random());
	}
	popupHandle = window.open(url, target, 'width=' + width + ',height=' + height + ',left=' + screenX + ',top=' + screenY + ',toolbar=no,scrollbars=no,resizable=no');
	if (popupHandle && popupHandle.focus) popupHandle.focus();
}

function openLayer(layerName, title, url, style, linkObj, left, top) {
	var layerObj = document.getElementsByTagName('div')[layerName];
	if (layerObj) {
		var content;
		content =  '<div class="' + style + 'Shadow">';
		content += '	&nbsp;<br />';
		content += '</div>';
		content += '<div class="' + style + 'Content" id="' + style + 'Content">';
		content += '	<div class="header">';
		content += '		<span class="f13l15b">' + title + '</span><br />';
		content += '	</div>';
		content += '	<div class="iFrame">';
		content += '		<iframe id="' + layerName + 'Frame" name="' + layerName + 'Frame" width="' + 1 + '" height="' + 1 + '" scrolling="no" marginheight="0" marginwidth="0" frameborder="0"></iframe>';
		content += '	</div>';
		content += '</div>';

		layerObj.style.visibility = 'hidden';
		layerObj.innerHTML = content;

		var dx = (window.opera) ? -2 : 0;
		var dy = (window.opera) ? -21 : -19;

		var iframeObj = document.getElementById(layerName + 'Frame');
		var contentObj = document.getElementsByTagName('div')[style + 'Content'];

		while (getCurrentStyle(contentObj, 'width') == '0px' && getCurrentStyle(contentObj, 'height') == '0px') {
			// sleep - Opera needs some time before continuing
		}

		iframeObj.width = parseFloat(getCurrentStyle(contentObj, 'width')) + dx + 'px';
		iframeObj.height = parseFloat(getCurrentStyle(contentObj, 'height')) + dy + 'px';
		iframeObj.src = url + '&dummy=' + Math.random();

		if (linkObj && linkObj != null) {
			layerObj.style.left = getAbsoluteLeft(linkObj) + 3 + 'px';
			layerObj.style.top = getAbsoluteTop(linkObj) + 6 + 'px';
		} else if (left && top) {
			layerObj.style.left = left + 'px';
			layerObj.style.top = top + 'px';
		} else {
			layerObj.style.left = '14px';
			layerObj.style.top = '14px';
		}

		layerObj.style.visibility = 'visible';
	}
}

function openPopupLayer(layerName, url, style, left, top, width, height) {
	var layerObj = document.getElementsByTagName('div')[layerName];
	if (layerObj) {
		var content;
		content =  '<div class="' + style + 'Shadow">';
		content += '	&nbsp;<br />';
		content += '</div>';
		content += '<div class="' + style + 'Content" id="' + style + 'Content">';
		content += '	<div class="upFrame">';
		content += '		<iframe id="' + layerName + 'Frame" name="' + layerName + 'Frame" width="' + width + '" height="' + height + '" scrolling="no" marginheight="0" marginwidth="0" frameborder="0"></iframe>';
		content += '	</div>';
		content += '</div>';

		layerObj.style.visibility = 'hidden';
		layerObj.innerHTML = content;

		//var dx = (window.opera) ? -2 : 0;
		//var dy = (window.opera) ? -21 : -19;

		var iframeObj = document.getElementById(layerName + 'Frame');
		var contentObj = document.getElementsByTagName('div')[style + 'Content'];

		while (getCurrentStyle(contentObj, 'width') == '0px' && getCurrentStyle(contentObj, 'height') == '0px') {
			// sleep - Opera needs some time before continuing
		}

		iframeObj.width = parseFloat(getCurrentStyle(contentObj, 'width'))  + 'px';
		iframeObj.height = parseFloat(getCurrentStyle(contentObj, 'height'))  + 'px';
		iframeObj.src = url + '&dummy=' + Math.random();

		if (left && top) {
			layerObj.style.left = left + 'px';
			layerObj.style.top = top + 'px';
		} else {
			layerObj.style.left = '14px';
			layerObj.style.top = '14px';
		}

		layerObj.style.visibility = 'visible';
		showLayer('bigTransLayer');
	}
}


function hideLayer(layerName) {
	if (document.getElementsByTagName('div')[layerName]) {
		document.getElementsByTagName('div')[layerName].style.visibility = 'hidden';
	}
}

function showLayer(layerName) {
	if (document.getElementsByTagName('div')[layerName]) {
		document.getElementsByTagName('div')[layerName].style.visibility = 'visible';
	}
}

function setDisplayStyle(layerName, style) {
	if (document.getElementsByTagName('div')[layerName]) {
		document.getElementsByTagName('div')[layerName].style.display = style;
	}
}

function isLayerVisible(layerName) {
	if (document.getElementsByTagName('div')[layerName]) {
		return (document.getElementsByTagName('div')[layerName].style.visibility == 'visible');
	}
}

function setButtonHighlight(buttonNode, hightlight) {
	var bgColor = (hightlight) ? '#000099' : '#999999';
	var cursor = (hightlight) ? 'hand' : 'pointer';
	if (buttonNode) {
		buttonNode.style.backgroundColor = bgColor;
		buttonNode.style.cursor = cursor;
	}
}

/**
 * Submits a form created by ecom:form tag.
 * First sets the given event in a hidden field, then submits the form.
 */
function submitForm(aFormId, aEvent, aParams) {
	if (document.forms[aFormId]) {
		if (aParams && (typeof aParams == "string")) {
			aParams = aParams.split("&");
			var i, paramName, paramValue, elementNode, createdNodes = {};
			for (i=0; i<aParams.length; i++) {
				if (/\=/.test(aParams[i])) {
					aParams[i] = aParams[i].split("=");
					paramName = aParams[i][0];
					paramValue = aParams[i][1];
					elementNode = document.forms[aFormId].elements[paramName];
					if (elementNode) {
						elementNode.value += "," + paramValue;
					} else if (createdNodes[paramName]) {		// GET: umschifft einen MSIE bug, welcher dynamisch erzeugte formularelemente nicht der "document.forms" collection zuweist;
						createdNodes[paramName].value += "," + paramValue;
					} else if (document.forms[aFormId].appendChild && document.createElement) {
						elementNode = document.createElement("input");
						elementNode.setAttribute("name",paramName);
						elementNode.setAttribute("type","hidden");
						elementNode.setAttribute("value",paramValue);
						elementNode.name = paramName;	// MSIE bugfix;
						elementNode.type = "hidden";	// MSIE bugfix;
						elementNode.value = paramValue;	// MSIE bugfix;
						document.forms[aFormId].appendChild(elementNode);
						createdNodes[paramName] = elementNode; // SET: umschifft einen MSIE bug, welcher dynamisch erzeugte formularelemente nicht der "document.forms" collection zuweist;
					}
					elementNode = null;
				}
			}
		}
		document.forms[aFormId].event.value=aEvent;
		document.forms[aFormId].submit();
	}
	return false;
}


/**
 * Checks a textareas value string length.
 * Expects 2 mandatory parameters:
 * - a textarea-node being the first one,
 * - and a maximum delimiter of type Number or String on second place.
 * the textarea needs three eventhandlers in order to behave like thought - eg:
 * <textarea name="textarea01" onclick="checkLength(this,20)" onkeyup="checkLength(this,20)" onchange="checkLength(this,20)">limit is 20 chars</textarea>
 */
function checkLength(/*HTMLTextareaElement: nodeObj[mandatory default], number|string: minLength[optional], number|string: maxLength[mandatory default]*/) {
  var nodeObj, minLength, maxLength;
  nodeObj = ((arguments.length >= 2) ? (arguments[0]) : (maxLength));
  minLength = ((arguments.length >= 3) ? (parseInt(arguments[1])) : (minLength));
  maxLength = ((arguments.length >= 3) ? (parseInt(arguments[2])) : ((arguments.length == 2) ? (parseInt(arguments[1])) : (maxLength)));
//minLength isn't implemented so far;
  if ((typeof(nodeObj) == "object") && nodeObj.type && (nodeObj.type.toLowerCase() == "textarea") && !isNaN(maxLength)) {
    if (nodeObj.value.length >= maxLength) {
      nodeObj.value = checkLength.pastValue;
    } else {
      checkLength.pastValue = nodeObj.value;
    }
  }
}
checkLength.pastValue = "";


/* 
 * Used for the frame refresh concept (see [ITACUI] 5.2.12).
 * 
 * Calls the "refresh" function on the specified frame ? if it is present.
 * All states which support refreshing (i.e. have a "refresh" transition) need to implement this function.
 */
function refreshFrame(aFrame) {
	// find frame element. Could be:
	//  - this.parent               for mainNavigationFrame and processContentFrame
	//  - this.parent.parent        for infoLayerFrame
	//  - this.opener.parent        for popup, opened by mainNavigationFrame or processContentFrame
	//  - this.opener.parent.parent for popup, opened by infoLayerFrame
	var frameElement;

	if (this.parent) {
		frameElement = this.parent[aFrame];
		if (!frameElement && this.parent.parent) {
			frameElement = this.parent.parent[aFrame];
			if (!frameElement && this.opener && this.opener.parent) {
				frameElement = this.opener.parent[aFrame];
				if (!frameElement && this.opener.parent.parent) {
					frameElement = this.opener.parent.parent[aFrame];
				}
			}
		}
	}

	// only refresh if not same frame and refresh function is present.
	if (frameElement && (frameElement != this)) {
		if (frameElement.refresh) {
			frameElement.refresh();
		} else {
			// if request function is not present yet, try again 500ms later.
			setTimeout("refreshFrame('" + aFrame + "')", 500);
		}
	}
}

function getSetter(property) {
	if (property) {
		return 'set' + property.substring(0, 1).toUpperCase() + property.substring(1);
	}
}

function setFrameProperties(frameNode, paramKeys, paramValues) {
	if (frameNode) {
		for (var i = 0; i < paramKeys.length; i++) {
			var method = getSetter(paramKeys[i]);
			if (method && frameNode[method]) {
				frameNode[method](paramValues[i]);
			}
		}

		if (frameNode.updateFrame) {
			frameNode.updateFrame();
		}
	}
}

function openPopupOrLayer(label, url, target, attributes) {
	// var popupHandle = window.open(url, target, attributes);
	// if (!popupHandle || !popupHandle.focus) {
		if (target == 'visualizer') {
			getOpenVisualizerInLayerFunction()(label, url);
		} else {
			getOpenPopupAsLayerFunction()(label, url);
		}
	// }
}

function getOpenPopupAsLayerFunction() {
	if (parent.openPopupAsLayer) return parent.openPopupAsLayer;
	if (parent.parent.openPopupAsLayer) return parent.parent.openPopupAsLayer;
	if (parent.parent.parent.openPopupAsLayer) return parent.parent.parent.openPopupAsLayer;
	if (parent.parent.parent.parent.openPopupAsLayer) return parent.parent.parent.parent.openPopupAsLayer;
}

function getOpenVisualizerInLayerFunction() {
	if (parent.openVisualizerInLayer) return parent.openVisualizerInLayer;
	if (parent.parent.openVisualizerInLayer) return parent.parent.openVisualizerInLayer;
	if (parent.parent.parent.openVisualizerInLayer) return parent.parent.parent.openVisualizerInLayer;
	if (parent.parent.parent.parent.openVisualizerInLayer) return parent.parent.parent.parent.openVisualizerInLayer;
}


