//	Copyright 2008 Idexis SARL; droits d'utilisation concédés pour le site ASSUR-TV

//	browser

var nullString = "";
var isNewGen = (document.getElementById);

var versionAgent = 0;
var strAgent = 0;

//	version du navigateur

function getAgent(st)
{
	strAgent = window.navigator.userAgent;
	var intIndex = strAgent.indexOf(st);
	if (intIndex != -1)
		versionAgent = parseInt(strAgent.substring(intIndex + st.length, intIndex + st.length + 1), 10);
    else
    	versionAgent = 0;
	return (intIndex != -1);
};

var mIsIe = -1;

function isIE()
{
	if (mIsIe == -1) mIsIe = getAgent("MSIE ")
	return mIsIe;
};

function isNS()
{
	var tmp1, tmp2;

	tmp2 = isIE();
	tmp1 = getAgent("Netscape/");
	if (!tmp1 && !tmp2) tmp1 = getAgent("Mozilla/");
	return tmp1;
};

//	dhtml

function getEl(id, doc)
{
	if (doc == undefined) doc = document;
    if (isNewGen)
		return doc.getElementById(id);
    else
		if (isIE())
		{
			if (versionAgent <= 4)
				return findId(id, doc);
			else
				return doc.all[id];
		}
		else
		//if (isNS())
			return doc.layers[id];
};

function numeric(s)
{
	if (s == "&nbsp;") return 0;
	s = stripWhitespace(s)
	if (s == nullString)
		return 0;
	else
		return parseFloat(s);
};

function toInt(v)
{
	if (v == undefined)
		return 0;
	else
		if (v == NaN)
			return 0;
		else
			if (v == nullString)
				return 0;
			else
				return parseInt(v, 10);
};

function toNumber(st)
{
	//	ne gère pas les ","
	var tmp = stripCharsInBag (st, "  ");
	var tmp = tmp.replace(/,/g , ".");
	if (tmp == nullString)
		return 0;
	else
		return Number(tmp);
};


var semiCol = ";";
var decSep = ".";
var whitespace = "  \t\n\r";
var mPrefix = "Vous n'avez pas saisi de valeur dans le champ '";
var mSuffix = "'. Il s'agit d'un champ obligatoire !";
var iPrefix = "Le champ '";
var iSuffix = "' est incorrect !";
var iEmail = "L'adresse de courrier électronique doit être valide, saisie sous la forme moi@mondomaine.suffixe, et ne pas contenir de caractères d'espacement !";

var integers = 0;
var nintegers = 1;
var decimals = 2;
var ndecimals = 3;
var ndates = 4;

var decSep = ".";

var msk = new Array();
msk[integers]	= "0123456789";
msk[nintegers]	= msk[integers] + "-";
msk[decimals]	= msk[integers] + decSep;
msk[ndecimals]	= msk[decimals] + "-";
msk[ndates]	= msk[decimals] + "/";

var rex = new Array();
rex[integers]	= /^\d*$/;
rex[nintegers]	= /^-?\d*$/;
rex[decimals]	= /^\d*.?\d*$/;
rex[ndecimals]	= /^-?\d*.?\d*$/;

function stringDup(st, n)
{
	var tmp = nullString;
	for (var i = 1; i <= n; i++)
		tmp += st;
	return tmp;
};

function insertSeparators(s, separator)
{
	if (separator == undefined) separator = " ";
	var temp = "";
	var cpt = 0;
	for (var i = 0;i < s.length; i++)
	{
		temp = s.charAt(s.length - 1 - i) + temp;
		if ((++cpt % 3) == 0) temp = separator + temp;
	};
	return temp;
};

function format(number, nbDecimals)
{
	if (nbDecimals == undefined) nbDecimals = 0;
	var init = nbDecimals;
	var s = number.toString();
	var intIndex = s.indexOf(decSep);
	if (intIndex == -1)
	{
		var tmp = insertSeparators(s);
		if (nbDecimals != 0)
			tmp += decSep + stringDup("0", nbDecimals);
		return tmp;
	}
	else
	{
		var temp = nullString;
		var i = intIndex + 1;
		while ((i <= s.length - 1) && (nbDecimals != 0))
		{
			temp += s.substring(i, i + 1);
			i++;
			nbDecimals --;
		};
		while (nbDecimals > 0)
		{
			temp += "0";
			nbDecimals --;
		};
		var tmp = insertSeparators(s.substring(0, intIndex));
		if (init != 0)
			tmp += decSep + temp ;
		return tmp;
	};
};

function stripCharsInBag (s, bag)
{
	var returnString = nullString;
	for (var i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	};
	return returnString;
};

function instr(str, search)
{
	return 1 + str.indexOf(search);
};

function mid(str, pos, nb)
{
	if (nb != undefined)
		return str.substr(pos - 1, nb);
	else
		return str.substr(pos - 1);
};

function left(str, nb)
{
	return mid(str, 1, nb);
};

function right(str)
{
	return mid(str, str.length, 1);
};

function stripWhitespace (s)
{
	return stripCharsInBag (s, whitespace);
};

function charInString (c, s)
{
	for (i = 0; i < s.length; i++)
	{
		if (s.charAt(i) == c) return true;
	};
	return false;
};

function stripInitialWhitespace (s)
{
	var i = 0;
	while ((i < s.length) && charInString (s.charAt(i), whitespace)) i++;
	return s.substring (i, s.length);
};

function isEmpty(s)
{
	return ((s == null) || (s.length == 0));
};

function isOnlySpaces(s)
{
	if (isEmpty(s)) return true;
	for (var i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false;
	};
	return true;
};

function isContainingSpaces(s)
{
	if (isEmpty(s)) return true;
	var fnd = false;
	for (var i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		fnd = (fnd || (whitespace.indexOf(c) != -1));
	};
	return fnd;
};

function isEmail(s, isMultipleAccepted)
{
	var emailsArray;
	
	if (isMultipleAccepted == undefined) isMultipleAccepted = false;
	if (isMultipleAccepted)
	{
		emailsArray = s.split(semiCol);
		var tmp = true;
		for (var i = 0; i < emailsArray.length ; i++)
		{
			tmp = tmp && isEmail(emailsArray[i]);
		};
		return tmp;
	}
	else
	{
		if (instr(s, semiCol) != 0) return false;
		if (isContainingSpaces(s)) return false;
		var i = 0;
		var sLength = s.length;
		while ((i < sLength) && (s.charAt(i) != "@")) i++;
		if ((i >= sLength) || (s.charAt(i) != "@"))
			return false;
		else
			i += 2;
		while ((i < sLength) && (s.charAt(i) != decSep)) i++;
		return ((i < sLength - 1) && (s.charAt(i) == decSep));
	};
};

function warnEmpty (theField, s)
{
	theField.focus();
	alert(mPrefix + s + mSuffix);
	return false;
};

function warnInvalid (theField, s)
{
	if (theField != undefined)
	{
		if (!theField.disabled)
		{
			theField.focus();
			theField.select();
		}
	};
	alert(s);
	return false;
};

function checkChar(c, st)
{
	if (st.indexOf(c) == -1) return false;
	return true;
};

function checkInt(theField, s)
{   
	if (isOnlySpaces(theField.value))
		return warnEmpty(theField, s);
	else
	{
		for (var i = 0; i < theField.value.length; i++)
		{   
			if (!checkChar(theField.value.charAt(i), msk[integers]))
			{
				warnInvalid(theField, iPrefix + s + iSuffix);
				return false;
			};
		};
		return true;
	};
};

function checkString (theField, s)
{   
	if (isOnlySpaces(theField.value))
		return warnEmpty(theField, s);
	else
		return true;
};

function checkEmail (theField, isMandatory, isMultipleAccepted)
{   
	if (isMultipleAccepted == undefined) isMultipleAccepted = false;
	if (isMandatory == undefined) isMandatory = true;
	if (!isMandatory && (theField.value == nullString)) return true;
	if (isEmail(theField.value, isMultipleAccepted)) return true;
	warnInvalid (theField, iEmail);
	return false;
};

function searchCls(obj, srchCls, exactly)
{
	if (exactly == undefined) exactly = false;
	if (obj != null)
	{
		if (obj.className != undefined)
		{
			if (exactly)
			{
				if (obj.className.toUpperCase() == srchCls.toUpperCase()) return obj;
			}
			else
			{
				if (left(obj.className, srchCls.length) == srchCls)	return obj;
			}
		};
		return searchCls(obj.parentNode, srchCls, exactly);
	}
	else return null;
};

function searchParent(el, pTagName)
{
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
		return el;
	else
		return searchParent(el.parentNode, pTagName);
};

function isAlmost(a, b, tolerance)
{
	if (a == b)
		return true
	else
	{
		var tmp = b;
		if (tolerance == undefined) tolerance = 0.0000001;
		if (a == 0)
		{
			if (b == 0)
				return true;
		}
		else
		{
			if (Math.abs(a) > Math.abs(b)) tmp = a;
		};
		return Math.abs((a - b) / tmp) <= tolerance;
	}
};

function rac(r)
{
	return Math.round (r * 100) / 100
};
