var gs_form_serialiser = new Array();

/* Returns: rien */
/* Description: Fonction qui vide les champs non hidden d'un formulaire */
function empty_form(id)
{
    for(var j = 0; j < id.elements.length; j++)
        if(id.elements[j].type != 'hidden')
            id.elements[j].value = '';
}

/* Returns: rien */
/* Description: Fonction qui passe les champs d'un formulaire en readonly */
function lock_form(id,myclass)
{
    for(var j = 0; j < id.elements.length; j++){
        if(id.elements[j].type == 'select-one') id.elements[j].setAttribute("disabled","disabled");
        else id.elements[j].setAttribute("readonly","readonly");
        if(myclass != '')id.elements[j].className = myclass;
    }
}	

/* Returns: true/false */
/* Description: Fonction qui verifie si la page a été modifié */
function check_serialiser(ls_message)
{
	if(!gs_form_serialiser['form']) return true;
	if(gs_form_serialiser['values']==$(gs_form_serialiser['form']).serialize()) return true;
	Element.hide('ajax_message');
	if(confirm(ls_message)) return false;
	else {
		Element.show('ajax_message');
		return true;
	}
}

/* Returns: un message ou rien si tous est ok */
/* Description: Fonction qui controle le formulaire */
/* Description: ajouter l'attribut required à tous les champs obligatoire du formulaire */
/* Description: utilise l'attribut desc pour le message si présent */
function required_control(id,classAlert)
{
    var msg = '';
    var required_msg = '';
    var format_msg = '';
    var required_premier = 0;
    var format_premier = 0;
    //var premier = 0;
    for(var j = 0; j < id.elements.length; j++)
    {
		// on remplace jj/mm/aaaa sur les date par vide		
		if(id.elements[j].getAttribute('format') == 'date' && id.elements[j].value == 'jj/mm/aaaa')id.elements[j].value = '';
		
        // Controle des champs requis
        if(id.elements[j].getAttribute('required')!=null && id.elements[j].value.replace(/^\s+/, '').replace(/\s+$/, '') == "")
        {
            if(required_premier>0) required_msg += ', ';
            if(id.elements[j].getAttribute('desc')!=null)required_msg += '"'+id.elements[j].getAttribute('desc')+'"';
            else required_msg += '"'+id.elements[j].name+'"';
            if(classAlert!='')id.elements[j].className = classAlert;
            required_premier = 1;
        }

        // Controle des formats
        if(id.elements[j].getAttribute('format')!=null && id.elements[j].value.replace(/^\s+/, '').replace(/\s+$/, '') != "")
        {
            switch(id.elements[j].getAttribute('format'))
            {
                case "char":
                  regex=new RegExp("^[_a-z0-9]+$", "gi");
                  break;

                case "integer":
                  regex=new RegExp("^[0-9]+$", "gi");
                  break;

                case "decimal":
                  regex=new RegExp("^[0-9.]+$", "gi");
                  break;

                case "code_postal":
                  regex=new RegExp("^(0[1-9]|[1-9][0-9])[0-9]{3}$", "g");
                  break;

                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 "date":
                  regex=new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$", "g");
                  break;

                // par défaut (non vide)
                default:
                  regex=new RegExp("^.+$", "g");

            }
            if(!regex.exec(id.elements[j].value))
            {
                if(format_premier>0) format_msg += '\n';
                if(id.elements[j].getAttribute('desc')!=null)format_msg += '"'+id.elements[j].getAttribute('desc')+'" doit être au format "'+id.elements[j].getAttribute('format')+'"';
                else format_msg += '"'+id.elements[j].name+'" doit être au format "'+id.elements[j].getAttribute('format')+'"';
                if(classAlert!='')id.elements[j].className = classAlert;
                format_premier = 1;
            }
        }
    }
    // Construction du message
    if(required_msg != "") msg = 'Les champs '+required_msg+' doivent être rempli !';
    if(format_msg != "") msg += '\n'+format_msg;
    if(msg!="")return msg;
    else return "";
}

function date_format(id)
{
    for(var j = 0; j < id.elements.length; j++)
    {
        // Controle des formats
        if(id.elements[j].getAttribute('format')!=null && id.elements[j].value.replace(/^\s+/, '').replace(/\s+$/, '') != "" && id.elements[j].getAttribute('format') == "date")
        {
            //var maDate =    id.elements[j].value);
            //id.elements[j].value = (maDate.getYear()+1900)+"-"+(maDate.getMonth()+1)+"-"+maDate.getDate();
            var maDate = id.elements[j].value;
            id.elements[j].value = maDate.substring(6,10)+"-"+maDate.substring(3,5)+"-"+maDate.substring(0,2);
        }
    }
}

// Fonction qui valide ou affiche une alerte
function valide_form(form_name,classAlert){
    var alerte = required_control(form_name,classAlert);
    if(alerte == ""){date_format(form_name);form_name.submit();}
    else{alert(alerte);}
}

// Selectionne toutes les lignes d'une liste à selection multiple
function SelectionneLignes(idListe) {
	var objListe = document.getElementById(idListe);
	for (i=objListe.length-1;i>=0;i--) objListe.options[i].selected=true;
}

// Selectionne toutes les lignes d'une liste à selection multiple
function DeselectionneLignes(idListe) {
	var objListe = document.getElementById(idListe);
	for (i=objListe.length-1;i>=0;i--) objListe.options[i].selected=false;
}