$().ready(function() {
    form_validators();
    add_meta_form();
    autocomplete_fields();
    autocomplete_editeur();
});

function form_validators()
{
    // validate signup form on keyup and submit
    $('#contact_form').validate();
    $('#req_pass_form').validate();
    $('#update_editeur_form').validate(
    {
        rules: {
            "user[editeur][name]": "required",
            "user[editeur][IPI]": "required",
            "user[nickname]": {
                required: true,
                minlength: 3
            },
            "user[pwd]": {
                minlength: 4
            },
            "user[pwd_confirm]": {
                equalTo: "#pwd"
            },
            "user[mail]": {
                required: true,
                email: true
            }
        },
        messages: {
            "user[editeur][name]": "Veuillez entrer un nom d'éditeur",
            "user[editeur][IPI]": "Veuillez entrer un code IPI",
            "user[nickname]": {
                required: "Veuillez entrer un identifiant",
                minlength: "Votre identifiant doit contenir au minimum 3 caractères"
            },
            "user[pwd]": {
                minlength: "Votre mot de passe doit contenir au minimum 4 caractères"
            },
            "user[pwd_confirm]": {
                equalTo: "Les deux mots de passe saisis ne sont pas identiques"
            },
            "user[mail]": "Votre adresse courriel n'est pas valide"
        }
    }
    );
    $('#create_editeur_form').validate(
    {
        rules: {
            "user[editeur][name]": "required",
            "user[editeur][IPI]": "required",
            "user[nickname]": {
                required: true,
                minlength: 3
            },
            "user[pwd]": {
                required: true,
                minlength: 4
            },
            "user[pwd_confirm]": {
                required: true,
                equalTo: "#pwd"
            },
            "user[mail]": {
                required: true,
                email: true
            }
        },
        messages: {
            "user[editeur][name]": "Veuillez entrer un nom d'éditeur",
            "user[editeur][IPI]": "Veuillez entrer un code IPI",
            "user[nickname]": {
                required: "Veuillez entrer un identifiant",
                minlength: "Votre identifiant doit contenir au minimum 3 caractères"
            },
            "user[pwd]": {
                required: "Veuillez entrer un mot de passe",
                minlength: "Votre mot de passe doit contenir au minimum 4 caractères"
            },
            "user[pwd_confirm]": {
                required: "Veuillez confirmer votre mot de passe",
                equalTo: "Les deux mots de passe saisis ne sont pas identiques"
            },
            "user[mail]": "Votre adresse courriel n'est pas valide"
        }
    }
    );
    $('#create_user_form').validate(
    {
        rules: {
            "user[company]": "required",
            "user[nickname]": {
                required: true,
                minlength: 3
            },
            "user[pwd]": {
                required: true,
                minlength: 4
            },
            "user[pwd_confirm]": {
                required: true,
                minlength: 4,
                equalTo: "#pwd"
            },
            "user[mail]": {
                required: true,
                email: true
            }
        },
        messages: {
            "user[company]": "Veuillez entrer un nom de société",
            "user[nickname]": {
                required: "Veuillez entrer un identifiant",
                minlength: "Votre identifiant doit contenir au minimum 3 caractères"
            },
            "user[pwd]": {
                required: "Veuillez entrer un mot de passe",
                minlength: "Votre mot de passe doit contenir au minimum 4 caractères"
            },
            "user[pwd_confirm]": {
                required: "Veuillez confirmer votre mot de passe",
                equalTo: "Les deux mots de passe saisis ne sont pas identiques"
            },
            "user[mail]": "Votre adresse courriel n'est pas valide"
        }
    }
    );
    $("#admin_lyrics_create").validate();
    $(".ipi").livequery(function(){
        $(this).mask("99999 99 99 99",{
            placeholder:" "
        })
    });
    $(".iswc").livequery(function(){
        $(this).mask("T-999.999.999.9",{
            placeholder:" "
        })
    });
    $(".sacem").livequery(function(){
        $(this).mask("99 999 999 99",{
            placeholder:" "
        })
    });
    $(".year").livequery(function(){
        $(this).mask("9999",{
            placeholder:" "
        })
    });

    $('#create_artiste_form').validate(
    {
        rules: {
            "nom": "required"
        },
        messages: {
            "nom": "Veuillez entrer un nom d'éditeur"
        }
    }
    );
}

function add_meta_form()
{
    $('a.add_link').livequery(function(){
        $(this).click(function(event){
            event.preventDefault();
            var self = this;
            self.cpt_input = $('input[name="'+this.href.match(/meta=(\w+)$/)[1]+'_cpt"]');
            $.get(this.href, {
                cpt: parseInt(self.cpt_input.val(), 10) + 1
            }, function(data){
                //$(self).parent('p').prev().append(data);
                $(self.cpt_input).prev().append(data);
                self.cpt_input.val(parseInt(self.cpt_input.val(), 10) + 1); 
            });
        })
    });
}
var selected = false;
function autocomplete_fields()
{
    $('.autocomplete').livequery(function(){
        $(this).each(function(index){
            var name = $(this).attr('name');
            //var matches = name.match(/(.*)\[\w+\](\[.*\])/);
            var matches = name.match(/([^\[]+)[^\[]*\[\w+\](\[.*\])/);
            var type = matches[1];
            var secondary_types = matches[2].match(/\[\w+\]/g);
            var search_field = secondary_types.pop().match(/\[(\w+)\]/)[1];
            var that = $(this);

            $(this).change(
                function(event){
                    //alert(secondary_types[0]);
                    if(!selected&&secondary_types[0]!='[representant_editeur]'){//sert a s'assurer que l'on selectionne bien dans la liste
                        var to_replace = new RegExp("\\["+search_field+"\\]$");
                        var hidden_field_name = that.attr('name').replace(to_replace, '[id]')
                        var name_field_name = that.attr('name').replace(to_replace, '[name]')
                        var ipi_field_name = that.attr('name').replace(to_replace, '[IPI]')
                        var hidden_field = $('input[name="'+hidden_field_name+'"]');
                        var name_field = $('input[name="'+name_field_name+'"]');
                        var ipi_field = $('input[name="'+ipi_field_name+'"]');
                        if(hidden_field.size() > 0)
                            hidden_field.val("");
                        
                        /*name_field.val("");
                        ipi_field.val("");*/
                        name_field.css('background-color', '#f99');                        
                        ipi_field.css('background-color', '#f99');
                    }
                    selected = false;
                }
                );

            $(this).autocomplete( {
                minLength: 0,
                source: function(request, response) {
                    $.ajax({
                        url: '/admin/lyrics/autocomplete/'+type,
                        data: {
                            q: request.term,
                            search_field: search_field,
                            secondary: secondary_types
                        },
                        success: function(data) {
                            var objects = jQuery.parseJSON(data);
                            response($.map(objects, function(item) {
                                return {
                                    label: item.name,
                                    value: item.name,
                                    IPI: item.IPI,
                                    id: item.id
                                }
                            }))
                        }
                    })
                },
                select: function(event, ui) {
                    var to_replace = new RegExp("\\["+search_field+"\\]$");
                    var hidden_field_name = that.attr('name').replace(to_replace, '[id]')
                    var name_field_name = that.attr('name').replace(to_replace, '[name]')
                    var ipi_field_name = that.attr('name').replace(to_replace, '[IPI]')
                    var hidden_field = $('input[name="'+hidden_field_name+'"]');
                    var name_field = $('input[name="'+name_field_name+'"]');
                    var ipi_field = $('input[name="'+ipi_field_name+'"]');
                    if(hidden_field.size() == 0)
                        hidden_field = $('<input type="hidden" name="'+hidden_field_name+'" />').insertAfter(that);
                    hidden_field.val(ui.item.id);
                    name_field.val(ui.item.value);
                    if(ui.item.IPI !== undefined)
                        ipi_field.val(ui.item.IPI);
                    selected = true;
                }

            });
        });
    });
}

function autocomplete_editeur()
{
    $('.autocomplete_editeur').livequery(function(){
        $(this).each(function(index){
            var name = $(this).attr('name');
            var matches = name.match(/(.*)\[\w+\](\[.*\])/);
            var secondary_types = matches[2].match(/\[\w+\]/g);
            var search_field = secondary_types.pop().match(/\[(\w+)\]/)[1];
            var that = $(this);
            $(this).autocomplete( {
                minLength: 0,
                source: function(request, response) {
                    $.ajax({
                        url: '/admin/lyrics/autocomplete/editeur',
                        data: {
                            q: request.term,
                            search_field: search_field
                        },
                        success: function(data) {
                            var objects = jQuery.parseJSON(data);
                            response($.map(objects, function(item) {
                                return {
                                    label: item.name,
                                    value: item.name,
                                    IPI: item.IPI,
                                    id: item.id
                                }
                            }))
                        }
                    })
                },
                select: function(event, ui) {
                    var to_replace = new RegExp("\\["+search_field+"\\]$");
                    var hidden_field_name = that.attr('name').replace(to_replace, '[id]')
                    var name_field_name = that.attr('name').replace(to_replace, '[name]')
                    var ipi_field_name = that.attr('name').replace(to_replace, '[IPI]')
                    var hidden_field = $('input[name="'+hidden_field_name+'"]');
                    var name_field = $('input[name="'+name_field_name+'"]');
                    var ipi_field = $('input[name="'+ipi_field_name+'"]');
                    if(hidden_field.size() == 0)
                        hidden_field = $('<input type="hidden" name="'+hidden_field_name+'" />').insertAfter(that);
                    hidden_field.val(ui.item.id);
                    name_field.val(ui.item.value);
                    if(ui.item.IPI !== undefined)
                        ipi_field.val(ui.item.IPI);
                }
            });
        });
    });
}

/**
 * Peremet d'ajouter un auteur après la creation lors de l'appel de la popup
 */
function addArtisteFromPopup(type,id,nom,ipi){

    $('#link_add_form_'+type).livequery(function(){

        var self = this;
        self.cpt_input = $('input[name="'+type+'_cpt"]');
        $.get(this.href, {
            cpt: parseInt(self.cpt_input.val(), 10) + 1
        }, function(data){
            $(self.cpt_input).prev().append(data);
            var value_cpt = parseInt(self.cpt_input.val(), 10)+1 ;
            self.cpt_input.val(parseInt(self.cpt_input.val(), 10) + 1);

            $('#'+type+"\\["+value_cpt+"\\]name").livequery(function(){

                var hidden_field_name = '#'+type+"\\["+value_cpt+"\\]id";
                var name_field_name = '#'+type+"\\["+value_cpt+"\\]name";
                var ipi_field_name = '#'+type+"\\["+value_cpt+"\\]ipi";
               
                var hidden_field = $(hidden_field_name);
                var name_field = $(name_field_name);
                var ipi_field = $(ipi_field_name);

                var delete_div_name = '#'+type+"\\["+value_cpt+"\\]deletediv";
                var delete_div = $(delete_div_name);
                delete_div.attr("style", "display:block");

 
                if(hidden_field.size() == 0)
                    hidden_field = $('<input type="hidden" name="'+type+"["+value_cpt+"][id]"+'" />').insertAfter(this);
                hidden_field.val(id);
                name_field.val(nom);

                if(ipi !== undefined)
                    ipi_field.val(ipi);

                ipi_field.attr("readonly",'readonly');
                name_field.attr("readonly",'readonly');
                ipi_field.attr("class","ipi disabled");
                name_field.attr("class","disabled");
            })

        });
       
    });
    
}


/**
 * Peremet d'ajouter un auteur après la creation lors de l'appel de la popup BAS
 */
function addArtisteFromPopupBas(type,id,nom,ipi,id_artiste){

    if(document.getElementById(type+'_'+id_artiste)!=null)
        $('#link_add_form_'+type).livequery(function(){

            var self = this;
            self.cpt_input = $('input[name="'+type+'_cpt"]');
            $.get(this.href, {
                cpt: parseInt(self.cpt_input.val(), 10) + 1
            }, function(data){
                $(self.cpt_input).prev().append(data);
                var value_cpt = parseInt(self.cpt_input.val(), 10)+1 ;
                self.cpt_input.val(parseInt(self.cpt_input.val(), 10) + 1);

                $('#'+type+"\\["+value_cpt+"\\]name").livequery(function(){


                    removeArtisteToCreate(type,id_artiste);

                    var hidden_field_name = '#'+type+"\\["+value_cpt+"\\]id";
                    var name_field_name = '#'+type+"\\["+value_cpt+"\\]name";
                    var ipi_field_name = '#'+type+"\\["+value_cpt+"\\]ipi";
                    var delete_div_name = '#'+type+"\\["+value_cpt+"\\]deletediv";
                    var delete_div = $(delete_div_name);
                    delete_div.attr("style", "display:block");

                    var hidden_field = $(hidden_field_name);
                    var name_field = $(name_field_name);
                    var ipi_field = $(ipi_field_name);
                    

                    if(hidden_field.size() == 0)
                        hidden_field = $('<input type="hidden" name="'+type+"["+value_cpt+"][id]"+'" />').insertAfter(this);
                    hidden_field.val(id);
                    name_field.val(nom);
                    if(ipi !== undefined)
                        ipi_field.val(ipi);

                    ipi_field.attr("readonly",'readonly');
                    name_field.attr("readonly",'readonly');
                    ipi_field.attr("class","ipi disabled");
                    name_field.attr("class","disabled");
                })

            });

        });

}


/**
 * Peremet d'ajouter un auteur après la creation lors de l'appel de la popup
 */
function addEditeurFromPopup(type,id,nom,ipi){


    $('#link_add_form_'+type).livequery(function(){

        var self = this;
        self.cpt_input = $('input[name="'+type+'_cpt"]');
        $.get(this.href, {
            cpt: parseInt(self.cpt_input.val(), 10) + 1
        }, function(data){
            $(self.cpt_input).prev().append(data);
            var value_cpt = parseInt(self.cpt_input.val(), 10)+1 ;
            self.cpt_input.val(parseInt(self.cpt_input.val(), 10) + 1);

            $('#'+type+"\\["+value_cpt+"\\]name").livequery(function(){

                var hidden_field_name = '#'+type+"\\["+value_cpt+"\\]id";
                var name_field_name = '#'+type+"\\["+value_cpt+"\\]name";
                var ipi_field_name = '#'+type+"\\["+value_cpt+"\\]ipi";

                var hidden_field = $(hidden_field_name);
                var name_field = $(name_field_name);
                var ipi_field = $(ipi_field_name);

                if(hidden_field.size() == 0)
                    hidden_field = $('<input type="hidden" name="'+type+"["+value_cpt+"][id]"+'" />').insertAfter(this);
                hidden_field.val(id);
                name_field.val(nom);
                if(ipi !== undefined)
                    ipi_field.val(ipi);

            })

        });

    });

}
/**
 * Supprime un artiste non-reconnu
 */
function removeArtisteToCreate(type,id){
    $('#'+type+'_'+id).remove();
}
