/*
ajax
*/
Function.prototype.callBack=function(){
    var __method = this, args = Array.prototype.slice.call(arguments,0);
    return function() {
        return __method.apply(this, args);
    }
}
function getprices(month, year) {
    //global : hotel
    $("#price_table").hide();
    
    $.ajax({
        url:'prix.php',
        data: 'id_hotel='+hotel+'&month='+month+'&year='+year,
        type:'GET',
        success: function(response){
            $("#price_table").slideDown();
            $("#price_table").html(response);
        }
    });
}
function ajaxsel(asel) {
    affect="";
    affect2 = "";
    switch(asel.name) {
        case "id_pays":
            affect= "ville";
            break;
        case "id_ville":
            affect = "vol_par_ville";
            affect2 = "hotel_par_ville";
            break;
        case "id_hotel":
            affect = "promo_par_hotel";
            break;
        case "id_promo":
            affect= "vol";
            break;
    }
    if(affect!="" && $("#"+affect)!=null && asel.value!="") {
        $("#"+affect).html('<option value="">chargement...</option>');
        $.ajax({
            url:'ajax.php?action='+affect,
            data: 'id='+asel.value,
            type:'POST',
            success: function(response){
                if(response!="") {
                    eval(response);
                    inner='<option value="">choisir</option>';
                    for(az in json) {
                        if(json[az].nom_fr!=undefined)
                            inner+='<option value="'+json[az].id+'">'+json[az].nom_fr+'</option>';
                        else if(json[az].title_fr!=undefined)
                            inner+='<option value="'+json[az].id+'">'+json[az].title_fr+'</option>';
                    }
                    $("#"+affect).html(inner);
                    if(affect2!="") {
                        inner='<option value="">choisir</option>';
                        for(az in json2) {
                            if(json2[az].nom_fr!=undefined)
                                inner+='<option value="'+json2[az].id+'">'+json2[az].nom_fr+'</option>';
                            else if(json2[az].title_fr!=undefined)
                                inner+='<option value="'+json2[az].id+'">'+json2[az].title_fr+'</option>';
                        }
                        $("#"+affect2).html(inner);
                    }
                    
                }
            }
        });
    }
}
AIM = { 
    frame : function(c) {
        var n = 'f' + Math.floor(Math.random() * 99999);
        var d = document.createElement('DIV');
        d.innerHTML = '<iframe style="display:none" src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\')"></iframe>';
        document.body.appendChild(d);
        var i = document.getElementById(n);
        if (c && typeof(c.onComplete) == 'function') {
            i.onComplete = c.onComplete;
        }
        return n;
    },
    form : function(f, name) {
        f.setAttribute('target', name);
    },
    submit : function(f, c) {
        AIM.form(f, AIM.frame(c));
        if (c && typeof(c.onStart) == 'function') {
            return c.onStart();
        } else {
            return true;
        }
    },
    loaded : function(id) {
        var i = document.getElementById(id);
        if (i.contentDocument) {
            var d = i.contentDocument;
        } else if (i.contentWindow) {
            var d = i.contentWindow.document;
        } else {
            var d = window.frames[id].document;
        }
        if (d.location.href == "about:blank") {
            return;
        }
        if (typeof(i.onComplete) == 'function') {
            i.onComplete(d.body.innerHTML);
        }
    }
}
function startCallback() {
    return true;
} 
function completeCallback(response) {
    eval(response);
}
/******************************************************************************************************************************
*******************************************************************************************************************************
Lier ce fichier au document html avec formulaire pour automatiser la validation de chaque champ à l'aide de ces attributs.

Ici l'attribut alt d'un champ contient le masque regex qu'il doit satisfaire
Tandis que l'attribut title contient le message à afficher s'il y a pas correspondance

Voici quelques masques regex courant pour valider un champ

Regex												|	Description
-------------------------------------------------------------------------------------------------------------------------------
^.+$												|	champ obligatoire
^[\w\s]+$											|	alphanumerique avec espace
^\d+$												|	champ numérique

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

/************************************************  Methode indexOf de Array  **************************************************/
if(!Array.indexOf) {
    Array.prototype.indexOf=function(o,i){
        for(var j=this.length,i=i<0?i+j<0?0:i+j:i||0;i<j&&this[i]!==o;i++);
        return j<=i?-1:i
    }
}

/**************************  objet aXforms: conteneur de tout formulaire à caractère validable ***********************/
var aXforms = {
    errorClass:"error", 							//la classe css par défaut qui va mettre en valeur les champs erronés
    regexContainer:"alt",							//le conteneur par défaut du masque regex
    messageContainer:"title",						//le conteneur par défaut du message d'erreur
    scan:function() {								//la fonction qui enregistrera tous les formulaires du document
        this.forms=new Array();
        aXfrm=document.getElementsByTagName("form");
        for(k=0; k<aXfrm.length; k++) {
            this.forms.push(new aXform(aXfrm[k]));
        }
    },
    addRequired:function(formElement) {				//la fonction tierce pour ajouter d'autres restrictions de validation
        return;
    },
    getForm:function(HTMLform) {					//methode pour retourner le formulaire aXform dérivant le formulaire HTMLform
        for(a=0; a<this.forms.length; a++) {
            if(this.forms[a].HTMLform==HTMLform) {
                return this.forms[a];
                break;
            }
        }
    },
    getErrorClass:function(oldclass) {				//retourne la classe css hybridé avec la classe css de l'erreur
        newclass=oldclass;
        if(eval('!/^\s?'+this.errorClass+'$/.test(oldclass)'))
            newclass=oldclass+(oldclass!=""?" ":"")+this.errorClass;
        return newclass;
    },
    clearErrorClass:function(oldclass) {			//retourne la classe css sans erreur
        newclass=oldclass.replace(this.errorClass,"");
        return newclass;
    }
};

/********************************************  Objet aXform: formulaire validable  *******************************************/
function aXform(HTMLform) {
    this.HTMLform=HTMLform;
    concerned=false;
    this.required=new Array();						//tableau de tous les champs du formulaire ayant des masques de validation
    this.err=new Array();							//tableau de tous les messages à afficher
    this.invalid=new Array();						//tableau de tous les id des champs invalide
    for(i=0; i<this.HTMLform.elements.length; i++) {
        if(this.HTMLform.elements[i].getAttribute(aXforms.regexContainer)!=null && this.HTMLform.elements[i].getAttribute(aXforms.messageContainer)!=null && this.HTMLform.elements[i].getAttribute(aXforms.regexContainer)!="" && this.HTMLform.elements[i].getAttribute(aXforms.messageContainer)!="") {
            hfe=new aXformElement(this.HTMLform.elements[i]);		//Création de tous les éléments
            this.required.push(hfe.id);
            concerned=true;
        }
    }
    if(concerned) {
        this.HTMLform.onsubmit=function() {				//association de l'évènment submit
            return submitreturn(this);
        }
    }
}
aXform.prototype.validate=function(HTMLformElementId) {
    if(this.invalid.indexOf(HTMLformElementId)>=0)
        return false;
    else
        return true;
}
aXform.prototype.valid=function() {
    if(this.err.length>0){
        var message = '';
        for(i=0;i<this.err.length;i++) {
            message += this.err[i] + "\r\n";
        }
        alert(message);
        this.err=new Array();
        return false;
    }else{
        return true;
    }
}
/*****************************************  Objet aXformElement element du formulaire validable   **********************/
function aXformElement(HTMLformElement) {
    this.el=HTMLformElement;
    this.mask=this.el.getAttribute(aXforms.regexContainer);
    this.alertText=this.el.getAttribute(aXforms.messageContainer);
    if(this.el.getAttribute("id")!="" && this.el.getAttribute("id")!=null)
        this.id=this.el.getAttribute("id");
    else {
        //id alleatoire
        this.id="afe"+Math.round(10000*Math.random());
        this.el.setAttribute("id", this.id);
    }
}
/***************************************************  Fonction de validation  **************************************************/
function submitreturn(HTMLform) {
    dis=aXforms.getForm(HTMLform);
    dis.invalid=new Array();
    for(m=0; m<dis.required.length; m++) {
        document.getElementById(dis.required[m]).className=aXforms.clearErrorClass(document.getElementById(dis.required[m]).className);
        if(document.getElementById(dis.required[m]).getAttribute(aXforms.regexContainer)!=null && document.getElementById(dis.required[m]).getAttribute(aXforms.regexContainer)!="" && eval('!/'+ document.getElementById(dis.required[m]).getAttribute(aXforms.regexContainer) +'/.test(document.getElementById("'+ dis.required[m] +'").value)')) {
            dis.invalid.push(dis.required[m]);
            dis.err.push(document.getElementById(dis.required[m]).getAttribute(aXforms.messageContainer));
            document.getElementById(dis.required[m]).className=aXforms.getErrorClass(document.getElementById(dis.required[m]).className);
        }
    }
    aXforms.addRequired(dis);
    //process with the error messages
    return dis.valid();
}



if(window.addEventListener)
    window.addEventListener("load", X6formLoad, true);
else if (window.attachEvent) window.attachEvent("onload", X6formLoad);

function X6formLoad() {
    aXforms.scan();
    //optional for rencontre-pro paca
    aXforms.addRequired = function(aform) {
            
    }
}
