var dhtmlLoad = true;

/* type de donnees debut */

function Point(coordX,coordY)
{
	this.coordX = coordX;
	this.coordY = coordY;

	this.getCoordinateX = function()
	{
		return this.coordX;
	}

	this.getCoordinateY = function()
	{
		return this.coordY;
	}
}

function testTypeOfObject(refObject,strType)
{
	var retBool = false;

	if((typeof strType).toLowerCase() == 'string')
	{
		if((typeof refObject).toLowerCase() == strType.toLowerCase())
		{
			retBool = true;
		}
	}
	else if((typeof strType).toLowerCase() == 'function')
	{
		if(refObject instanceof strType)
		{
			retBool = true;
		}
	}

	return retBool;
}

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 donnees fin */


function isIe()
{
	var rtN = false;
	var opStr = new RegExp( 'op[e\x0233]ra' );

	if ( ( navigator.userAgent.toLowerCase().indexOf('msie') != -1) && (navigator.userAgent.toLowerCase().search(opStr) == -1 ) )
	{
		rtN = true;
	}

	return rtN;
}

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+'\\b|\\b'+clN+'\\b|\\b'+clN+'$','g');

		if(obj.className.search(eR) != -1)
		{
			cB = true;
		}
	}

	return cB;
}

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(testTypeOfObject(nm,'string'))
	{
		if(hObj.className && (hObj.className.indexOf(nm) != -1))
		{
			hObj.className = hObj.className.replace(new RegExp('^'+nm+'\\b|\\b'+nm+'\\b|\\b'+nm+'$','g'),'');

			if(hObj.className == '')
			{
				hObj.className = null;
			}
		}
	}
}

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);

	var eR = new RegExp('^'+classN+'\\b|\\b'+classN+'\\b|\\b'+classN+'$','g');

	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);

	var eR = new RegExp('^'+clN+'\\b|\\b'+clN+'\\b|\\b'+clN+'$','g');

	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 '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(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 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+'px';
	obj.style.top = vCoord+'px';
}

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;
}