/**
 * Plugin de prise en charge des différents formulaires pour s'appuyer sur le framework Idvive
 * @author Yannick (yannickdalbin at gmail.com) 2011-10-12
 *          @corpyright 2011
 *
 * Prend en charge le submit. Simplement appliquer le plugin idform() sur un objet jQuery de type form.
 * Les messages sont contenus dans un div avec comme attribus la classe .errors.
 * Chaque erreur d'un champs particulier est contenu dans un li
 *
 * Les events :
 *  Chaque form aura différents events :
 *      idform_[idFormulaire]_submitted : event sur l'envoi du formulaire par l'utilisateur
 *      idform_[idFormulaire]_actionBeforeSend : event juste avant la requête ajax
 *      idform_[idFormulaire]_savedSuccess : event lorsque tout s'est bien passé
 *      idform_[idFormulaire]_validationError : event lorsque le formulaire est en erreur
 *      idform_[idFormulaire]_savedFailed : event lorsque le traitement du formulaire est en echec
 *
 */
(function ($) {

    var methods = {
        init : function (options) {

            var popup       = $('<div></div>');
            var back        = $('<div></div>').attr('class', 'back-popup');
            var message     = $('<div></div>').attr('class', 'alert');
            var type        = options.type ? options.type:'alert';

            var button1 = null;
            var button2 = null;
            var button3 = null;

            var img     = $('<img />');
            var text    = $('<div></div>').attr('class', 'text');

            if (!options.text) {
                $.error('text no defined');
                return false;
            }

            text.append(options.text);
            img.attr('src', baseurl + '/template/' + template_name + '/images/' + type + '.png');

            var buttons = $('<div></div>').attr('class', 'buttons');

            if (type === 'alert') {
                button3 = $('<button></button>').append(Translate.ok).click(function () {
                    popup.trigger('ok');
                    popup.fadeOut('normal', function () {
                        popup.remove();
                    });
                });

                buttons.append(button3);
            }
            else if (type === 'confirm') {
                button1 = $('<button></button>').append(Translate.yes).click(function () {
                    popup.trigger('yes');
                    popup.fadeOut('normal', function () {
                        popup.remove();
                    });
                });
                button2 = $('<button></button>').append(Translate.no).click(function () {
                    popup.trigger('no');
                    popup.fadeOut('normal', function () {
                        popup.remove();
                    });
                });
                button3 = $('<button></button>').append(Translate.cancel).click(function () {
                    popup.trigger('cancel');
                    popup.fadeOut('normal', function () {
                        popup.remove();
                    });
                });

                buttons.append(button1);
                buttons.append(button2);
                buttons.append(button3);
            }
            else {
                $.error('Unknown type alert');
                return false;
            }

            message.addClass('shadow').append($('<div></div>').attr('class', 'd').append(text).append(buttons)).append($('<div></div>').attr('class', 'g').append(img))

            popup.append(back);
            popup.append(message);

            $('body').append(popup.hide());
            back.show();
            popup.fadeIn();


            return popup;

        }
    };

    $.idalert = function (method) {

        //Si le paramètre correspond à une fonction de l'objet méthode.. On lance
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }
        //Sinon si le param est un objet de parametre ou aucun param, on lance le constructeur
        else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }
        //Sinon on sait pas !
        else {
            $.error('Method ' +  method + ' does not exist on jQuery.idalert');
            return false;
        }

    }

})(jQuery);
