/*
Various scripts used be EGEE Site
Update 8-10-2004 - Menu is now expanded by default and a cookie will 
keep track of the items the user collapsed

this used to work the other way around
*/

function mailMeNoSpam(user, domain)
{
	document.write('<a href=\"mailto:' + user + '@' + domain + '\">');
	document.write(user + '@' + domain + '</a>'); 
}

function popItUp(url, ref, windowName, width, height)
{
	ref=window.open(url,windowName,'height='+height+',width='+width+"'");
	if (window.focus) {ref.focus()}
	return false;
}

var cookieExpireDate = new Date("January 1, 2020");
var cookieName = "UI_SAV_Expandme";

function toggle(targetId, callerObj){
	if (document.getElementById){
		targetObj = document.getElementById(targetId);
	
		// get expanded items from cookie (if any)
		var itemString = getCookie(cookieName);
		var items = itemString ? itemString.split(',') : new Array();

		
		if (targetObj.style.display == "none") {
			// expand the target
			menuItemExpand(targetObj, callerObj);
			items = removeItem(items, targetId);
		} else {
			// collapse the target
			menuItemCollapse(targetObj, callerObj);
			items = addUniqueItem(items, targetId);
		}

		itemString = items.join(',');
		setCookie(cookieName, itemString, cookieExpireDate, '/');
		return false;
	} else {
		return true;
	}
}

/*
* Add an item to an array, 
* but only if the item value isn't already IN the array!
*/
function addUniqueItem(myArray, myItem) {
	if (myArray.length < 1) {
		return new Array(myItem);
	}
	var j = myArray.length;
	for (i=0; i < j; i++) {
		if (myArray[i] == myItem) {
			return myArray;
		}
	}
	myArray[i] = myItem;
	return myArray;
}

/*
* Removes an item from a given array, 
*/
function removeItem(myArray, myItem) {
	var j = myArray.length;
	for (i=0; i < j; i++) {
		if (myArray[i] == myItem) {
			deleteElement(myArray, i);
		}
	}
	return myArray;
}

/*
* Removes (cross-platform safe) an item from a given array by its numeric array index 
*/
function deleteElement(array, n) {
	//delete the nth element of array
	var length = array.length;
	if (n >= length || n<0)
		return;
	
	for (var i=n; i<length-1; i++)
		array[i] = array[i+1];
	array.length--;
}

/*
* Reads cookie and opens menu items accordingly
*/
function initMenu() {
	var itemString = getCookie(cookieName);
	if (itemString) {
		var itemArray = itemString.split(',');

		for (i=0; i < itemArray.length; i++) {
			targetObj = document.getElementById(itemArray[i]);
			callerObj = targetObj.parentNode.firstChild;
			menuItemCollapse(targetObj, callerObj)
		}
	}
}

/*
* Expand a menu item
*/
function menuItemExpand(targetObj, callerObj) {
	targetObj.style.display = "";
	callerObj.className = 'topitemdown';
}

/*
* Collapse a menu item
*/
function menuItemCollapse(targetObj, callerObj) {
	targetObj.style.display = "none";
	callerObj.className = 'topitem';
}

function button_click(control, msg) {
	control.value = msg;
	return true;
}


/*
* Show / Hide a DOM Node
*/
function showHide(targetId) {
	if (!document.getElementById){
		return false;
	}
	targetObj = document.getElementById(targetId);
	if (targetObj.style.display == "none") {
		targetObj.style.display = "";
	} else {
		targetObj.style.display = "none";
	}
}

function checkForOther(callerObj, targetId)
{
	if (!document.getElementById){
		return false;
	}
	targetObj = document.getElementById(targetId);

	if (targetObj.style.display == "none") {
		// other field is not visible, if other is selected show input field
		if (callerObj[callerObj.selectedIndex].value == 1) {
			showHide(targetId);	
		}
	} else {
		// other field is visible, if other is NOT selected, hide it
		if (callerObj[callerObj.selectedIndex].value != 1) {
			showHide(targetId);	
		}
	}
	
}


/*
* Cookie Functions
*/
// name - name of the cookie
// value - value of the cookie
// [expires] - expiration date of the cookie (defaults to end of current session)
// [path] - path for which the cookie is valid (defaults to path of calling document)
// [domain] - domain for which the cookie is valid (defaults to domain of calling document)
// [secure] - Boolean value indicating if the cookie transmission requires a secure transmission
// * an argument defaults when it is assigned null as a placeholder
// * a null placeholder is not required for trailing omitted arguments
function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

// name - name of the desired cookie
// * return string containing value of specified cookie or null if cookie does not exist
function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

// name - name of the cookie
// [path] - path of the cookie (must be same as path used to create cookie)
// [domain] - domain of the cookie (must be same as domain used to create cookie)
// * path and domain default if assigned null or omitted if no explicit argument proceeds
function deleteCookie(name, path, domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" + 
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

// date - any instance of the Date object
// * hand all instances of the Date object to this function for "repairs"
function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}
