var matexchange_geoloc = {

    get_user_position: function () {
        var result;
        var req = new Request(
        {
            url:'/geoloc/action-geoloc_get_user_position',
            method:'post',
            async:false,
            onSuccess: function(json) {
                result=JSON.decode(json);
            },
            onFailure: function() {
                showAlerte('alerte', 'Impossible de récuperer position');
                return;
            }
        }
        );
        req.send();
        return result;
    },

    get_town_position: function (town_id) {
        var result;
        var req = new Request(
        {
            url:'/geoloc/action-geoloc_get_town_position',
            method:'post',
            async:false,
            onSuccess: function(json) {
                result=JSON.decode(json);
            },
            onFailure: function() {
                showAlerte('alerte', 'Impossible de récuperer position');
                return;
            }
        }
        );
        req.send('town_id='+town_id);
        return result;
    },

    geoloc_init: function () {
        if (($('town_id').value>0)) {
            return matexchange_geoloc.get_town_position($('town_id').value);
        }
        else {
            return matexchange_geoloc.get_user_position();
        }
    },

    geoloc_callback : function (town) {
        showConfirmation('confirmation', 'Vous avez choisi :\n<b>'+town.town_name+' ('+town.town_postalcode+')</b>\n\nConfirmer ?' , 'javascript:geoloc_action();');
    }

}

function geoloc_action() {
    hidePopup('geoloc');
    hidePopup('geoloc_townselect');
    $('town_id').value=geoloc.selected_town.town_id;
    $('town_summary').value="Modifier : "+geoloc.selected_town.town_name+' ('+geoloc.selected_town.town_postalcode+')';
    closeAlerte('confirmation');
}

function feed_townadmin2(townadmin1_id, townadmin2_id, town_id) {
    var townadmin1_id_value=$(townadmin1_id).options[$(townadmin1_id).options.selectedIndex].value;
    var req = new Request(
    {
        url:'/actions/action-get_townadmin2_id',
        method:'post',
        async:true,
        onSuccess: function(json) {
            var result=JSON.decode(json);
            if (result.code==0) {
                $(townadmin2_id).options.length=0;
                $(townadmin2_id).options[0]=new Element('option', {'value':'', 'text':'---'});
                $(town_id).options.length=0;
                $(town_id).options[0]=new Element('option', {'value':'', 'text':'---'});
                for(var i=0; i<result.result.length;i++) {
                    $(townadmin2_id).options[i+1]=new Element('option', {'value':result.result[i].townadmin2_id, 'text':result.result[i].townadmin2_name});
                }
            }
            if(result.message!==undefined) {
                showAlerte('alerte', result.message);
            }
        }
    }
    );
    req.send('townadmin1_id='+townadmin1_id_value);
}

function feed_town(townadmin2_id, town_id) {
    var townadmin2_id_value=$(townadmin2_id).options[$(townadmin2_id).options.selectedIndex].value;
    var req = new Request(
    {
        url:'/actions/action-get_town_id',
        method:'post',
        async:true,
        onSuccess: function(json) {
            var result=JSON.decode(json);
            if(result.code==0) {
                $(town_id).options.length=0;
                $(town_id).options[0]=new Element('option', {'value':'', 'text':'---'});
                for(var i=0; i<result.result.length;i++) {
                    $(town_id).options[i+1]=new Element('option', {'value':result.result[i].town_id, 'text':result.result[i].town_name});
                }
            }
            if(result.message!==undefined) {
                showAlerte('alerte', result.message);
            }
        }
    }
    );
    req.send('townadmin2_id='+townadmin2_id_value);
}

function del_picture(obj) {
    if (obj.code=='0') {
        $('thumb_picture_'+obj.result.picture_order).destroy();
        $('picture_'+obj.result.picture_order).setStyle('display', 'inline');
        return;
    }
}

function del_logo(obj) {
    if (obj.code=='0') {
        $('thumb_logo'+obj.result.picture_order).destroy();
        $('member_logo_id'+obj.result.picture_order).setStyle('display', 'inline');
        return;
    }
}

document.addEvent('domready', function() {
    var liens = document.getElements('a.blank');
    for (var i = 0 ; i < liens.length ; i++)  {
        liens[i].onclick = function()  {
            window.open(this.href);
            return false;
        };
    }

    var divs = document.getElementsByTagName('div');

    for (var i = 0 ; i < divs.length ; i++)  {
        if (divs[i].className.match(/.*trans.*/))  {

            divs[i].style.behavior = 'url(/js/iepngfix.htc)';
        }
    }

    var imgs = document.getElementsByTagName('img');

    for (var i = 0 ; i < imgs.length ; i++)  {
        if (imgs[i].className.match(/.*trans.*/))  {

            imgs[i].style.behavior = 'url(/js/iepngfix.htc)';
        }
    }

    var lis = document.getElementsByTagName('li');

    for (var i = 0 ; i < lis.length ; i++)  {
        if (lis[i].className.match(/.*trans.*/))  {

            lis[i].style.behavior = 'url(/js/iepngfix.htc)';
        }
    }

    var inputs = document.getElementsByTagName('input');

    for (var i = 0 ; i < inputs.length ; i++)  {
        if (inputs[i].className.match(/.*trans.*/))  {

            inputs[i].style.behavior = 'url(/js/iepngfix.htc)';
        }
    }
});

function getControl(CheckId) {
    switch (CheckId) {
        case 'auth_user' : /* enregistrement d'utilisateur */
        var check_tab = new Array(
        new Array ('login','check_format', 'Votre Identifiant (l\'email avec lequel vous vous êtes inscrit)', /^[-a-zA-Z0-9._]+@[-a-zA-Z0-9._]+\.[a-zA-Z0-9._]+$/i ),
        new Array ('password','check_text', 'Votre mot de passe' )
        );
        var combos_tab = new Array();
        break;

        case 'form-confirmation_reservation' : /* enregistrement d'utilisateur */
        var check_tab = new Array(
        new Array ('condition_gen','check_checkbox', 'Merci d\'accepter les Conditions Générales d\'Utilisation' )
        );
        var combos_tab = new Array();
        break;

        case 'form-register_member' : /* enregistrement d'utilisateur */
        var check_tab = new Array(
        new Array ('member_email','check_format', 'Vous avez mal saisi votre email', /^[-a-zA-Z0-9._]+@[-a-zA-Z0-9._]+\.[a-zA-Z0-9._]+$/i ),
        new Array ('member_email','ajax_fieldvalue_exist_control', 'L\'email <b>{value}</b> est déjà utilisé', 'member', 'member_email', 'yes'),
        new Array ('member_motdepasse','check_text', 'Votre mot de passe' ),
        new Array ('member_motdepasse','check_confirm', 'Mot de passe et confirmation sont différents' ),
        new Array ('member_civilite','check_select', 'Civilité' ),
        new Array ('member_nom','check_text', 'Votre nom' ),
        new Array ('member_prenom','check_text', 'Votre prénom' ),
        new Array ('member_societe','check_text', 'Votre société' ),
        new Array ('member_siret','check_text', 'Votre numéro SIREN' ),
        new Array ('member_tva','check_text', 'Votre numéro de TVA' ),
        new Array ('member_poste','check_text', 'Votre poste' ),
        new Array ('member_adresse','check_text', 'Votre adresse' ),
        new Array ('town_id','check_format', 'Votre ville', /^[0-9]+$/i ),
        new Array ('member_telephone','check_text', 'Votre téléphone'),
        new Array ('member_telephone','check_format', 'Numéro de téléphone incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$/i ),
        new Array ('member_mobile','check_format', 'Numéro de mobile incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$/i),
        new Array ('member_fax','check_format', 'Numéro de fax incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$|^$/i ),
        new Array ('member_abo','check_radio', 'Veuillez choisir votre abonnement' ),
        new Array ('condition_gen','check_checkbox', 'Merci d\'accepter les Conditions Générales d\'Utilisation' )
        );

		/*
        if ($('member_sms').get('value')=='yes') {
            check_tab.combine(
                new Array(
                    new Array ('member_mobile','check_text', 'Votre numéro de mobile')
                )
            );
        }
		*/

        var combos_tab = new Array();
        break;

        case 'form-register_cv' : /* enregistrement de cv */
        var check_tab = new Array(
        new Array ('member_email','check_format', 'Vous avez mal saisi votre email', /^[-a-zA-Z0-9._]+@[-a-zA-Z0-9._]+\.[a-zA-Z0-9._]+$/i ),
        new Array ('member_email','ajax_fieldvalue_exist_control', 'L\'email <b>{value}</b> est déjà utilisé', 'member', 'member_email', 'yes'),
        new Array ('member_motdepasse','check_confirm', 'Mot de passe et confirmation sont différents' ),
        new Array ('member_civilite','check_select', 'Civilité' ),
        new Array ('member_nom','check_text', 'Votre nom' ),
        new Array ('member_prenom','check_text', 'Votre prénom' ),
        new Array ('member_adresse','check_text', 'Votre adresse' ),
        new Array ('town_id','check_format', 'Votre ville', /^[0-9]+$/i ),
        new Array ('member_telephone','check_text', 'Votre téléphone'),
        new Array ('member_telephone','check_format', 'Numéro de téléphone incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$/i ),
        new Array ('member_mobile','check_format', 'Numéro de mobile incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$/i)
        );

        var combos_tab = new Array();
        break;

        case 'form-edit_member' : /* enregistrement d'utilisateur */
        var check_tab = new Array(
        new Array ('member_email','check_format', 'Vous avez mal saisi votre email', /^[-a-zA-Z0-9._]+@[-a-zA-Z0-9._]+\.[a-zA-Z0-9._]+$/i ),
        new Array ('member_email','ajax_fieldvalue_exist_control', 'L\'email <b>{value}</b> est déjà utilisé', 'member', 'member_email', 'yes'),
        new Array ('member_motdepasse','check_confirm', 'Mot de passe et confirmation sont différents' ),
        new Array ('member_civilite','check_select', 'Civilité' ),
        new Array ('member_nom','check_text', 'Votre nom' ),
        new Array ('member_prenom','check_text', 'Votre prénom' ),
        new Array ('member_societe','check_text', 'Votre société' ),
        new Array ('member_siret','check_text', 'Votre numéro SIREN' ),
        new Array ('member_tva','check_text', 'Votre numéro de TVA' ),
        new Array ('member_poste','check_text', 'Votre poste' ),
        new Array ('member_adresse','check_text', 'Votre adresse' ),
        new Array ('town_id','check_format', 'Votre ville', /^[0-9]+$/i ),
        new Array ('member_telephone','check_text', 'Votre téléphone'),
        new Array ('member_telephone','check_format', 'Numéro de téléphone incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$/i ),
        new Array ('member_mobile','check_format', 'Numéro de mobile incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$/i),
        new Array ('member_fax','check_format', 'Numéro de fax incorrect, merci de saisir un numéro à 10 chiffres.', /^[0-9]{10}$|^$/i )
        );

		/*
        if ($('member_sms').get('value')=='yes') {
            check_tab.combine(
                new Array(
                    new Array ('member_mobile','check_text', 'Votre numéro de mobile')
                )
            );
        }
		*/

        var combos_tab = new Array();
        break;

        case 'form-register_engin' : /* ajout d'une machine */
        var check_tab = new Array(
        new Array ('type_id','check_select', 'Type' ),
        new Array ('sstype_id','check_select', 'Sous-type' ),
        new Array ('marque_id','check_select', 'Marque' ),
        new Array ('engin_modele','check_text', 'Modèle' ),
        new Array ('engin_annee','check_format', 'Année', /^[0-9]{4}$/i ),
        new Array ('engin_puissance','check_format', 'Puissance', /^[0-9]+$/i ),
        new Array ('engin_masse','check_format', 'Masse', /^[0-9]+$|^[0-9]+\.[0-9]{1,2}$/i ),
        new Array ('engin_longueur','check_format', 'Longueur', /^[0-9]+$|^[0-9]+\.[0-9]{1,2}$/i ),
        new Array ('engin_largeur','check_format', 'Largeur', /^[0-9]+$|^[0-9]+\.[0-9]{1,2}$/i ),
        new Array ('engin_hauteur','check_format', 'Hauteur', /^[0-9]+$|^[0-9]+\.[0-9]{1,2}$/i ),
        new Array ('engin_protectionvol','check_radio', 'Protection vol'),
        new Array ('engin_actuel','check_radio', 'Engin actuel'),
        new Array ('engin_online','check_radio', 'Engin en ligne'),
        new Array ('town_id', 'check_text', 'Ville'),
        new Array ('engin_tarif','check_format', 'Tarif', /^[0-9]+$/i )
        );
        var combos_tab = new Array();
        break;

        case 'form-reserver_engin' : /* réservation d'un engin */
        var check_tab = new Array(
        new Array ('engin_id','check_text', 'Vous n\'êtes pas sur une fiche engin valide' ),
        new Array ('reservation_datedebut','check_format', 'Vous devez selectionner une date de début de réservation dans le calendrier', /^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$/i ),
        new Array ('reservation_datefin','check_format', 'Vous devez selectionner une date de fin de réservation dans le calendrier', /^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$|^$/i )
        );
        var combos_tab = new Array();
        break;

        case 'form-dispo' : /* réservation d'un engin */
        var check_tab = new Array(
        new Array ('engin_id','check_text', 'Vous n\'êtes pas sur une fiche engin valide' ),
        new Array ('reservation_datedebut','check_format', 'Vous devez selectionner une date dans le calendrier', /^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$/i ),
        new Array ('reservation_datefin','check_format', 'Vous devez selectionner une date dans le calendrier', /^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$|^$/i )
        );
        var combos_tab = new Array();
        break;

        case 'form-evaluez_matexchange' : /* évaluez matexchange */
        var check_tab = new Array(
        new Array ('retourmember_content','check_text', 'Merci de saisir votre évaluation' )
        );
        var combos_tab = new Array();
        break;

        case 'listing_recherche' : // recherche engin
        var check_tab = new Array();
        /*if ($('town_id').get('value')!='') {
            check_tab.combine( new Array( new Array ('rayon','check_text', 'Rayon de recherche autour de la ville')));
        }*/
        var combos_tab = new Array();
        break;

        case 'listing_emploi' : // recherche emploi
        var check_tab = new Array();
        /*if ($('town_id').get('value')!='') {
            check_tab.combine( new Array( new Array ('rayon','check_text', 'Rayon de recherche autour de la ville')));
        }*/
        var combos_tab = new Array();
        break;

        case 'listing_emploi_offre' : // recherche offre
        var check_tab = new Array();
        /*if ($('town_id').get('value')!='') {
            check_tab.combine( new Array( new Array ('rayon','check_text', 'Rayon de recherche autour de la ville')));
        }*/
        var combos_tab = new Array();
        break;
    }

    return {'check_tab':check_tab, 'combos_tab':combos_tab};

}

var calendar = function (calendar_id, url, cal_onclick) {

    this.cal_onclick = cal_onclick;
    this.url = url;

    this.calendar_id = calendar_id;
    this.dselected = new Array();
    this.cached = new Array();

    this.is_cached = function(init_year, init_month) {
        if (this.cached[init_year, init_month]) {
            return true
        }
        return false;
    }

    this.cache = function(init_year, init_month, result) {
        this.cached[init_year, init_month]=result;
    }

    this.set = function (init_year, init_month, step) {

        init_year=parseInt(init_year);
        init_month=parseInt(init_month);
        step=parseInt(step);

        if (isNaN(init_year)) {init_year = new Date().getFullYear()};
        if (isNaN(init_month)) {init_month = new Date().getMonth()+1};
        if (isNaN(step)) { step=0 };

        if ((step==1) && (init_month==12)) { // decembre + 1
            init_year+=1; // year + 1
            init_month=1; // month -> janvier
        }
        else if ((step==-1) && (init_month==1)) { // janvier -1
            init_year-=1;   // year -1
            init_month=12;  // month -> decembre
        }
        else {
            init_month+=step;
        }


        if (!this.is_cached(init_year, init_month)) {
            var req = new Request({
                url:this.url,
                method:'post',
                async:false,
                onSuccess: function(json) {
                    var obj=JSON.decode(json);
                    this.ref.cache(init_year, init_month, obj.result);
                }
            });
            req.ref=this;
            req.send('init_year='+init_year+'&init_month='+init_month);
        }

        obj = this.cached[init_year, init_month];
        this.calendar = obj.calendar;
        this.year = obj.thisyear;
        this.month = obj.thismonth;
        this.month_str = obj.month_str;

    }

    this.adjust = function(step) {
        this.set(this.year, this.month, step);
        this.display();
    }

    this.display = function () {

        $('month_str').innerHTML = this.month_str;

        var table = $(this.calendar_id);
        tds = table.getElements('td');

        for(var i=0; i<this.calendar.length; i++) {
            var day = this.calendar[i];
            day.date_mysql = day.thisyear+'-'+((day.thismonth)<10?'0'+day.thismonth:day.thismonth)+'-'+((day.thisday)<10?'0'+day.thisday:day.thisday);
            day.date_str = day.thisday+'/'+day.thismonth+'/'+day.thisyear;

            var td=tds.shift();
            td.calendar = this;
            td.day = day;
            td.empty();

            if (day.isempty) {
                td.set('class','grey3');
                td.appendText(day.thisday);
            }
            else {
                if (this.is_selected(day) || this.is_tobook(day)) {
                    td.set('class','tobook');
                    td.adopt(bold(day.thisday));
                }
                else if (day.isfree) {
                    td.set('class','free');
                    td.appendText(day.thisday);
                }
                else {
                    td.set('class','booked');
                    td.appendText(day.thisday);
                }
                td.addEvent('click', this.cal_onclick );
            }

        }

        while(td=tds.shift()) {
            td.empty();
            td.set('class','');
        }

    }

    this.select_date = function (day) {
        this.dselected.include(day);
        this.display();
    }

    this.unselect_date = function (day) {
        this.dselected.erase(day);
        this.display();
    }

    this.is_tobook = function (day) {
        if (this.dselected.length==2) {
            var timestamp_min = Math.min(this.dselected[0].timestamp, this.dselected[1].timestamp);
            var timestamp_max = Math.max(this.dselected[0].timestamp, this.dselected[1].timestamp);
            if ((day.timestamp>=timestamp_min) && (day.timestamp<=timestamp_max)) {
                return true;
            }
        }
        return false;
    }

    this.is_selected = function (day) {
        if (this.dselected.contains(day)) {
            return true;
        }
        return false;
    }

    this.set();
    this.display();

}

function remplir_champs(day) {
    if ($('reservation_datedebut').get('value')=='') {
        $('reservation_datedebut').day = day;
        $('reservation_datedebut').set('value',day.date_mysql);
        $('reservation_datedebutF').set('value',day.date_str);
    }
    else if ($('reservation_datefin').get('value')=='') {
        $('reservation_datefin').day = day;
        $('reservation_datefin').set('value',day.date_mysql);
        $('reservation_datefinF').set('value',day.date_str);
    }
}

function reserver_engin() {

    if (!this.day.isfree) {
        showAlerte('alerte', 'Cette date n\'est pas disponible pour une réservation.');
    }
    else if (this.calendar.is_tobook(this.day) && !this.calendar.is_selected(this.day)) {
        showAlerte('alerte', 'Cette date fait déjà parti de la plage selectionnée.\n\nPour modifier la plage de réservation, modifiez sa date de début ou de fin');
    }
    else if (this.calendar.is_selected(this.day)) { // deselection
        this.calendar.unselect_date(this.day);
        if ($('reservation_datedebut').get('value')==this.day.date_mysql) {
            $('reservation_datedebut').set('value','');
            $('reservation_datedebutF').set('value','');
        }
        else if ($('reservation_datefin').get('value')==this.day.date_mysql) {
            $('reservation_datefin').set('value','');
            $('reservation_datefinF').set('value','');
        }
    }
    else { // selection
        if (this.calendar.dselected.length==2) {
            showAlerte('alerte', 'Vous avez déjà selectionné une date de début et de fin de réservation.\n\n\nPour désélectionner une date, vous pouvez :\n- soit la désélectionner directement à partir du calendrier en cliquant dessus à nouveau\n- soit cliquer sur le <img src=\'/img/button-effacer.png\' /> à côté du champ')
        }
        else if (this.calendar.dselected.length==1) {
            var req = new Request({
                url:'/actions/action-calendar_check',
                method:'post',
                async:true,
                onSuccess: function(json) {
                    var obj=JSON.decode(json);
                    if (obj.result) {
                        this.ref.calendar.select_date(this.ref.day);
                        remplir_champs(this.ref.day);
                    }
                    else {
                        showAlerte('alerte', 'La plage de réservation selectionnée comprend une ou plusieurs dates déjà réservées.\n\nMerci de selectionner une plage entièrement libre')
                    }
                }
            });
            req.ref=this;
            req.send('engin_id='+$('engin_id').get('value')+'&date1='+this.calendar.dselected[0].date_mysql+'&date2='+this.day.date_mysql);
        }
        else {
            this.calendar.select_date(this.day);
            remplir_champs(this.day);
        }
    }

}

function editer_dispo() {

    if (this.calendar.is_tobook(this.day) && !this.calendar.is_selected(this.day)) {
        showAlerte('alerte', 'Cette date fait déjà parti de la plage selectionnée.\n\nPour modifier la plage de réservation, modifiez sa date de début ou de fin');
    }
    else if (this.calendar.is_selected(this.day)) { // deselection
        this.calendar.unselect_date(this.day);
        if ($('reservation_datedebut').get('value')==this.day.date_mysql) {
            $('reservation_datedebut').set('value','');
            $('reservation_datedebutF').set('value','');
        }
        else if ($('reservation_datefin').get('value')==this.day.date_mysql) {
            $('reservation_datefin').set('value','');
            $('reservation_datefinF').set('value','');
        }
    }
    else { // selection
        if (this.calendar.dselected.length==2) {
            // remplacer min / max date par la nouvelle valeur
            showAlerte('alerte', 'Vous avez déjà selectionné une date de début et de fin de réservation.\n\n\nPour désélectionner une date, vous pouvez :\n- soit la désélectionner directement à partir du calendrier en cliquant dessus à nouveau\n- soit cliquer sur le <img src=\'/img/button-effacer.png\' /> à côté du champ')
        }
        else {
            this.calendar.select_date(this.day);
            remplir_champs(this.day);
        }
    }

}

function send_dispo(form_id, calendar_id) {
    form = $(form_id);
    form.set('send', {
        url: '/actions/action-send_dispo',
        method: 'post',
        async:true,
        onSuccess: function(json) {
            var response=JSON.decode(json);
            if (response.code==0) {
                cal.dselected.empty();
                cal.cached.empty();
                $('reservation_datedebut').set('value','');
                $('reservation_datedebutF').set('value','');
                $('reservation_datefin').set('value','');
                $('reservation_datefinF').set('value','');
                cal.adjust(0);
                cal.display();
            }
            if (response.message!==undefined) {
                showAlerte('alerte', response.message);
            }
        }
    });
    form.send(); //Sends the form.
}

function change_note(note, reservation_id) {

    for (var i=1; i<=5; i++) {
        $('star_' + reservation_id + '_' + i).set('src',i<=note?'/img/star-orange.png':'/img/star-grey.png');
    }

    for (var i=1; i<=5; i++) {
        $('comment'+i+'_'+reservation_id).setStyle('display','none');
    }

    $('comment'+note+'_'+reservation_id).setStyle('display','inline');

}


/*
document.addEvent('domready', function() {

var types = document.getElements('.bottomlink');
for(var i=0; i<types.length; i++) {
var sub=types[i].getElement('.sub-bottomlink');
if (sub) {
var tip = new Tips(types[i]);
tip.store('tip:title', 'my title');
tip.store('tip:text', sub);
}
}

});
*/

