/* Important -- Ce script nécessite la librairie lib_core.js */

var dhtmlLoad = true;

/* type de données début */

var DEFAULT_UNIT = 'px'; /* Unité CSS par défaut */

function Point(coordX,coordY)
{
	this.coordX = coordX;
	this.coordY = coordY;

	this.getCoordinateX = function()
	{
		return this.coordX;
	}

	this.getCoordinateY = function()
	{
		return this.coordY;
	}
}

function Dimension(dimX,dimY)
{
	this.dimX = dimX
	this.dimY = dimY

	this.getDimensionX = function()
	{
		return this.dimX
	}

	this.getDimensionY = function()
	{
		return this.dimY
	}
}

function Vector(deltaX,deltaY)
{
	this.deltaX = deltaX;
	this.deltaY = deltaY;

	this.getDeltaX = function()
	{
		return this.deltaX;
	}

	this.getDeltaY = function()
	{
		return this.deltaY;
	}
}

/* type de données fin */


function isIe()
{
	var rtN = false;
	var opStr = new RegExp('op[eé]ra');

	if((navigator.userAgent.toLowerCase().indexOf('msie') != -1) && (navigator.userAgent.toLowerCase().search(opStr) == -1))
	{
		rtN = true;
	}

	return rtN;
}

function isElement(obj)
{
	var ret = false;
	
	if(obj.nodeType && (obj.nodeType == 1))
	{
		ret = true;
	}
	
	return ret;
}

function getElementsByClassName(obj,clN)
{
	var resAr = null;

	if(obj.nodeType && ((obj.nodeType == 1) || (obj.nodeType == 9)))
	{
		resAr = new Array();
		var elName = '*';
		var clsName = null;

		if((typeof arguments[1]).toLowerCase() == 'string')
		{
			clsName = arguments[1];
		}

		if((arguments.length == 3) && ((typeof arguments[2]).toLowerCase() == 'string'))
		{
			elName = arguments[2];
		}

		var elemAr = obj.getElementsByTagName(elName);

		for(var i=0; i<elemAr.length; i++)
		{
			if(hasClassName(elemAr[i],clsName))
			{
				resAr[resAr.length] = elemAr[i];
			}
		}
	}

	return resAr;
}

function hasClassName(obj,clN)
{
	var cB = false;

	if(obj.nodeType && (obj.nodeType == 1))
	{
		var classSearch = new Array();
		
		if((typeof clN).toLowerCase() == 'string')
		{
			classSearch[0] = clN;
		}
		else if(testTypeOfObject(clN,Array))
		{
			classSearch = clN;
		}
		
		var cnt = 0;
		
		for(var i=0; i<classSearch.length; i++)
		{
			var classPat = classSearch[i];
			
			var eR = new RegExp('^'+classPat+' +| +'+classPat+' +| +'+classPat+'$|^'+classPat+'$','g');

			if(obj.className.search(eR) != -1)
			{
				cnt++;
			}
		}
		
		var allClass = false;
		
		if((arguments.length == 3) && ((typeof arguments[2]).toLowerCase() == 'boolean'))
		{
			allClass = arguments[2];
		}
		
		if((allClass && (cnt == arguments.length)) || (!allClass && (cnt > 0)))
		{
			cB = true;
		}
	}

	return cB;
}

function addClassName(obj,clN)
{
	if(obj.nodeType && (obj.nodeType == 1))
	{
		var classSearch = new Array();
		
		if((typeof clN).toLowerCase() == 'string')
		{
			classSearch[0] = clN;
		}
		else if(testTypeOfObject(clN,Array))
		{
			classSearch = clN;
		}
		
		for(var i=0; i<classSearch.length; i++)
		{
			var classPat = classSearch[i];
			
			var sep = '';

			if((obj.className != null) || (obj.className != ''))
			{
				sep = ' ';
			}

			if(obj.className.indexOf(classPat) == -1)
			{
				obj.className += sep+classPat;
			}
		}
	}
}

function removeClassName(obj,clN)
{
	if(obj.nodeType && (obj.nodeType == 1))
	{
		var classSearch = new Array();
		
		if((typeof clN).toLowerCase() == 'string')
		{
			classSearch[0] = clN;
		}
		else if(testTypeOfObject(clN,Array))
		{
			classSearch = clN;
		}
		
		for(var i=0; i<classSearch.length; i++)
		{
			var classPat = classSearch[i];
			
			if(obj.className && (obj.className.indexOf(classPat) != -1))
			{
				obj.className = obj.className.replace(new RegExp('^'+classPat+'\\b|\\b'+classPat+'\\b|\\b'+classPat+'$','g'),'');

				if(obj.className == '')
				{
					obj.removeAttribute('class');
					break;
				}
			}
		}
	}
}

function getParentElement(obj)
{
	var rtO = null;

	if(obj.parentNode)
	{
		rtO = obj.parentNode;
	}
	else if(obj.parentElement)
	{
		rtO = obj.parentElement;
	}

	return rtO;
}

function getAncestorElement(obj)
{
	var retEl = null;
	var tagN = null;
	var classN = null;

	if((arguments.length == 3) && testTypeOfObject(arguments[2],'string'))
	{
		classN = arguments[2];
	}

	if((arguments.length >= 2) && testTypeOfObject(arguments[1],'string'))
	{
		tagN = arguments[1];
	}

	var cP = getParentElement(obj);

	if(cP != null)
	{
		if(tagN == null)
		{
			if(classN == null)
			{
				retEl = cP;
			}
			else
			{
				if((cP.nodeType == 1) && hasClassName(cP,classN))
				{
					retEl = cP;
				}
				else
				{
					retEl = getAncestorElement(cP,tagN,classN);
				}
			}
		}
		else
		{
			if(classN == null)
			{
				if(cP.nodeName.toLowerCase() == tagN.toLowerCase())
				{
					retEl = cP;
				}
				else
				{
					retEl = getAncestorElement(cP,tagN,classN);
				}
			}
			else
			{
				if((cP.nodeName.toLowerCase() == tagN.toLowerCase()) && (cP.nodeType == 1) && hasClassName(cP,classN))
				{
					retEl = cP;
				}
				else
				{
					retEl = getAncestorElement(cP,tagN,classN);
				}
			}
		}
	}

	return retEl;
}

function getParentFromClass(obj,clN)
{
	var retEl = null;
	var tagN = null;

	if(arguments.length == 3 && testTypeOfObject(arguments[2],'string'))
	{
		tagN = arguments[2];
	}

	var cP = getParentElement(obj);

	if(cP != null)
	{
		if((((testTypeOfObject(tagN,'string') && (cP.nodeName.toLowerCase() == tagN.toLowerCase())) || (tagN == null)) && ((cP.nodeType == 1) && hasClassName(cP,clN))))
		{
			retEl = cP;
		}
		else
		{
			retEl = getParentFromClass(cP,clN,tagN);
		}
	}

	return retEl;
}

function getPreviousElement(obj)
{
	var rtO = null;

	if(obj.previousSibling.nodeType == 1)
	{
		rtO = obj.previousSibling;
	}
	else
	{
		rtO = getPreviousElement(obj.previousSibling);
	}

	return rtO;
}

function getNextElement(obj)
{
	var rtO = null;

	if(obj.nextSibling.nodeType == 1)
	{
		rtO = obj.nextSibling;
	}
	else
	{
		rtO = getNextElement(obj.nextSibling);
	}

	return rtO;
}

function getEvent()
{
	var evtObj = null;

	if(arguments[0] && arguments[0].target)
	{
		evtObj = arguments[0];
	}
	else if(window.event)
	{
		evtObj = window.event;
	}

	return evtObj;
}

function getObjectFromEvent()
{
	var targetObj = null;

	if((arguments.length == 1) && !testTypeOfObject(arguments[0],'undefined') && arguments[0].target)
	{
		targetObj = arguments[0].target;

		if(targetObj.nodeType == 3)
		{
			targetObj = getParentElement(targetObj);
		}
	}
	else if(window.event)
	{
		targetObj = window.event.srcElement;
	}

	return targetObj;
}

function addEvent(hObj,evT,evH)
{
	if(hObj.addEventListener)
	{
		hObj.addEventListener(evT,evH,false);
	}
	else
	{
		switch(evT.toLowerCase())
		{
			case 'click':
				hObj.onclick = evH;
				break;
			case 'mouseover':
				hObj.onmouseover = evH;
				break;
			case 'mouseout':
				hObj.onmouseout = evH;
				break;
			case 'mouseup':
				hObj.onmouseup = evH;
				break;
			case 'mousedown':
				hObj.onmousedown = evH;
				break;
			case 'focus':
				hObj.onfocus = evH;
				break;
			case 'submit':
				hObj.onsubmit = evH;
				break;
			case 'keypress':
				hObj.onkeypress = evH;
				break;
			case 'keyup':
				hObj.onkeyup = evH;
				break;
			case 'keydown':
				hObj.onkeydown = evH;
				break;
			case 'change':
				hObj.onchange = evH;
				break;
		}
	}
}

function removeEvent(hObj,evT,evH)
{
	var eventType = evT.toLowerCase();

	if(hObj.removeEventListener)
	{
		hObj.removeEventListener(eventType,evH,true);
	}
	else
	{
		switch(eventType)
		{
			case 'click':
				hObj.onclick = null;
				break;
			case 'mouseover':
				hObj.onmouseover = null;
				break;
			case 'mouseout':
				hObj.onmouseout = null;
				break;
			case 'focus':
				hObj.onfocus = null;
				break;
			case 'submit':
				hObj.onsubmit = null;
				break;
		}
	}
}

function getInnerWindowDimension()
{
	var winInnerDim = null;
	var winDimX,winDimY;

	if(testTypeOfObject(window.innerWidth,'number'))
	{
		winDimX = window.innerWidth;
		winDimY = window.innerHeight;
	}
	else if(testTypeOfObject(document.body.offsetWidth,'number'))
	{
		winDimX = document.body.offsetWidth;
		winDimY = document.body.offsetHeight;

		if(document.compatMode && (document.compatMode == 'CSS1Compat'))
		{
			winDimX = document.documentElement.offsetWidth;
			winDimY = document.documentElement.offsetHeight;
		}
	}

	if(winDimX && winDimY)
	{
		winInnerDim = new Dimension(winDimX,winDimY);
	}

	return winInnerDim
}

function getScrollCoordinate()
{
	var scrollCoord = null;
	var cX,cY;

	if(testTypeOfObject(window.pageXOffset,'number'))
	{
		cX = window.pageXOffset;
		cY = window.pageYOffset;
	}
	else if(testTypeOfObject(document.body.scrollLeft,'number'))
	{
		var cX = document.body.scrollLeft;
		var cY = document.body.scrollTop;

		if(document.compatMode && (document.compatMode == 'CSS1Compat'))
		{
			cX = document.documentElement.scrollLeft;
			cY = document.documentElement.scrollTop;
		}
	}

	if(testTypeOfObject(cX,'number') && testTypeOfObject(cY,'number'))
	{
		scrollCoord = new Vector(cX,cY);
	}

	return scrollCoord;
}

function getCursorDocumentCoordinate()
{
	var cursorCoord = null;
	var localEvt;

	var scrollCoord = getScrollCoordinate();

	if(isInitialized(arguments[0]))
	{
		localEvt = arguments[0];
	}
	else if(window.event)
	{
		localEvt = window.event;
	}

	if(localEvt && testTypeOfObject(localEvt.clientX,'number'))
	{
		cursorCoord = new Point(localEvt.clientX + scrollCoord.getDeltaX(),localEvt.clientY + scrollCoord.getDeltaY());
	}

	return cursorCoord;
}

function getCursorWindowCoordinate()
{
	var cursorCoord = null;
	var localEvt;

	if(arguments[0])
	{
		localEvt = arguments[0];
	}
	else if(window.event)
	{
		localEvt = window.event;
	}

	if(localEvt && testTypeOfObject(localEvt.clientX,'number'))
	{
		cursorCoord = new Point(localEvt.clientX,localEvt.clientY);
	}

	return cursorCoord;
}

function hasStyle(nO)
{
	var rtB = false;
	
	if(nO.style)
	{
		rtB = true;
	}
	
	return rtB;
}

function getObjectPosition(nO)
{
	var rtPos = null;
	
	if(document.defaultView)
	{
		var compStyle = document.defaultView.getComputedStyle(nO,null);
		
		rtPos = compStyle.getPropertyValue('position');
	}
	else if(hasStyle(nO))
	{
		rtPos = nO.style.position;
	}
	
	if(rtPos != null)
	{
		rtPos = rtPos.toLowerCase();
	}
	
	return rtPos;
}

function getObjectDisplay(nO)
{
	var rtDisp = null;
	
	if(document.defaultView)
	{
		var compStyle = document.defaultView.getComputedStyle(nO,null);
		
		rtDisp = compStyle.getPropertyValue('display');
	}
	else if(hasStyle(nO))
	{
		rtDisp = nO.style.display;
	}
	
	if(rtDisp != null)
	{
		rtDisp = rtDisp.toLowerCase();
	}
	
	return rtDisp;
}

function getObjectCoordinate(nO)
{
	var objectCoord = null;
	var cX,cY;

	if(document.defaultView)
	{
		var compStyle = document.defaultView.getComputedStyle(nO,null);

		if(getObjectPosition(nO) == 'static')
		{
			if(getObjectDisplay(nO) == 'none')
			{
				if(hasStyle(nO))
				{
					cX = nO.style.marginLeft;
					cY = nO.style.marginTop;
				}
			}
			else
			{
				cX = compStyle.getPropertyValue('margin-left');
				cY = compStyle.getPropertyValue('margin-top');
			}
		}
		else
		{
			if(getObjectDisplay(nO) == 'none')
			{
				if(hasElementStyle(nO))
				{
					cX = nO.style.left;
					cY = nO.style.top;
				}
			}
			else
			{
				cX = compStyle.getPropertyValue('left');
				cY = compStyle.getPropertyValue('top');
			}
		}
	}
	else if(testTypeOfObject(nO.offsetLeft,'number'))
	{
		cX = nO.offsetLeft;
		cY = nO.offsetTop;
	}

	if(!testTypeOfObject(cX,'undefined') && !testTypeOfObject(cY,'undefined'))
	{
		objectCoord = new Point(getNumberFromString(cX),getNumberFromString(cY));
	}

	return objectCoord;
}

function setObjectCoordinate(nO,objectCoordX,objectCoordY)
{
	if(hasStyle(nO))
	{
		setObjectCoordinateX(nO,objectCoordX);
		setObjectCoordinateY(nO,objectCoordY);
	}
}

function setObjectCoordinateX(nO,objectCoordX)
{
	if(hasStyle(nO))
	{
		nO.style.left = objectCoordX+DEFAULT_UNIT;
	}
}

function setObjectCoordinateY(nO,objectCoordY)
{
	if(hasStyle(nO))
	{
		nO.style.top = objectCoordY+DEFAULT_UNIT;
	}
}

function getObjectDimension(nO)
{
	var objectDim = null;
	var objDX,objDY;

	if(document.defaultView)
	{
		var compStyle = document.defaultView.getComputedStyle(nO,null);

		objDX = getNumberFromString(compStyle.getPropertyValue('width'));

		var bL = getNumberFromString(compStyle.getPropertyValue('border-left-width'));
		var bR = getNumberFromString(compStyle.getPropertyValue('border-right-width'));
		var bT = getNumberFromString(compStyle.getPropertyValue('border-top-width'));
		var bB = getNumberFromString(compStyle.getPropertyValue('border-bottom-width'));

		var pL = getNumberFromString(compStyle.getPropertyValue('padding-left'));
		var pR = getNumberFromString(compStyle.getPropertyValue('padding-right'));
		var pT = getNumberFromString(compStyle.getPropertyValue('padding-top'));
		var pB = getNumberFromString(compStyle.getPropertyValue('padding-bottom'));

		if(bL > 0)
		{
			objDX += bL;
		}

		if(bR > 0)
		{
			objDX += bR;
		}

		if(pL > 0)
		{
			objDX += pL;
		}

		if(pR > 0)
		{
			objDX += pR;
		}

		objDY = getNumberFromString(compStyle.getPropertyValue('height'));

		if(bT > 0)
		{
			objDY += bT;
		}

		if(bB > 0)
		{
			objDY += bB;
		}

		if(pT > 0)
		{
			objDY += pT;
		}

		if(pB > 0)
		{
			objDY += pB;
		}
	}
	else if(testTypeOfObject(nO.offsetWidth,'number'))
	{
		objDX = nO.offsetWidth;
		objDY = nO.offsetHeight;
	}

	if(testTypeOfObject(objDX,'number'),testTypeOfObject(objDY,'number'))
	{
		objectDim = new Dimension(objDX,objDY);
	}

	return objectDim;
}

function setObjectCoordinateInWindow(obj,cX,cY)
{
	var wDim = getInnerWindowDimension();

	var oDim = getObjectDimension(obj);

	var dX = 0;

	if(testTypeOfObject(arguments[3],'number'))
	{
		dX = arguments[3];
	}

	var dY = 0;

	if(testTypeOfObject(arguments[4],'number'))
	{
		dY = arguments[4];
	}

	var hCoord = cX+dX;

	if(cX+oDim.getDimensionX() > wDim.getDimensionX())
	{
		var tCX = cX-(oDim.getDimensionX()+dX);
		hCoord = (tCX > 0) ? tCX : 0;
	}

	var vCoord = cY+dY;

	if(cY+oDim.getDimensionY() > wDim.getDimensionY())
	{
		var tcY = cY-(oDim.getDimensionY()+dY);
		vCoord = (tcY > 0) ? tcY : 0;
	}

	/*obj.style.left = hCoord+DEFAULT_UNIT;
	obj.style.top = vCoord+DEFAULT_UNIT;*/
	
	setObjectCoordinate(obj,hCoord,vCoord);
}

function getAttributeNS(elm,ns,attrN,pref)
{
	var attr = null;
	
	if(elm.getAttributeNS && testTypeOfObject(elm.getAttributeNS(ns,attrN),'string') && (elm.getAttributeNS(ns,attrN).length > 0))
	{
		attr = elm.getAttributeNS(ns,attrN);
	}
	else if(elm.getAttribute)
	{
		attr = elm.getAttribute(pref+':'+attrN);
	}
	
	return attr;
}

function removeAllNode(obj)
{
	while(obj.hasChildNodes())
	{
		obj.removeChild(obj.firstChild);
	}
}

function removeNodes(obj)
{
	ln = 0;
	
	if((arguments.length >= 2) && testTypeOfObject(arguments[1],'number'))
	{
		ln = arguments[1];
	}
	
	var elColl = obj.getElementsByTagName('*');
	
	while(elColl.length > ln)
	{
		obj.removeChild(elColl.item(elColl.length-1));
	}
}

function getLinesFromHtml(str)
{
	var brEr = /<br ?\/?>/i;

	var rtAr = new Array(str);

	if(str.search(brEr) != -1)
	{
		rtAr = str.split(brEr);
	}

	return rtAr;
}

function getLinesFromText(str)
{
	var brEr = /\n\r|\n|\r/i;

	var rtAr = new Array(str);

	if(str.search(brEr) != -1)
	{
		rtAr = str.split(brEr);
	}

	return rtAr;
}