// JavaScript Document

// Précharge les images "cachées" de boutons "Rollover" ou assimilée
function Preloader() {
  var Doc = document; 
  if (Doc.images) {
    if (!Doc.TabImg) Doc.TabImg = new Array();
    var Cpt, j = Doc.TabImg.length, Arg = Preloader.arguments;
	for (Cpt = 0; Cpt < Arg.length; Cpt++)
      if (Arg[Cpt].indexOf("#") != 0) {
	    Doc.TabImg[j] = new Image;
	    Doc.TabImg[j++].src = Arg[Cpt];
	  }
  }
}
// Sélectionne un objet du DOM indepemdamment du navigateur
function FindObject(n, Doc) {
  var p, Cpt, x;
  if (!Doc) Doc=document;
  if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
    Doc = parent.frames[n.substring(p + 1)].document;
	n = n.substring(0, p);
  }
  if (!(x = Doc[n]) && Doc.all) x = Doc.all[n];
  for (Cpt = 0; !x && Cpt < Doc.forms.length; Cpt++)
    x = Doc.forms[Cpt][n];
  for (Cpt = 0; !x && Doc.layers && Cpt < Doc.layers.length; Cpt++)
    x = FindObject(n, Doc.layers[Cpt].document);
  if (!x && Doc.getElementById) x = Doc.getElementById(n);
  return x;
}
// Affiche la date du jour
function AfficherDate() {
  NavVersion = navigator.appVersion.substring(0,1);
  Today = new Date;
  if (NavVersion > 3) Annee = Today.getFullYear(); else Annee = Today.getYear();
  JourNum = Today.getDay();
  DateNum = Today.getDate();
  if (DateNum < 10) DateNum = "0" + DateNum;
  MoisNum = Today.getMonth();
  Jour = new Array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");
  Mois = new Array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Décembre");
  DateFormat = Jour[JourNum] + " " + DateNum + " " + Mois[MoisNum] + " " + Annee;
  return DateFormat;
}
// Affiche ou cache un calque
function ShowHideLayer() {
  var Cpt, Arguments, VisProp;
  Arguments = ShowHideLayer.arguments;
  for (Cpt = 0; Cpt < (Arguments.length); Cpt += 2) {
	CurObject = FindObject(Arguments[Cpt]);
    if (CurObject != null) {
	  VisProp = Arguments[Cpt+1];
	  if (CurObject.style) CurObject = CurObject.style;
	  CurObject.visibility = VisProp;
	}
  }	
}
// Affiche les details d'une référence web
function showWebDetail(numPage, curSite) {
	for (Cpt = 1; Cpt < 4; Cpt++) {
		document.getElementById('Site' + numPage + 'P' + Cpt).style.visibility = "hidden";
		document.getElementById('Site' + numPage + 'T' + Cpt).style.visibility = "hidden";
	}
	document.getElementById('Site' + numPage + 'P' + curSite).style.visibility = "visible";
	document.getElementById('Site' + numPage + 'T' + curSite).style.visibility = "visible";
}
// Initialise le portfolio pour homogeneiser le comportement des navigateurs
function InitPF() {
	document.getElementById('Web1').style.display='block';
	document.getElementById('Web2').style.display='none';
	document.getElementById('Web3').style.display='none';
  InitPFWeb("1");
}
function PrecPFWeb(CurPage) {
	PrecPage=CurPage-1;
	document.getElementById('Web'+PrecPage).style.display='block';
	document.getElementById('Web'+CurPage).style.display='none';
  InitPFWeb(PrecPage);	
}
function SuivPFWeb(CurPage) {
	SuivPage=CurPage+1;
	document.getElementById('Web'+CurPage).style.display='none';
	document.getElementById('Web'+SuivPage).style.display='block';
  InitPFWeb(SuivPage);	
}
// Initialise l'affichage de la premiere page de sites web du portfolio
function InitPFWeb(PPage) {
  ShowHideLayer('Site'+PPage+'P1','visible','Site'+PPage+'P2','hidden','Site'+PPage+'P3','hidden','Site'+PPage+'T1','visible','Site'+PPage+'T2','hidden','Site'+PPage+'T3','hidden');
}
// Initialise la page Solution pour homogeneiser le comportement des navigateurs
function InitSO() {
  ShowHideLayer('Pack','visible','Forfait','hidden','Annexe','hidden');
}
// Initialise l'affichage de la page Pack des solutions
function InitSOPack() {
  ShowHideLayer('Pack','visible','Forfait','hidden','Annexe','hidden');
}
// Initialise l'affichage de la page Forfait des solutions
function InitSOForfait() {
  ShowHideLayer('Pack','hidden','Forfait','visible','Annexe','hidden');
}
// Initialise l'affichage de la page Annexe des solutions
function InitSOAnnexe() {
  ShowHideLayer('Pack','hidden','Forfait','hidden','Annexe','visible');
}
// Initialise la page Services pour homogeneiser le comportement des navigateurs
function InitSE() {
  ShowHideLayer('Quoi','visible','Comment','hidden','Nous','hidden');
}
// Initialise l'affichage de la page Quoi des services
function InitSEQuoi() {
  ShowHideLayer('Quoi','visible','Comment','hidden','Nous','hidden');
}
// Initialise l'affichage de la page Comment des services
function InitSEComment() {
  ShowHideLayer('Quoi','hidden','Comment','visible','Nous','hidden');
}
// Initialise l'affichage de la page Nous des services
function InitSENous() {
  ShowHideLayer('Quoi','hidden','Comment','hidden','Nous','visible');
}
// Change la couleur de fond de l'objet de formulaire sur l'evenement "onfocus"
function FldFocusON(ArgFld) {
  CurObject = FindObject(ArgFld);
  CurObject.style.backgroundColor='#C6D597';	
}
// Change la couleur de fond de l'objet de formulaire sur l'evenement "onfocus"
function FldFocusOFF(ArgFld) {
  CurObject = FindObject(ArgFld);
  CurObject.style.backgroundColor='#CCCCCC';	
}
// Détermine le type de navigateur en fonction de ses spécificités (à vérifier à chaque sortie de nouvelle version)
var BrowserDetect = {
  init: function () {
    this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
	this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version";
	this.OS = this.searchString(this.dataOS) || "an unknown OS";
  },
  searchString: function (data) {
    for (var i = 0; i < data.length; i++) {
	  var dataString = data[i].string;
	  var dataProp = data[i].prop;
	  this.versionSearchString = data[i].versionSearch || data[i].identity;
	  if (dataString) {
	    if (dataString.indexOf(data[i].subString) != -1) return data[i].identity;
	  } else if (dataProp) return data[i].identity;
	}
  },
  searchVersion: function (dataString) {
    var index = dataString.indexOf(this.versionSearchString);
    if (index == -1) return;
	return parseFloat(dataString.substring(index + this.versionSearchString.length+1));
  },
  dataBrowser: [
    {string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb"},
	{string: navigator.vendor, subString: "Apple", identity: "Safari"},
	{prop: window.opera, identity: "Opera"},
	{string: navigator.vendor, subString: "iCab", identity: "iCab"},
	{string: navigator.vendor, subString: "KDE", identity: "Konqueror"},
	{string: navigator.userAgent, subString: "Firefox",	identity: "Firefox"},
	{string: navigator.vendor, subString: "Camino", identity: "Camino"},
	{string: navigator.userAgent, subString: "Netscape", identity: "Netscape"},
	{string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE"},
	{string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv"},
	{string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla"}
  ],
  dataOS : [
    {string: navigator.platform, subString: "Win", identity: "Windows"},
	{string: navigator.platform, subString: "Mac", identity: "Mac"},
	{string: navigator.platform, subString: "Linux", identity: "Linux"}
  ]
};

// Expressions régulières de vérification des champs du formulaire
var RegExpEmpty=/^$/g;
var RegExpPhone=/^(\(\+[1-9][0-9]?[0-9]?\))?[ ]?[0-9() .-]*$/g;
var RegExpEmailAddress=/^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/g; 

// Les deux fonction suivantes servent à identifier si une chaine de caractère est 
// compatible ou non avec une expression régulière passée en paramètre
function MatchRE(ArgData, ArgRE) {
  var Result = ArgData.match(ArgRE);
  if (Result != null && Result.length == 1) {
    return true;
  } else {
    return false;
  }
}
function NMatchRE(ArgData, ArgRE) {
  if (MatchRE(ArgData, ArgRE)) {
	return false;
  } else {
	return true;
  }
}
// Vérification spécifique de chaque type de champ
function IsEmpty(ArgVal){
  return MatchRE(ArgVal, RegExpEmpty);
}
function IsNotEmail(ArgVal) {
  return NMatchRE(ArgVal, RegExpEmailAddress);
}
function IsNotPhone(ArgVal) {
  return NMatchRE(ArgVal, RegExpPhone);
}
// Vérifie les champs du formulaire
function checkFormFields(ArgFrm) {
  var TmpOK=1;
  if (IsEmpty(ArgFrm.elements['FldName'].value)) {
    TmpOK=0;
	  ArgFrm.elements['FldName'].style.backgroundColor='#FFCCCC';
  }
  if (IsEmpty(ArgFrm.elements['FldEmail'].value) || IsNotEmail(ArgFrm.elements['FldEmail'].value)) {
    TmpOK=0;
	  ArgFrm.elements['FldEmail'].style.backgroundColor='#FFCCCC';
  }
  if (IsNotPhone(ArgFrm.elements['FldPhone'].value)) {
    TmpOK=0;
	  ArgFrm.elements['FldPhone'].style.backgroundColor='#FFCCCC';
  }
  if (IsNotPhone(ArgFrm.elements['FldFax'].value)) {
    TmpOK=0;
	  ArgFrm.elements['FldFax'].style.backgroundColor='#FFCCCC';
  }
  if (IsEmpty(ArgFrm.elements['FldSubject'].value)) {
    TmpOK=0;
	  ArgFrm.elements['FldSubject'].style.backgroundColor='#FFCCCC';
  }
  if (IsEmpty(ArgFrm.elements['FldComment'].value)) {
    TmpOK=0;
	  ArgFrm.elements['FldComment'].style.backgroundColor='#FFCCCC';
  }
  if (TmpOK == 1) {
	  return true;
  } else {
	  alert("Veuillez, s'il vous plait, renseigner tous les champs obligatoires et saisir des informations valides.");
	  return false;  
  }
}

