/* 
 * Scripts
 *
 * $Id: scripts.js 23220 2009-01-07 18:54:45Z niels $
 */

/*
 * Popups
 */

var wins = new Array();

function openWindow(url, name, props, focus) {
  if(wins[name]) wins[name].close();
  wins[name] = window.open(url, name, props);
  if(wins[name] && (focus != false)) wins[name].focus();
}

function openLinkInBaseWin(link) {
   window.opener.location.href = link;
}

function openEditLink(url, name, props, focus) {
    openWindow(url, name, props, focus);
    if (wins[name] == null){
	alert("Sie haben Popup-Fenster blockiert! Aktivieren Sie diese, um aus dem Design editieren zu können. Alternativ besuchen Sie einfach die C::Web-IDE.");
    }
}

function openPopupWindow(script, args) {
 if (!script) {
   w = window.open(args,"CWebPopup", "width=500,height=500,scrollbars,resizable,menubar");
 }
 else {
   w = window.open("./popups/popup.html" + "?" + args,"CWebPopup", "width=400,height=600,scrollbars,resizable");
 }
 w.focus();
}

/*
 * Swiches between print and display styles.
 */
function switchStyles ()
{
    var link = document.getElementById("mainstyles");
    if (!link) return;
    if (link.href.indexOf("main.css") >= 0) {
        link.href = "print.css";
    } else {
        link.href = "main.css";
    }
}

/*
 * Event Helpers
 */
function attachEventHandler (element, eventName, handler)
{
	if (element.addEventListener) {
		/* W3C */
		element.addEventListener (eventName, handler, false);
	} else if (element.attachEvent) {
		/* MS */
		element.attachEvent ("on" + eventName, handler);
	}
	return handler;
}

function detachEventHandler (element, eventName, handler)
{
	if (element.removeEventListener) {
		/* W3C */
		element.removeEventListener (eventName, handler, false);
	} else if (element.detachEvent) {
		/* MS */
		element.detachEvent ("on" + eventName, handler);
	}
}

function cancelBubble (event)
{
	if (!event) event = window.event;
	if (!event) return;

	if (event.preventDefault) {
		/* W3C */
		event.preventDefault();
		event.stopPropagation();
	} else {
		/* MS */
		event.returnValue = false;
		event.cancelBubble = true;
	}
}

/*
 * Styled Tooltips
 */
    // Config
    var defXPos = false; // false or absolute px;
    var defYPos = false; // false or absolute px;
    var xDelay = 5;
    var yDelay = 5;
    var closeDelay = 1;

    // The Tooltip DOM object
    var tooltip = null;

    function setStyledTooltipPos(event) {

	// Get IEs scroll object information
	var docElem = (typeof document.compatMode != "undefined" && 
		       document.compatMode        != "BackCompat")
	    ? "documentElement" 
	    :  "body";

	if (!defXPos){
	    xPos = document.all 
		? window.event.x + document[docElem].scrollLeft 
		: event.pageX;
	}
	else {
	    xPos = defXPos;
	}
	if (!defYPos){
	    yPos = document.all 
		? window.event.y + document[docElem].scrollLeft 
		: event.pageY;
	}
	else {
	    yPos = defYPos;
	}

	// Set tooltips's pos
	if (tooltip){
	    tooltip.style.left = xPos + xDelay + "px";
	    tooltip.style.top = yPos + yDelay + "px";
	}

	// Detach pos finder eventHandler
	detachEventHandler (document, "mousemove", setStyledTooltipPos);
    }

    function showTooltip(id) {
	var already_open = false;
	if (tooltip){
	    // Are we open?
	    if (tooltip.id == id){
		already_open = true;
	    }
	    // No. It's another one, close it:
	    else {
		closeTooltip();
	    }
	}

	// Do the job we're called for:
	if (!already_open){
	    attachEventHandler (document, "mousemove", setStyledTooltipPos);
	    // open requested tooltip:
	    tooltip = document.getElementById(id);
	    tooltip.style.display = "block";
	}
    }

    function closeTooltip(event) {
	if (tooltip != null){
	    tooltip.style.display = "none";
	    tooltip = null;
	}
    }

    function closeTooltipById(id) {
	tooltip = document.getElementById(id);
	closeTooltip()
    }

    function sleep(sec){
	var start = (new Date()).getTime();
	while((new Date()).getTime() < start + 1000 * sec){};
    } 


/* cal */
var old_zindex = 0;
function raiseCalEvent(elem) {
    old_zindex = elem.style.zIndex;
    elem.style.zIndex = 1000;
}

function lowerCalEvent(elem) {
    elem.style.zIndex = old_zindex;
}

/* utility */
function toggleElementDisplay(elem_id,
			      link_id,
			      text_toggle_on,
			      text_toggle_off){
    var elem = document.getElementById(elem_id);
    var link = document.getElementById(link_id);

    if (elem.style.display == "none" ||
	!elem.style.display){
	elem.style.display = "block";
	link.innerHTML = text_toggle_off;
    }
    else {
	elem.style.display = "none";
	link.innerHTML = text_toggle_on;
    }
    elem.focus();
}
