var Application = (function () {
    
    /**
     * Add tooltip :
     * id : if of the element
     * title : title of the tooltip 
     * content : content of the tooltip
     */    
    TOOLTIPS = [
        ['name_and_adress_infos', 'Aide à la location', "Si vous avez déjà contacté la Maison de l'investisseur vous n'avez pas besoin de ressaisir l'ensemble de vos coordonnées, cliquez sur le texte en noir sur fond jaune (juste en dessous), entrez le mail que vous avez saisi lors de votre premier échange et cliquez sur le bouton chercher, vos coordonnées seront alors automatiquement rechargées depuis notre base de données."],
        ['availability_infos', 'Aide à la location', "Vous pouvez si vous le souhaitez entrer plusieurs dates de disponibilités."],
        ['email_only_infos', 'Le saviez vous ?', "Si vous nous avez déjà contacté, entrez simplement votre email, nous utiliserons les données entrées lors du précédent échange (nom, prénom, téléphone ...)."]        
    ];
        
    /**
     * Init simple tooltips describe in the constant TOOLTIPS only 
     * if id has been founded.
     */
    function initTooltips() {
        TOOLTIPS.each(function(t){
            var id = $(t[0]);
            if(id) {                                
                Event.observe(id, 'click', function(){
                    h = tooltip(t[1], t[2]);
                    h._elements.icon = id;
                    h.show();
                })
            }
        });        
    }
    
    function tooltip(title, content) {
        return new HelpBalloon({
            title: title,
            content: content,
            returnElement: true
          });
    }
    
    function decorateLabels()
    {
        $$('label').each(function(l) {
            if ("" != l.accessKey) {
                l.cleanWhitespace();
                if (l.firstChild && l.firstChild.tagName)
                    return;
                var index = l.innerHTML.toUpperCase().indexOf(l.accessKey.toUpperCase());
                if (-1 != index) {
                    l.update(l.innerHTML.substr(0, index) + '<span class="accesskey">' +
                        l.innerHTML.charAt(index) + '</span>' +
                        l.innerHTML.substr(index + 1));
                }
            }
        });
    } // decorateLabels
    
    function focusFirstElement()
    {
        $$('form').each(function(form) {
            if (!form.hasClassName('skip_focus')) {
                form.focusFirstElement();
                throw $break;
            }
        });
    } // focusFirstElement
    
    function init()
    {
        decorateLabels();
        focusFirstElement();
        initResourceEditors();
        initTooltips();
    } // init
    
    function initResourceEditors()
    {
        var resources = arguments[0];
        if (!resources)
            resources = $$('.resource');
        resources.each(function(resource) {
            var id = resource.className.gsub('.*id:([0-9]+).*', '#{1}');
            var rows = resource.getHeight() / 18;
            if (rows < 3)
                rows = 3;
            new Ajax.InPlaceEditor(resource, '/resources/update/' + id, {
                cancelText: 'Annuler',
                clickToEditText: 'Cliquez pour modifier ce paragraphe',
                formClassName: 'inplace_editor',
                loadingText: 'Chargement...',
                loadTextURL: '/resources/value/' + id,
                okText: 'Modifier',
                onFailure: function(transport) {
                    alert(transport.responseText);
                },
                rows: rows,
                savingText: 'Sauvegarde...'
            });
        });
    } // initResourceEditors
    
    return {
        'init': init,
        'initResourceEditors': initResourceEditors
    }

})();

Event.observe(window, 'load', Application.init);
