//////////////////////////////////////////////////////////
//
// Copyright ©2007 Franck Priola
//
// -------------------------------------------------------
// Projet   : starsquiz.com
// Source   : /js/functions.js
// Création : 25/02/2007
// Auteurs  : Franck Priola
// -------------------------------------------------------
//
// FONCTIONS "MAISON"
//
//////////////////////////////////////////////////////////



var state = 'none';

function showhide( layer_ref )
{
  if( state == 'block' ) {
    state = 'none';
  } else {
    state = 'block';
  }

  if( document.all ) { //IS IE 4 or 5 (or 6 beta)
    eval( "document.all." + layer_ref + ".style.display = state");
  }
  if( document.layers ) { //IS NETSCAPE 4 or below
    document.layers[layer_ref].display = state;
  }

  if( document.getElementById && !document.all ) {
    hza = document.getElementById( layer_ref );
    hza.style.display = state;
  }
}

function switchLayer( layer_ref )
{
  var etat = eval( "etat_"+layer_ref );
  
  if( etat == 'block' ) {
    etat = 'none';
  } else {
    etat = 'block';
  }
  eval( "etat_"+layer_ref+" = '"+etat+"'" );

  if( document.all ) { //IS IE 4 or 5 (or 6 beta)
    eval( "document.all." + layer_ref + ".style.display = etat");
  }
  if( document.layers ) { //IS NETSCAPE 4 or below
    document.layers[layer_ref].display = etat;
  }

  if( document.getElementById && !document.all ) {
    hza = document.getElementById( layer_ref );
    hza.style.display = etat;
  }
}

function ajouterAuxFavoris()
{
  browserName = navigator.appName;
  browserVer  = parseInt(navigator.appVersion);
  if( browserName == "Microsoft Internet Explorer" & browserVer >= 4 ) {
    window.external.AddFavorite( 'http://www.generation-implant.com/', 'Office de Tourisme \'Les Coteaux d\'Azur\'' );
  }
}

function getElement( elem )
{
  if( document.getElementById ) {
    if( document.getElementById(elem) ) return document.getElementById(elem);
  } else if( document.all ) {
    if( document.all[elem] ) return document.all[elem];
  }
  return null;
}

function getValueElement( elem )
{
  if( document.getElementById ) {
    if( document.getElementById(elem) ) return document.getElementById(elem).value;
  } else if( document.all ) {
    if( document.all[elem] ) return document.all[elem].value;
  }
  return null;
}

function setValueElement( elem, val )
{
  if( document.getElementById ) {
    document.getElementById(elem).value = val;
  } else if( document.all ) {
    document.all[elem].value = val;
  }
}

function setFocus( elem )
{
  if( document.getElementById ) {
    document.getElementById(elem).focus();
  } else if( document.all ) {
    document.all[elem].focus();
  }
}

function disableElement( elem )
{
  if( document.getElementById ) {
    if( document.getElementById(elem) != null ) document.getElementById(elem).disabled = true;
  } else if( document.all ) {
    if( document.all[elem] != null ) document.all[elem].disabled = true;
  }
}

function changeStyle( elem, style ) {
	if (document.all) {
		// pour ie
		document.getElementById(elem).style.setAttribute('cssText', style);
	} else {
		document.getElementById(elem).setAttribute('style', style);
	}
}

function checkAll( check, label, nb )
{
	var oDiv = null;
	
	for ( var i=0; i < nb; i++ )
	{
    if( document.getElementById ) {
  		oDiv = document.getElementById(label+i);
    } else if( document.all ) {
      oDiv = document.all[label+i];
    }
		if ( check == 0 )
			oDiv.checked = false;
		else
			oDiv.checked = true;
	}
}

function showhideAllSelectsForIE6AndLower( action )
{
  if( action != 'visible' ) action = 'hidden';

  if( navigator.appName.indexOf("Microsoft") > -1 && navigator.appVersion.indexOf("MSIE 7") == -1 )
  {
    for( var S = 0; S < document.forms.length; S++ )
    {
      for( var R = 0; R < document.forms[S].length; R++ ) {
        if( document.forms[S].elements[R].options ) {
          document.forms[S].elements[R].style.visibility = action;
        }
      }
    } 
  }
}


function popup( page, idpage, largeur, hauteur, options ) {
  var top  = 20; var left = 20;
  window.open( page, idpage, "top="+top+", left="+left+", width="+largeur+", height="+hauteur+", "+options );
}

//                                                                      ----
/////////////////////////////////////////////////////////////////////// FORM
//                                                                      ----

/*
 * form validation
 *
 *   "comparaison" = le champ doit avoir le même contenu qu'un autre (ex: document.getElementById("password").value)
 *   "longueur"    = le champ doit avoir une certaine longueur (dernier paramètre sous la forme "min,max" [0 = ausun])
 *   "regex"       = le champ (uniquement s'il est rempli) doit vérifier une expression régulière
 *                     -> dernier paramètre : "mail", "alpha_num", "code_postal", "date"
 *   "requis"      = le champ doit juste être rempli
	*/
function Formulaire( formName, langue )
{
   this.form = document.getElementById(formName);
   this.lg = langue;
   this.erreurs=new Array();

   this.regles=new Array();
   this.messages=new Array();
   this.validations=new Array();
   this.params=new Array();

   this.regle=regleChamp;
   this.nettoyer=nettoyerChaine;
   this.valider=validerForm;
   this.liste=listeErreurs;
}
function regleChamp( champ, type, message, param )
{
	this.regles.push(champ);
	this.validations.push(type);
	this.messages.push(message);
	this.params.push(param);
}
function listeErreurs()
{
	var x, liste="";
   
	for(x=0; x<this.erreurs.length; x++)
   	liste+= this.erreurs[x] + "\n";
   
	return liste;
}
function nettoyerChaine(chaine)
{
	regex = new RegExp("(^ +)|( +$)", "g");
	chaine = chaine.replace(regex, "");
	return chaine;
}
function validerForm()
{
   var x, regex, msg="";
   var frm = this.form;
   
   if(!this.regles.length) return true;
   
   for( x=0; x < this.regles.length; x++ )
   {
      eval( "frm."+this.regles[x]+".value=this.nettoyer(frm."+this.regles[x]+".value);" );
      
      switch(this.validations[x])
      {
         case "comparaison": // denrière valeur - exemple : document.getElementById("password").value
            eval( "if(frm."+this.regles[x]+".value!='"+this.params[x]+"') this.erreurs.push(this.messages[x]);" );
            break;
         case "longueur":
            eval( "var longueur=frm."+this.regles[x]+".value.length;" );
            if(longueur)
            {
               var temp = this.params[x].split(",");
               mini = _pi(temp[0]);
               maxi = _pi(temp[1]);
               
               if((mini && longueur<mini) || (maxi && longueur>maxi)) this.erreurs.push(this.messages[x]);
            }
          	break;
         case "regex":
            switch(this.params[x])
            {
               case "mail":
                  regex = new RegExp("^[a-z0-9_]([.-]?[a-z0-9_]+)+@[a-z0-9_]([.-]?[a-z0-9_]+)+\.([a-z]{2,4}|[a-z]{6})$", "gi");
                  break;
               case "alpha_num":
                  regex = new RegExp("^[_a-z0-9]+$", "gi");
                  break;
               case "code_postal":
                  regex = new RegExp("^(0[1-9]|[1-9][0-9])[0-9]{3}$", "g");
                  break;
               case "date":
                  regex = new RegExp("[0-3][0-9][/][0|1][0-9][/][19|20]{1}[0-9]{2}", "g");
                  break;
               default:
                  regex = new RegExp("^.+$", "g");
            }
            
            eval('if(frm.'+this.regles[x]+'.value!="" && !regex.exec(frm.'+this.regles[x]+'.value)) this.erreurs.push(this.messages[x]);');
            break;
         case "requis":
         default:
           eval('if(frm.'+this.regles[x]+'.value=="") this.erreurs.push(this.messages[x]);');
      }
   }
   
   if( this.erreurs.length ) {
     alert( "ERREUR :\n\n"+this.liste() );
     return false;
   }
   
   return true;
}

