var dhtmlLoad = true;

/* type de données début */

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 getNumberFromString(strVal)
{
	var retNum = null;

	if(testTypeOfObject(strVal,'string'))
	{
		var numVal = /(-?[0-9]*(\.[0-9]+)?)(px)?/;

		var res = numVal.exec(strVal);

		if(res)
		{
			retNum = parseFloat(res[1]);
		}
	}
	else if(testTypeOfObject(strVal,'number'))
	{
		retNum = strVal;
	}

	return retNum;
}


function testTypeOfObject(refObject,strType)
{
	var retBool = false;

	if((typeof refObject).toLowerCase() == strType.toLowerCase())
	{
		retBool = true;
	}

	return retBool;
}

function testClassOfObject(refObject,refType)
{
	var retBool = false;

	if((testTypeOfObject(refObject,'object') || testTypeOfObject(refObject,'function')) && (refObject instanceof refType))
	{
		retBool = true;
	}

	return retBool;
}

function isIe()
{
	var rtN = false;

	if((navigator.userAgent.toLowerCase().indexOf('msie') != -1) && (navigator.userAgent.toLowerCase().search(/op[eé]ra/) == -1))
	{
		rtN = true;
	}

	return rtN;
}

function addClassName(hObj,nm)
{
	if((typeof nm).toLowerCase() == 'string')
	{
		var sep = '';

		if(hObj.className != '')
		{
			sep = ' ';
		}

		if(hObj.className.indexOf(nm) == -1)
		{
			hObj.className += sep+nm;
		}
	}
}

function removeClassName(hObj,nm)
{
	if((typeof nm).toLowerCase() == 'string')
	{
		if(hObj.className && (hObj.className.indexOf(nm) != -1))
		{
			hObj.className = hObj.className.replace(new RegExp(' ?'+nm+'|'+nm+' ?','g'),'');

			if(hObj.className == '')
			{
				hObj.className = null;
			}
		}
	}
}

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 eR = new RegExp('^'+clN+' +| +'+clN+' +| +'+clN+'$|^'+clN+'$','g');

		if(obj.className.search(eR) != -1)
		{
			cB = true;
		}
	}

	return cB;
}

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 getObjectFromEvent()
{
	var targetObj = null;

	if(arguments[0] && 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 'focus':
				hObj.onfocus = evH;
				break;
			case 'submit':
				hObj.onsubmit = 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(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 getObjectPosition(obj)
{
	var posValue = null;

	if(document.defaultView)
	{
		posValue = document.defaultView.getComputedStyle(obj,null).getPropertyValue('position');
	}
	else if(obj.style)
	{
		posValue = nO.style.position;
	}

	return posValue;
}

function getObjectDisplay(obj)
{
	var posValue = null;

	if(document.defaultView)
	{
		posValue = document.defaultView.getComputedStyle(obj,null).getPropertyValue('display');
	}
	else if(obj.style)
	{
		posValue = nO.style.display;
	}

	return posValue;
}

function getObjectCoordinate(obj)
{
	var objectCoord = null;
	var cX,cY;

	if(document.defaultView)
	{
		var compStyle = document.defaultView.getComputedStyle(obj,null);

			if(getObjectPosition(obj) == 'static')
			{
				if(getObjectDisplay(obj) == 'none')
				{
					if(obj.style)
					{
						cX = nO.style.marginLeft;
						cY = nO.style.marginTop;
					}
				}
				else
				{
					cX = compStyle.getPropertyValue('margin-left');
					cY = compStyle.getPropertyValue('margin-top');
				}
			}
			else
			{
				if(getObjectDisplay(obj) == 'none')
				{
					if(obj.style)
					{
						cX = nO.style.left;
						cY = nO.style.top;
					}
				}
				else
				{
					cX = compStyle.getPropertyValue('left');
					cY = compStyle.getPropertyValue('top');
				}
			}
	}
	else if(testTypeOfObject(obj.offsetLeft,'number'))
	{
		cX = obj.offsetLeft;
		cY = obj.offsetTop;
	}

	if(!testTypeOfObject(cX,'undefined') && !testTypeOfObject(cY,'undefined'))
	{
		objectCoord = new Point(getNumberFromString(cX),getNumberFromString(cY));
	}

	return objectCoord;
}

function getObjectCoordinateInsideWindow(obj)
{
	var objectCoord = null;
	var layerCoordX,layerCoordY;

	var deltaX = arguments[2] || 0;
	var deltaY = arguments[3] || 0;

	var originalCoord = new Point(0,0);

	if(testClassOfObject(arguments[1],Point))
	{
		originalCoord = arguments[1];
	}

	var winDim = getInnerWindowDimension();
	var objDim = getObjectDimension(obj);
	
	var layerCoordX = originalCoord.getCoordinateX()+deltaX;
	var layerCoordY = originalCoord.getCoordinateY()+deltaY;

	if(originalCoord.getCoordinateX()+objDim.getDimensionX() > winDim.getDimensionX())
	{
		layerCoordX = originalCoord.getCoordinateX()-(objDim.getDimensionX()+deltaX);
	}

	if(originalCoord.getCoordinateY()+objDim.getDimensionY() > winDim.getDimensionY())
	{
		layerCoordY = originalCoord.getCoordinateY()-(objDim.getDimensionY()+deltaY);
	}

	if(!testTypeOfObject(layerCoordX,'undefined') && !testTypeOfObject(layerCoordY,'undefined'))
	{
		objectCoord = new Point(getNumberFromString(layerCoordX),getNumberFromString(layerCoordY));
	}

	return objectCoord;
}

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(objDX,objDY)
	{
		objectDim = new Dimension(objDX,objDY);
	}

	return objectDim;
}

function removeAllNode(obj)
{
	while(obj.hasChildNodes())
	{
		obj.removeChild(obj.firstChild);
	}
}

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;
}