/** 
 * Javascript de toutes les fonctionalités des formulaires
 */
/*************************************/
// definition des parametres
/*************************************/
var over0 = false;
var sommecheck = 0;
var valideOffre = false;
var maxLimit = 150;

//mise en place des variables javascript pour les tests de formulaire
var formElementArray = new Array();

//mise en place des masks du formulaire
var formValidationMasks = new Array();
formValidationMasks['email'] = /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi; // Email
formValidationMasks['numeric'] = /^[0-9]+$/gi; // Numeric @toto Gérer la décimale
formValidationMasks['zip'] = /^[0-9]{5}\-[0-9]{4}$/gi; // Numeric
formValidationMasks['float'] = /^[0,1,2,3]+$/gi;
formValidationMasks['alpha'] = /^[a-zA-Z]+$/gi; //alphabetic @todo Gérer les espaces, accents, et tirets
/************************************/
//definition des functions
/************************************/

NavName = navigator.appName;
NavVers = navigator.appVersion;

if(NavName == 'Microsoft Internet Explorer' && NavVers.indexOf('MSIE 6',0) != '-1')
{
	var Navigateur = 'IE6';
}
else
{
	var Navigateur = 'autre';
}

function msgPaiementOk(msg, h, l, typemsg, url)
	{
		modal(msg,h,l,typemsg, url);
	}
	

function openMsg(msg, h, l, typemsg)
	{
		modal(msg,h,l,typemsg);
	}
	
function openalert(idDiv)
	{	
		modal(idDiv);
	}
	
function newVehicule(context){
	openMsg(context, '340px', '360px', 'formulaire');
    new Ajax.Updater('contentDiv', '/frontoffice/annonces/pages/ajaxFormVehicule.php?contexte=' + context, {
        parameters: $('saisie').serialize(),
		onComplete: function(){
				if(Navigateur == 'IE6')
					{
						maskSelect();
					}
				}
    });
	
}

function autoRequest(context){
    openMsg(context, '800px', '500px', 'formulaire');
    new Ajax.Updater('contentDiv', '/frontoffice/administration/pages/autoRequest.php?context='+ context, {
        parameters: $('saisie').serialize()
    });}

function ajaxNewMarque(newValeur){
    if (newValeur == 'new') {
        $('ajoutMarque').value = $('newMarque').value;
    }
    new Ajax.Updater('tdMarque', '/frontoffice/annonces/pages/ajaxMarque.php?' + newValeur + '=1', {
        parameters: $('newVec').serialize()
    });
}

function ajaxNewModele(newValeur){
    if (newValeur == 'new') {
        $('ajoutModele').value = $('newModele').value;
    }
    new Ajax.Updater('tdModele', '/frontoffice/annonces/pages/ajaxModele.php?' + newValeur + '=1', {
        parameters: $('newVec').serialize()
    });
}

function ajaxNewVersion(newValeur){
    if (newValeur == 'new') {
        $('ajoutVersion').value = $('newVersion').value;
    }	
    new Ajax.Updater('tdVersion', '/frontoffice/annonces/pages/ajaxVersion.php?' + newValeur + '=1', {
        parameters: $('newVec').serialize()
    });
}

function ajaxNewTransmission(newValeur){
    new Ajax.Updater('tdTransmission', '/frontoffice/annonces/pages/ajaxTransmission.php?' + newValeur + '=1', {
        parameters: $('newVec').serialize()
    });
}

function ajaxNewEnergie(newValeur){
    new Ajax.Updater('tdEnergie', '/frontoffice/annonces/pages/ajaxEnergie.php?' + newValeur + '=1', {
        parameters: $('newVec').serialize()
    });
}


function addEvent(obj, type, fn){
    if (obj.attachEvent) {
        obj['e' + type + fn] = fn;
        obj[type + fn] = function(){
            obj['e' + type + fn](window.event);
        }
        obj.attachEvent('on' + type, obj[type + fn]);
    }
    else 
        obj.addEventListener(type, fn, false);
} //end function addEvent
function removeEvent(obj, type, fn){
    if (obj.detachEvent) {
        obj.detachEvent('on' + type, obj[type + fn]);
        obj[type + fn] = null;
    }
    else 
        obj.removeEventListener(type, fn, false);
} //end function removeEvent
function selectContent(inputObj){
    inputObj.select();
} //end function selectContent
/**
 * affiche le sous menu de paramètrage
 * @param {Object} ParentValue id d'un element à montrer
 */
function montre(ParentValue){
    Res = $('parametersMenu');
    Res.style.display = "block";
    Res.style.position = "absolute";
    Res.style.zIndex = 1000;
    Res.style.padding = "2px";
    pos = findPos(ParentValue);
    Res.style.top = pos[1] + ParentValue.offsetHeight + "px";
    Res.style.left = pos[0] + "px";
}

/**
 * masque le sous menu de paramètrage
 * @param {bool} over0
 */
function outOfMenu(over0){
    setTimeout("if ( !over0 ) $('parametersMenu').style.display = 'none';", 1000);
}

/**
 * function pour retrouver la position d'un élement
 * @param {Object} obj
 */
function findPos(obj){
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        }
        while (obj = obj.offsetParent);
            }
    return [curleft, curtop];
} //end function findPosLeft
/**
 * vérification à la volée de la saisie du formulaire
 * @param {Event} e evenement capturé
 * @param {Object} inputObj objet à evaluer
 */
function validateInput(e, inputObj){
    if (!inputObj) 
        inputObj = this;
    var inputValidates = true;
    disabledValue = inputObj.getAttribute("disabled");
    
    if (formElementArray[inputObj.name]['required'] && inputObj.tagName == 'TEXTAREA' && (inputObj.value.indexOf('Descriptif du véhicule') >= 0 || inputObj.value.length == 0)) 
        inputValidates = false;
    if (formElementArray[inputObj.name]['required'] && inputObj.tagName == 'INPUT' && inputObj.value.length == 0 && (disabledValue != 'disabled' && disabledValue == null)) 
        inputValidates = false;
    if (formElementArray[inputObj.name]['required'] && inputObj.tagName == 'SELECT' && (inputObj[inputObj.selectedIndex].value == 0 || inputObj[inputObj.selectedIndex].value == undefined || inputObj[inputObj.selectedIndex].value == '')) {
        inputValidates = false;
    }
    if (formElementArray[inputObj.name]['mask'] && !inputObj.value.match(formValidationMasks[formElementArray[inputObj.name]['mask']])) 
        inputValidates = false;
    
    if (formElementArray[inputObj.name]['freemask']) {
        var tmpMask = formElementArray[inputObj.name]['freemask'];
        tmpMask = tmpMask.replace(/-/g, '\\-');
        tmpMask = tmpMask.replace(/S/g, '[A-Z]');
        tmpMask = tmpMask.replace(/N/g, '[0-9]');
        tmpMask = eval("/^" + tmpMask + "$/gi");
        if (!inputObj.value.match(tmpMask)) 
            inputValidates = false
    }
    
    if (formElementArray[inputObj.name]['regexpPattern']) {
        var tmpMask = eval(formElementArray[inputObj.name]['regexpPattern']);
        if (!inputObj.value.match(tmpMask)) 
            inputValidates = false
    }
    
    if (!formElementArray[inputObj.name]['required'] && inputObj.value.length == 0 && inputObj.tagName == 'INPUT') 
        inputValidates = true;
    
    if (inputValidates) {
        inputObj.parentNode.className = 'validInput';
    }
    else {
        inputObj.parentNode.className = 'invalidInput'
    }
    
    return;
} //end validateinput
function displaylimit(theid, thelimit){
    //alert(thelimit);
    if (thelimit == '' || thelimit == undefined) {
        thelimit = maxLimit;
        //alert(thelimit);
    }
    if ($(theid).value.length < thelimit) {
        //alert(thelimit+' - '+$(theid).value.length);
        $("charRest").innerHTML = thelimit - $(theid).value.length;
        maxLimit = thelimit;
    }
    else {
        //alert('on reduit');
        nbChar = $(theid).value;
        $(theid).value = nbChar.substring(0, thelimit);
        $("charRest").innerHTML = thelimit - $(theid).value.length;
    }
    //maxLimit = $("charRest").innerHTML;

} //end function displaylimit
/**
 * initialisation du controle d'un formulaire
 */
function initFormValidation(nomForm){

    //recupération des champs d'input et de select
    var inputFields = $(nomForm).getElementsByTagName('INPUT');
    var selectBoxes = $(nomForm).getElementsByTagName('SELECT');
    var textareaField = $(nomForm).getElementsByTagName('TEXTAREA');
    
    var inputs = new Array();
    
    for (var i = 0; i < inputFields.length; i++) {
        type = inputFields[i].getAttribute("type");
        if (type == "text" || type == 'password') {
            inputs[inputs.length] = inputFields[i]; //recupere les données
        }
    } //end foreach inputfield
    for (var nb = 0; nb < textareaField.length; nb++) {
        inputs[inputs.length] = textareaField[nb];
    }
    
    for (var no = 0; no < selectBoxes.length; no++) {
        inputs[inputs.length] = selectBoxes[no];
    } //end foreach selectbox
    //pour chaque champs input de la page :
    for (var no = 0; no < inputs.length; no++) {
        disabledValue = inputs[no].getAttribute("disabled");
        
        //on vérifie si la classe est valide ou non
        var className = inputs[no].parentNode.className;
        if (className && className.indexOf('reset') >= 0) {
            validateInput(false, inputs[no]);
            continue;
        }
        //alert(inputs[no].name +' = '+ className);
        if (className && className.indexOf('validInput') >= 0) {
            continue;
        }
        
        //on vérifie si ce champs est nécessaire ou non		
        var required = inputs[no].getAttribute('required');
        if (!required) {
            required = inputs[no].required;
        }
        
        var mask = inputs[no].getAttribute('mask');
        if (!mask) {
            mask = inputs[no].mask;
        }
        
        var freemask = inputs[no].getAttribute('freemask');
        if (!freemask) {
            freemask = inputs[no].freemask;
        }
        
        var regexpPattern = inputs[no].getAttribute('regexpPattern');
        if (!regexpPattern) {
            regexpPattern = inputs[no].regexpPattern;
        }
        
        var div = document.createElement('DIV');
        div.className = 'invalidInput';
        inputs[no].parentNode.insertBefore(div, inputs[no]);
        div.appendChild(inputs[no]);
        div.style.width = inputs[no].offsetWidth + 'px';
        div.style.height = inputs[no].offsetHeight + 'px';
        
        addEvent(inputs[no], 'blur', validateInput);
        addEvent(inputs[no], 'change', validateInput);
        addEvent(inputs[no], 'paste', validateInput);
        addEvent(inputs[no], 'keyup', validateInput);
        
        formElementArray[inputs[no].name] = new Array();
        formElementArray[inputs[no].name]['mask'] = mask;
        formElementArray[inputs[no].name]['freemask'] = freemask;
        formElementArray[inputs[no].name]['required'] = required;
        formElementArray[inputs[no].name]['regexpPattern'] = regexpPattern;
        
        validateInput(false, inputs[no]);
    } //end foreach input 
} //end init form
function autocheck(formName, inputObj){
    var t = document.getElementById(inputObj.id);
    var IDcheck = document.getElementById('check_' + inputObj.id);
    if (t.value.length > 0) {
        if (sommecheck < 2) {
            if (IDcheck.checked != true) {
                IDcheck.checked = true;
                if (sommecheck < 1) {
                    $(t).parentNode.className = 'rien';
                    $(t).setAttribute('required', 'required');
                }
                sommecheck++;
            }
        }
        //alert(sommecheck);
    }
    else {
        if (IDcheck.checked == true) {
            IDcheck.checked = false;
            sommecheck--;
            $(t).removeAttribute("required");
            $(t).parentNode.className = 'rien';
            //todo vérifier l'erreur javascript ICI
            formElementArray[$(t).name]['required'] = undefined;
        }
    }
    if (t.value.length < 2) {
        initFormValidation(formName);
        setTimeout(function(){
            t.focus();
        }, 10);
    }
    
} //end function autocheck
function verifSomme(formName, inputObj,nbMax){

    var IDcheck = document.getElementById(inputObj.id);
    var inputId = IDcheck.id.substring(6, IDcheck.id.length);
    if (IDcheck.checked == false) {
        if (sommecheck > 0) {
            sommecheck--;
            $(inputId).removeAttribute("required");
            $(inputId).parentNode.className = 'rien';
            //todo vérifier l'erreur javascript ICI
            formElementArray[$(inputId).name]['required'] = undefined;
        }
    }
    else {
        if (sommecheck < nbMax) {
            if (sommecheck < 1) {
                $(inputId).parentNode.className = 'rien';
                $(inputId).setAttribute('required', 'required');
            }
            sommecheck++;
        }
        else {
            IDcheck.checked = false;
            modal(nbMax+' contacts maximum');
        }
    }
    initFormValidation(formName);
} //end function verifSomme
function verifNbOptions(formName, inputObj){
    var IDcheck = document.getElementById(inputObj.id);
    if (IDcheck.checked == false) {
        if (sommecheck > 0) {
            sommecheck--;
            //todo vérifier l'erreur javascript ICI
        }
    }
    else {
        if (sommecheck < 5) {
            sommecheck++;
        }
        else {
            IDcheck.checked = false;
            modal('pas plus de 5 options');
        }
    }
    
} //end function verifNbOptions
function ajaxMarque(){
    //alert('on va chercher les marques');
    new Ajax.Updater('tdMarque', '/frontoffice/annonces/pages/ajaxMarque.php', {
        parameters: $('saisie').serialize(),
        evalScripts: true
    });
} //end function ajaxMarque
function ajaxAnnee(){
    //alert('on va chercher les annee');
    new Ajax.Updater('divAnnee', '/frontoffice/annonces/pages/ajaxAnnee.php', {
        parameters: $('saisie').serialize(),
        evalScripts: true
    });
}

function ajaxMillesime(){
    new Ajax.Updater('tdMillesime', '/frontoffice/annonces/pages/ajaxMillesime.php', {
        parameters: $('saisie').serialize(),
        evalScripts: true
    });
}

function ajaxModele(){
    //alert('on va chercher les modele');
    new Ajax.Updater('tdModele', '/frontoffice/annonces/pages/ajaxModele.php', {
        parameters: $('saisie').serialize(),
        evalScripts: true
    });
}

function ajaxVersion(){
    //alert('et on va chercher les version');
    new Ajax.Updater('tdVersion', '/frontoffice/annonces/pages/ajaxVersion.php', {
        parameters: $('saisie').serialize(),
        evalScripts: true
    });
}

function ajaxEnergie(){
    //alert('on actualise les energie');
    new Ajax.Updater('tdEnergie', '/frontoffice/annonces/pages/ajaxEnergie.php', {
        parameters: $('saisie').serialize(),
        evalScripts: true
    });
}

function ajaxTransmission(){
    //alert('on actualise les transmission');
    new Ajax.Updater('tdTransmission', '/frontoffice/annonces/pages/ajaxTransmission.php', {
        parameters: $('saisie').serialize(),
        evalScripts: true
    });
}
