// *** COMMON CROSS-BROWSER COMPATIBILITY CODE ***

var isDOM=document.getElementById?1:0;
var isIE=document.all?1:0;
var isNS4=navigator.appName=='Netscape'&&!isDOM?1:0;
var isIE4=isIE&&!isDOM?1:0;
var isOp=window.opera?1:0;
var isDyn=isDOM||isIE||isNS4;


// convert all characters to lowercase to simplify testing
var agt=navigator.userAgent.toLowerCase();

// *** BROWSER VERSION ***
// Note: On IE5, these return 4, so use is_ie5up to detect IE5.
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);

var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie3    = (is_ie && (is_major < 4));
var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
var is_ie4up  = (is_ie && (is_major >= 4));
var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1));
var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);
var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5);



/* --------------------------------------------------
	Population automatique des proprietes d'un objet
*/
function addProps(obj, data, names, addNull) {
	for (var i = 0; i < names.length; i++) if(i < data.length || addNull) obj[names[i]] = data[i];
}




/* --------------------------------------------------
	Recherche un objet DHTML d'ID donnee et le renvoit (ou null si inexistant)
*/
function getObj(id) {
	if (isDOM && document.getElementById(id)!=null) {
		return document.getElementById(id);
	}
	
	// on cherche dans document.all
	if (isIE && eval("typeof(document.all[id])")!="undefined") {
		return document.all[id];
	}

	// pas trouve !!
	return null;
}



/* --------------------------------------------------
	Gestion des actions sur le onload du document
*/
var onLoadActions = new Array();

function addOnLoadAction(action)
{
	if (action!=null && action!="")
		onLoadActions[onLoadActions.length] = action;
}

function executeOnLoadActions()
{
	var i;
	for(i=0; i<onLoadActions.length; i++)
		eval(onLoadActions[i]);
}

addEvent(window,"load",executeOnLoadActions);


function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}



// ----------------------------------------------------------------------------
// Pour memoriser la position du scroll il faut avoir les champs
// coordHolderX et coordHolderY dans le formulaire
// et mettre le nom du formulaire dans la variable Javascript "scrollPosFormId"

var scrollPosFormIds = new Array();
var scrollPosFormFieldPrefixs = new Array();
var scrollPosFormTimer = null;

function scrollController_GetCoords()
{
  if (scrollPosFormIds==null || scrollPosFormIds.length==0)
	return;

  var scrollX, scrollY;
  
  if (document.all)
  {
     if (!document.documentElement.scrollLeft)
        scrollX = document.body.scrollLeft;
     else
        scrollX = document.documentElement.scrollLeft;
           
     if (!document.documentElement.scrollTop)
        scrollY = document.body.scrollTop;
     else
        scrollY = document.documentElement.scrollTop;
  }   
  else
  {
     scrollX = window.pageXOffset;
     scrollY = window.pageYOffset;
  }

  for(var i=0; i<scrollPosFormIds.length; i++) {
	  var f = getObj(scrollPosFormIds[i]);
	  
	  var fX = getField(f, scrollPosFormFieldPrefixs[i]+"coordHolderX");
	  fX.value = scrollX;
	  
	  var fY = getField(f, scrollPosFormFieldPrefixs[i]+"coordHolderY");
	  fY.value = scrollY;
  }
  
  return true;  
}



function scrollController_Scroll() {
  if (scrollPosFormIds==null || scrollPosFormIds.length==0)
	return;
	
  var x=0;
  var y=0;
  for(var i=0; i<scrollPosFormIds.length; i++) {
	  var f = getObj(scrollPosFormIds[i]);
	  
	  var fX = getField(f, scrollPosFormFieldPrefixs[i]+"coordHolderX");
	  var fY = getField(f, scrollPosFormFieldPrefixs[i]+"coordHolderY");
	  
	  x = fX.value;
	  y = fY.value;	  
	  
	  if (x!="")
	  	break;
  }
  window.scrollTo(x, y);
  scrollPosFormTimer = setTimeout("window.scrollTo("+x+","+y+")", 50);
  
  return true;
}



function scrollController_clearTimer() {
	if (scrollPosFormTimer!=null) {
		clearTimeout(scrollPosFormTimer);
		scrollPosFormTimer=null;
	}
}

addEvent( window, "scroll", scrollController_GetCoords);
addEvent( window, "keypress", scrollController_GetCoords);
addEvent( window, "click", scrollController_GetCoords);




/* --------------------------------------------------
	Scrolle la fenetre jusqu'a la position d'un objet
*/
function scrollWindowTo(obj) {
	scrollController_clearTimer();
	window.scrollTo(0, getDim(obj).y);
}


/* --------------------------------------------------
	Fonction qui renvoie un objet contenant la position (x, y) d'un objet
*/
function getDim(el){
	if (typeof(el.offsetLeft)=="undefined")
		return {x:0,y:0};

	for (var lx=0,ly=0;el!=null;
		lx+=el.offsetLeft,ly+=el.offsetTop,el=el.offsetParent);
	return {x:lx,y:ly}
}



function getField (form, fieldName) {
  if (!document.all)
	return form[fieldName];
  else  // IE has a bug not adding dynamically created field 
		// as named properties so we loop through the elements array 
	for (var e = 0; e < form.elements.length; e++)
	  if (form.elements[e].name == fieldName)
		return form.elements[e];
  return null;
}        


function getHauteurElement(obj) {
	//TODO ie
	return parseInt(obj.offsetHeight+30);
}

