/*
 * $RCSfile: rhealib.js,v $
 * $Revision: 1.5 $, $Date: 2007/11/16 13:40:56 $
 * Copyright Docubase Systems 2004
 */

/* fonction javascript utilitaires */

/**
 * Ajout d'un eventlistener a un element
 * @param target l'element auquel on ajoute le listener
 * @param le nom de l'evenement que l'on veut ecouter
 * @param handler le listener
 * @param capture doit on capturer (true par defaut)
 * @param dontderegister booleen indiquant si l'on ne doit pas desenregistrer au dechargement
 */
function addEventListenerRhea(target, eventName, handler, capture, dontderegister) {
	if (typeof capture == "undefined") {
		capture = true;
	}
	if (typeof target.addEventListener != "undefined") {
		target.addEventListener(eventName, handler, capture);
	} else if (typeof target.attachEvent != "undefined") {
		target.attachEvent("on" + eventName, handler);
	}
	if (!dontderegister) {
		// au dechargement de la page, on s'assure que les handlers sont desenregistres, afin d'eviter des memory leaks
		addEventListenerRhea(window,"unload",function() {removeEventListenerRhea(target,eventName,handler,capture);},true,true);
	}
}

/**
 * Suppression d'un eventlistener a un element
 * @param target l'element auquel on retire le listener
 * @param le nom de l'evenement que l'on ne veut plus ecouter
 * @param handler le listener
 * @param capture doit on capturer (true par defaut)
 */
function removeEventListenerRhea(target, eventName, handler, capture) {
	if (typeof capture == "undefined") {
		capture = true;
	}
	if (typeof target.removeEventListener != "undefined") {
		target.removeEventListener(eventName, handler, capture);
	} else if (typeof target.detachEvent != "undefined") {
		target.detachEvent("on" + eventName, handler);
	}
}

function removeClassRhea(element, className) {
	if (!(element && className)) {
		return;
	}
	var classes = element.className.split(" ");
	var nClasses = new Array();
	for (var i = 0; i < classes.length; i++) {
		if (classes[i] != className) {
			nClasses[nClasses.length] = classes[i];
		}
	}
	element.className = nClasses.join(" ");
}

function addClassRhea(element, className) {
	if (!(element && className)) {
		return;
	}
	removeClassRhea(element, className);
	element.className += " " + className;
}

function replaceClassRhea(element, oldClassName, newClassName) {
	if (!(element && oldClassName && newClassName)) {
		return;
	}

	var classes = element.className.split(" ");
	var nClasses = new Array();
	for (var i = 0; i < classes.length; i++) {
		if (classes[i] != oldClassName) {
			nClasses[nClasses.length] = classes[i];
		}
	}
	nClasses[nClasses.length] = newClassName;
	element.className = nClasses.join(" ");
}

//******************************************************************************
//  Cookie Functions -- "Night of the Living Cookie" Version (25-Jul-96)
//  Written by:  Bill Dortch, hIdaho Design <bdortch@hidaho.com>
//  The following functions are released to the public domain.

//  "Internal" function to return the decoded value of a cookie
function getCookieVal (offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}


//  Function to return the value of the cookie specified by "name".
//    name -    String object containing the cookie name.
//    returns - String object containing the cookie value,
//              or null if the cookie does not exist.
//
function GetCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return getCookieVal (j);
	i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
  }
  return null;
}


//  Function to create or update a cookie.
//    name - String object containing the cookie name.
//    value - String object containing the cookie value.  May contain
//         any valid string characters.
//    [expires] - Date object containing the expiration data of the cookie.  If
//         omitted or null, expires the cookie at the end of the current session.
//    [path] - String object indicating the path for which the cookie is valid.
//         If omitted or null, uses the path of the calling document.
//    [domain] - String object indicating the domain for which the cookie is
//         valid. If omitted or null, uses the domain of the calling document.
//    [secure] - Boolean (true/false) value indicating whether cookie
//         transmission requires a secure channel (HTTPS).  
//
//  The first two parameters are required.  The others, if supplied, must
//  be passed in the order listed above.  To omit an unused optional field,
//  use null as a place holder.  For example, to call SetCookie using name,
//  value and path, you would code:
//
//      SetCookie ("myCookieName", "myCookieValue", null, "/");
//
//  Note that trailing omitted parameters do not require a placeholder.
//
//  To set a secure cookie for path "/myPath", that expires after the
//  current session, you might code:
//
//      SetCookie (myCookieVar, cookieValueVar, null, "/myPath", null, true);
//
function SetCookie (name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
}


//  Function to delete a cookie. (Sets expiration date to start of epoch)
//    name -   String object containing the cookie name
//    path -   String object containing the path of the cookie to delete.
//             This MUST be the same as the path used to create the cookie, or
//             null/omitted if no path was specified when creating the cookie.
//    domain - String object containing the domain of the cookie to delete.
//             This MUST be the same as the domain used to create the cookie, or
//             null/omitted if no domain was specified when creating the cookie.
//
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";
  }
}

/**
 * Create an hidden element into a form 
 * name - name attribute of the input field
 * value - value attribute of the input field
 * form - the form element, where to add hidden input fields
 */
var createHidden = function(name, value, form) {
	var hidden = document.createElement('input') ;
	hidden.setAttribute('type', 'hidden') ;
	hidden.setAttribute('name', name) ;
	hidden.setAttribute('value', value) ;
	form.appendChild(hidden) ;
}

var locationSchemeHostPort = function() {
	var host = window.location.hostname ;
	var port = window.location.port ;
	var protocol = window.location.protocol ;
	if ( port == '80' ) {
	   return protocol+'//'+host ;
	} else {
	   return protocol+'//'+host+':'+port ;
	}
}

//******************************************************************************