var sDbleQuote = '"';
var sQuote = "'";

/********************************************************************************/
// DATES
/********************************************************************************/

function GetDayDate(nDay, nMonth, nYear, nHour, nMinute, nSeconde)
{
	if (nYear<100) nYear += 2000; 
	return nYear*10000000000 + nMonth *100000000 + nDay *1000000 + nHour*10000 + nMinute*100 + nSeconde;
}

function GetYearFromNumber(lDate)
{
	return Math.floor ((lDate) / 10000000000);
}

function GetMonthFromNumber(lDate)
{
	return Math.floor ((lDate - (GetYearFromNumber(lDate)) *10000000000) /100000000);
}

function GetDayFromNumber(lDate)
{
	return Math.floor ((lDate - (GetYearFromNumber(lDate))*10000000000 - GetMonthFromNumber(lDate)*100000000) / 1000000);
}

function GetHourFromNumber(lDate)
{
	return Math.floor ((lDate - (GetYearFromNumber(lDate))*10000000000 - GetMonthFromNumber(lDate)*100000000 - GetDayFromNumber(lDate)*1000000) / 10000);
}

function GetMinuteFromNumber(lDate)
{
	return Math.floor (lDate - (GetYearFromNumber(lDate))*10000000000 - GetMonthFromNumber(lDate)*100000000 - GetDayFromNumber(lDate)*1000000 - GetHourFromNumber(lDate)*10000);
}

/********************************************************************************/

function MakeDateField(sField, form)
{

	sDayTmp = "if (form." + sField + "_Day != undefined) nDay = form." + sField + "_Day.value/1; else nDay=0 " ;
	sMonthTmp = "if (form." + sField + "_Month != undefined) nMonth = form." + sField + "_Month.value/1; else nMonth=0 " ;
	sYearTmp = "if (form." + sField + "_Year != undefined) nYear = form." + sField + "_Year.value/1; else nYear=0 " ;

	nHour = 0;
	nMinute = 0;

	sHourTmp = "if (form." + sField + "_Hour != undefined) nHour = form." + sField + "_Hour.value/1; else nHour=0 " ;
	sMinuteTmp = "if (form." + sField + "_Minute != undefined) nMinute = form." + sField + "_Minute.value/1; else nMinute=0  " ;
	sSecondeTmp = "if (form." + sField + "_Seconde != undefined) nSeconde = form." + sField + "_Seconde.value/1; else nSeconde=0  " ;

	eval(sDayTmp);
	eval(sMonthTmp);
	eval(sYearTmp);

	eval(sHourTmp);
	eval(sMinuteTmp);
	eval(sSecondeTmp);

	if ((nYear<100) && (nYear!=0)) nYear += 2000;
	nDate = GetDayDate(nDay, nMonth, nYear, nHour, nMinute, nSeconde);
	sTmp = "form." + sField + ".value = " + nDate;
	eval(sTmp); 
}

/********************************************************************************/

function MakeDateInput(sField, lDate, bHour)
{

	sDay = "<input type='text' name='" + sField + "_Day' size='2' onchange=\"MakeDateField('" + sField + "', this.form);\" value='";
	sDay = sDay + GetDayFromNumber(lDate) + "'>&nbsp;/&nbsp;";
	document.write(sDay);

	sMonth = "<input type='text' name='" + sField + "_Month' size='2' onchange=\"MakeDateField('" + sField + "', this.form);\" value='";
	sMonth = sMonth + GetMonthFromNumber(lDate) + "'>&nbsp;/&nbsp;";
	document.write(sMonth);

	sYear = "<input type='text' name='" + sField + "_Year' size='4' onchange=\"MakeDateField('" + sField + "', this.form);\" value='";
	sYear = sYear + GetYearFromNumber(lDate) + "'>&nbsp;&nbsp;";
	document.write(sYear);


	sType = bHour==1 ? "text" : "hidden";
	if (bHour==1) document.write('&nbsp;');

	sHour = "<input type='" + sType + "' name='" + sField + "_Hour' size='2' onchange=\"MakeDateField('" + sField + "', this.form);\" value='";
	sHour = sHour + GetHourFromNumber(lDate) + "'>:";
	document.write(sHour);

	sMinute = "<input type='" + sType + "' name='" + sField + "_Minute' size='2' onchange=\"MakeDateField('" + sField + "', this.form);\" value='";
	sMinute = sMinute + GetMinuteFromNumber(lDate) + "'>";
	document.write(sMinute);

}

/********************************************************************************/

function GetDateFromSpk(nDate)
{
	var dtRet = new Date();

	dtRet.setDate(GetDayFromNumber(nDate));
	dtRet.setMonth(GetMonthFromNumber(nDate)-1); 
	dtRet.setYear(GetYearFromNumber(nDate));
	dtRet.setHours(GetHourFromNumber(nDate)); 
	dtRet.setMinutes(GetMinuteFromNumber(nDate));

	return dtRet;
}

/********************************************************************************/

function GetSpkDate(dt)
{
	return GetDayDate(dt.getDate(), dt.getMonth()+1, dt.getYear(), dt.getHours(), dt.getMinutes());
}

/********************************************************************************/

function AddSpkJour(nDateSrc, nNbJour)
{
	dtSrc = GetDateFromSpk(nDateSrc);
	nTimeRet = dtSrc.getTime() + 86400.0 * 1000.0 * nNbJour;
	var dtRet = new Date();
	dtRet.setTime(nTimeRet);
	return GetSpkDate(dtRet);
}

/********************************************************************************/

var dtCurDate = new Date();
// lCurDate = GetDayDate(CurDate.getDate(), CurDate.getMonth()+1, CurDate.getYear(), CurDate.getHours(), CurDate.getMinutes());
nCurDate = GetSpkDate(dtCurDate);




/********************************************************************************/
// Divers : à nettoyer
/********************************************************************************/

var nTmpCount = 0;

function AdmSendCommercialDoc()
{
	form = document.forms[1];

	sUrl = 'http://' + sVhServer + '/cgi-bin/zx.exe?'
		+ 'sTemplate=AdmSendCommercialDoc' 
		+ '&sAction=NO_VALUE'
		+ '&sActionView=ExitView'
		+ '&nDebug=1'

		+ '&InfoTpe_sCompany=' + escape(form.InfoTpe_sCompany.value)

		+ '&User_sEmail=' + escape(form.User_sEmail.value)
		+ '&User_sLastName=' + escape(form.User_sLastName.value)
		+ '&User_sFirstName=' + escape(form.User_sFirstName.value)

	window.open(sUrl,'AdmSendCommercialDoc_' + nTmpCount,
	'width=250,height=320,top=20,left=20,menubar=0,toolbar=0,location=0,directories=0,status=0,scrollbars=auto,resizable=1,copyhistory=0');
	nTmpCount ++;
}

/********************************************************************************/

function MakeFromWhere(sField, form, sStart)
{
	sTmp = "form.sFromWhere.value = sStart + form.sFromWhere_" + sField + ".value;";
	eval(sTmp);
}


/********************************************************************************/
// Cookies
/********************************************************************************/

function GetCookie (name, InCookie) {
  var prop = name + "=";  // propriete recherchee
  var plen = prop.length;
  var clen = InCookie.length;
  var i = 0;

  if(clen>0) {  // Cookie non vide
     i= InCookie.indexOf(prop,0); // occurrence de la propriete
     if( i!=-1) {      // OK, propriete trouvee
         // recherche de la valeur correspondante
         j= InCookie.indexOf(";",i+plen);
         if(j!=-1) {  // OK, valeur trouvee
             return unescape(InCookie.substring(i+plen,j));
         } else {     // OK, derniere valeur donc pas de point virgule
             return unescape(InCookie.substring(i+plen,clen));
         }
      } else {
             return "";
      }
   } else {
      return "";
   }
}

/********************************************************************************/

function SetCookie (name, value) {
  // nombre de parametres variable
  var argv = SetCookie.arguments;
  var argc = SetCookie.arguments.length;
  // association des parametres aux differentes champs d'une Cookie
  var expires = (argc > 2) ? argv[2] : null;
  var path = (argc > 3) ? argv[3] : null;
  var domain = (argc > 4) ? argv[4] : null;
  var secure = (argc > 5) ? argv[5] : false;
  // affectation de la propriete apres codage URL
  document.cookie = name + "=" + escape (value) +
    ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
    ((path == null) ? "" : ("; path=" + path)) +
    ((domain == null) ? "" : ("; domain=" + domain)) +
    ((secure == true) ? "; secure" : "");
}

/********************************************************************************/

function GetValueQuestion(form, sQuestion, sSuffixe)
{
	eval ('IdAnswerTab = ' + sQuestion + '_sIdAnswer;');
	var sRes = '';
	for(var i=0; i < IdAnswerTab.length; i++)
	{
		sToEval = 'val = form.'+ sQuestion + '_' + IdAnswerTab[i] + '_' + sSuffixe + '.checked;';
		eval(sToEval);
		if (val == true) sRes = sRes + IdAnswerTab[i] + '/';		
	}
	return sRes;
}


/********************************************************************************/
// VerifyEmail() verifies that the email address 	has the correct format
/********************************************************************************/

function VerifyEmail(email) {

  var at_pos;
  var pd_pos;
  var sp_pos;
  var em_len;

  // Make sure there is a value
  em_len = email.length;
  if (em_len < 1) {
    return -1;
  }

  // Check for spaces
  sp_pos = email.indexOf(" ", 0);
  if (sp_pos != -1) {
    return -2;
  }

  // Check for an @ symbol
  at_pos = email.indexOf("@", 0);
  if (at_pos == -1) {
    return -3;
  }

  // Check for a period after the @ symbol
  pd_pos = email.indexOf(".", at_pos);
  if (pd_pos == -1) {
    return -4;
  }
	
  // Check for period as last character
  if (pd_pos == (em_len - 1)) {
    return -5;
  }

  // Make sure there is at least one character 	between @ and .
  if (pd_pos == (at_pos + 1)) {
    return -6;
  }

  // Make sure address doesn't start with @ 	symbol
  if (at_pos == 0) {
    return -7;
  }

  return 0;
}

function ValidateFormEmail(form, input, nLevel) 
{
  var checkEmail;
  checkEmail = VerifyEmail(input.value);
  if (checkEmail < nLevel) 
  {
    if (checkEmail == -1) {
      alert("Le champs email ne doit pas etre vide");
    }
    if (checkEmail == -2) {
      alert("L'adresse email n'est pas conforme !\n\nLes espaces ne sont pas autorisés dans le champs email.");
    }
    if (checkEmail == -3) {
      alert("L'adresse email n'est pas conforme !\n\nIl doit y avoir le symbole @ dans l'adresse email.");
    }
    if (checkEmail == -4) {
      alert("L'adresse email n'est pas conforme !\n\Il doit y avoir un point dans la partie aprés le symbole @");
    }
    if (checkEmail == -5) {
      alert("L'adresse email n'est pas conforme !\n\nL'adresse email ne peut pas se terminer par un point.");
    }
    if (checkEmail == -6) {
      alert("L'adresse email n'est pas conforme !");
    }
    if (checkEmail == -7) {
      alert("L'adresse email n'est pas conforme !\n\nL'adresse email ne peut pas commencer par le symbole @");
    }
    input.focus();
	return false;
  }
  else
  {
	return true;
  }
}


function OuvreFenetre(sUrl, sName, sParameter) {
	 mafenetre = window.open(sUrl, sName, sParameter);
	 mafenetre.focus();
}

function PlaySound(soundobj) {
  var thissound=document.getElementById(soundobj);
  thissound.Play();
}
function StopSound(soundobj) {
  var thissound=document.getElementById(soundobj);
  thissound.Stop();
}
var tSound = new Array()
function FlipSound(soundobj) {
	if (tSound[soundobj] == null) tSound[soundobj]=0;
	if (tSound[soundobj]==0)
	{
	 	tSound[soundobj]=1;
	 	PlaySound(soundobj);
	}
	else
	{
	 	tSound[soundobj]=0;
	 	StopSound(soundobj);
	}
}

function strlen (string) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Sakimori
    // +      input by: Kirk Strobeck
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +    revised by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: May look like overkill, but in order to be truly faithful to handling all Unicode
    // %        note 1: characters and to this function in PHP which does not count the number of bytes
    // %        note 1: but counts the number of characters, something like this is really necessary.
    // *     example 1: strlen('Kevin van Zonneveld');
    // *     returns 1: 19
    // *     example 2: strlen('A\ud87e\udc04Z');
    // *     returns 2: 3

    var str = string+'';
    var i = 0, chr = '', lgth = 0;

    if (!this.php_js || !this.php_js.ini || !this.php_js.ini['unicode.semantics'] ||
            this.php_js.ini['unicode.semantics'].local_value.toLowerCase() !== 'on') {
        return string.length;
    }

    var getWholeChar = function (str, i) {
        var code = str.charCodeAt(i);
        var next = '', prev = '';
        if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters)
            if (str.length <= (i+1))  {
                throw 'High surrogate without following low surrogate';
            }
            next = str.charCodeAt(i+1);
            if (0xDC00 > next || next > 0xDFFF) {
                throw 'High surrogate without following low surrogate';
            }
            return str.charAt(i)+str.charAt(i+1);
        } else if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate
            if (i === 0) {
                throw 'Low surrogate without preceding high surrogate';
            }
            prev = str.charCodeAt(i-1);
            if (0xD800 > prev || prev > 0xDBFF) { //(could change last hex to 0xDB7F to treat high private surrogates as single characters)
                throw 'Low surrogate without preceding high surrogate';
            }
            return false; // We can pass over low surrogates now as the second component in a pair which we have already processed
        }
        return str.charAt(i);
    };

    for (i=0, lgth=0; i < str.length; i++) {
        if ((chr = getWholeChar(str, i)) === false) {
            continue;
        } // Adapt this line at the top of any loop, passing in the whole string and the current iteration and returning a variable to represent the individual character; purpose is to treat the first part of a surrogate pair as the whole character and then ignore the second part
        lgth++;
    }
    return lgth;
}

