var ingredientManager = {
    tabUnite: new Array(),
    tabIngredient: new Array(),
    lineBuilder: function(json) {
        var ligne = '<td>'+
                        '<input type="hidden" name="ordre[]" id="ordre_'+json.num+'" value="'+json.ordre+'" />'+
                        '<img src="/design/fleche_monter.gif" "name="monter[]" id="monter_'+json.num+'" title="Monter" class="button monter" /> '+
                        '<img src="/design/fleche_descendre.gif" name="descendre[]" id="descendre_'+json.num+'" title="Descendre" class="button descendre" />'+
                    '</td>'+
                    '<td>'+
                        '<span>'+json.nom+'</span>'+
                        '<input type="hidden" name="id_ingredient[]" id="id_ingredient_'+json.num+'" value="'+json.id+'" />'+
                    '</td>'+
                    '<td>'+
                        '<input type="text" name="quantite[]" id="quantite_'+json.num+'" value="'+((json.quantite!=0)?json.quantite:'')+'" size="4" class="text" />'+
                    '</td>';
		$tone.log('Json: "'+json.option+'"');
		if(json.option != '') {
        	ligne+= '<td><select name="unite[]" id="unite_'+json.num+'">'+json.option+'</select></td>';
		}
		else {
        	ligne+= '<td><input type="hidden" name="unite[]" id="unite_'+json.num+'" value="0" /></td>';
		}
            ligne+= '<td>'+
                        '<input type="text" name="qualificatif[]" id="qualificatif_'+json.num+'" value="'+json.qualificatif+'" size="20" class="text" />'+
                    '</td>'+
                    '<td>'+
                        '<input type="checkbox" name="facultatif[]" id="facultatif_'+json.num+'" '+json.facultatif+' />'+
                    '</td>'+
                    '<td>'+
                        '<input type="button" id="confirm_ingredient_'+json.num+'" value="Confirmer" class="button" /> '+
                        '<input type="button" id="remove_ingredient_'+json.num+'" value="Supprimer" class="button" />'+
                    '</td>';
        return ligne;
    },
    ajouter: function(nom_ingredient, id_ingredient) {
        $tone.log('Ajouter: '+nom_ingredient+','+id_ingredient);
        var oThis = this;
        var num_ingredient = $('input[name=nb_ingredient]').val();
        $.get(
        '/_ajax/recette/recette_ingredient_compose_infos.php?id='+id_ingredient,
        function(data) {
            var data = eval('('+data+')');
            $tone.log('Callback Get: '+data.id);
            if(data.status == 0) {
                alert('Nous ne connaissons pas l\'ingrédient que vous avez saisi. \n'+
                      'Peut être vous êtes-vous trompé, dans ce cas veuillez recommencer, '+
                      'sinon vous pouvez ajouter cet ingrédient afin qu\'il soit disponible pour tout le monde (à venir...)');
                return;
            }
            oThis.tabIngredient[id_ingredient] = data;
            

            // affichage du tableau des ingrédients
            $('#table_ingredient').show();
            
            // création des listes déroulantes des unités et qualificatifs pour l'ingrédient selectionné

            var showUnite = (data.unite.length != 0);
			$tone.log('showUnite : ' + showUnite);
			if(showUnite) {
				if(!data.obligUnite) {
	                var optionUniteSingulier = '<option value="0"></option>';
	                var optionUnitePluriel = '<option value="0"></option>';
	            }
	            else {
	                var optionUniteSingulier = '';
	                var optionUnitePluriel ='';
	            }
	            for(var i=0, length=data.unite.length; i<length; i++) {
	                oThis.tabUnite[data.unite[i].id] = data.unite[i];
	                optionUniteSingulier += '<option value="'+data.unite[i].id+'">'+data.unite[i].singulier+'</option>';
	                optionUnitePluriel += '<option value="'+data.unite[i].id+'">'+data.unite[i].pluriel+'</option>';
	            }
			}
            else {
                var optionUniteSingulier = '';
                var optionUnitePluriel ='';
            }
            // construction de la ligne
//            var $recap_ing = $('<tr id="recap_ing_'+num_ingredient+'">');
//            $recap_ing.append('<td>'+nom_ingredient+'<input type="hidden" name="id_ingredient[]" id="id_ingredient_'+num_ingredient+'" value="'+data.id+'" /></td>'+
//                              '<td><input type="text" name="quantite[]" id="quantite_'+num_ingredient+'" size="4" class="text" value="0" /></td>');
//            if(showUnite)
//                $recap_ing.append('<td><select name="unite[]" id="unite_'+num_ingredient+'">'+optionUniteSingulier+'</select></td>');
//            else
//                $recap_ing.append('<td><input type="hidden" name="unite[]" id="unite_'+num_ingredient+'" value="0" /></td>');
//
//            // bouton "confirmer", "supprimer"
//            $recap_ing.append('<td><input type="text" name="qualificatif[]" id="qualificatif_'+num_ingredient+'" size="10" class="text" /></td>'+
//                              '<td><input type="button" id="confirm_ingredient_'+num_ingredient+'" value="Confirmer" class="button" /> '+
//                              '<input type="button" id="remove_ingredient_'+num_ingredient+'" value="Supprimer" class="button" /></td>');
//
//            $('#recap_ingredient').append($recap_ing);
            
            var index = $('#recap_ingredient > tr').size()+1;
            $('#recap_ingredient')
                .append('<tr id="recap_ing_'+num_ingredient+'"></tr>')
                    .find('#recap_ing_'+num_ingredient)
                    .addClass('ko')
                    .append(oThis.lineBuilder({
                        num: num_ingredient,
                        nom: nom_ingredient,
                        id: id_ingredient,
                        ordre: index,
                        quantite: 0,
                        unite: 0,
                        option: optionUniteSingulier,
                        qualificatif: '',
                        facultatif: ''
                    }));
            
            $('#quantite_'+num_ingredient).keyup(function() {
                // vérification lors de la saisi dans le champ quantité que la cohérence singulier/pluriel est respectée
                var parent = $(this).parent().parent();
                var id = $(this).attr('id');
                var num_ingredient = id.substr(id.lastIndexOf('_')+1);
                var selectUnite = parent.find('#unite_'+num_ingredient);
                var valUnite = selectUnite.val();
                if(showUnite) {
                    var val = parseFloat($(this).val().replace(/,/, '.')) || 0;
                    if(val <= 1) // singulier
                        selectUnite.html(optionUniteSingulier).val(valUnite);
                    else // pluriel
                        selectUnite.html(optionUnitePluriel).val(valUnite);
                }
            });
            $('#confirm_ingredient_'+num_ingredient).click(function() { oThis.confirmer(num_ingredient); });
            $('#remove_ingredient_'+num_ingredient).click(function() { oThis.supprimer(num_ingredient); });
            $('#monter_'+num_ingredient).click(function() { oThis.monter(num_ingredient); });
            $('#descendre_'+num_ingredient).click(function() { oThis.descendre(num_ingredient); });
            
            $('input[name=nb_ingredient]').val(parseInt(num_ingredient)+1);
            
            $('input[name=ingredient]').val('').focus();
        });
    },
    confirmer: function(num_ingredient) {
        $tone.log('Confirmer: '+num_ingredient);
        var oThis = this;
        var inputQuantite     = $('#quantite_'+num_ingredient);
        var selectUnite       = $('#unite_'+num_ingredient);
        var inputQualificatif = $('#qualificatif_'+num_ingredient);
        var inputFacultatif   = $('#facultatif_'+num_ingredient);
        var id_ingredient     = $('#id_ingredient_'+num_ingredient).val();
        
        // vérification que l'utilisateur n'a pas saisi une qte nulle
        if(oThis.tabIngredient[id_ingredient] && oThis.tabIngredient[id_ingredient].obligQuantite && inputQuantite.val() == 0) {
            alert("Vous ne pouvez saisir une quantité nulle");
            $tone.log('Erreur sur l\'ingrédient : '+num_ingredient);
            $('#recap_ing_'+num_ingredient).attr('style','background: #e17575;');
            return false;
        }
        $('#recap_ing_'+num_ingredient).attr('style', '');
        
        // Quantité
        if((parseFloat(inputQuantite.val().replace(/,/, '.')) || 0) == 0)
            var htmlQuantite = '<span></span><input type="hidden" name="quantite[]" id="quantite_'+num_ingredient+'" value="0" />';
        else
            var htmlQuantite = '<span>'+inputQuantite.val()+'</span><input type="hidden" name="quantite[]" id="quantite_'+num_ingredient+'" value="'+inputQuantite.val()+'"/>';
        inputQuantite.parent().html(htmlQuantite);
           
        // Qualificatif  
        var htmlQualificatif = '<span>'+inputQualificatif.val()+'</span><input type="hidden" name="qualificatif[]" id="qualificatif_'+num_ingredient+'" value="'+inputQualificatif.val()+'"/>';      
        inputQualificatif.parent().html(htmlQualificatif);
        
        // Facultatif
        if(inputFacultatif.attr('checked'))
            var htmlFacultatif = '<span>Oui</span><input type="hidden" name="facultatif[]" id="facultatif_'+num_ingredient+'" value="1" />';
        else 
            var htmlFacultatif = '<span>Non</span><input type="hidden" name="facultatif[]" id="facultatif_'+num_ingredient+'" value="0" />';
        inputFacultatif.parent().html(htmlFacultatif);
       
        // concordance singulier/pluriel
        if((parseFloat(inputQuantite.val().replace(/,/, '.')) || 0) <= 1) { // singulier
            if(selectUnite.val() != 0)
                selectUnite.parent().html(
                    '<span>'+oThis.tabUnite[selectUnite.val()].singulier+'</span>'+
                    '<input type="hidden" name="unite[]" id="unite_'+num_ingredient+'" value="'+selectUnite.val()+'"/>'
                );
            else
                selectUnite.parent().html('<input type="hidden" name="unite[]" id="unite_'+num_ingredient+'" value="0"/>');
        }
        else { // pluriel
            if(selectUnite.val() != 0)
                selectUnite.parent().html(
                    '<span>'+oThis.tabUnite[selectUnite.val()].pluriel+'</span>'+
                    '<input type="hidden" name="unite[]" id="unite_'+num_ingredient+'" value="'+selectUnite.val()+'"/>'
                );
            else
                selectUnite.parent().html('<input type="hidden" name="unite[]" id="unite_'+num_ingredient+'" value="0"/>');
        }
        
        // suppression du bouton confirmer et ajout du bouton modifier
        
        $('#recap_ing_'+num_ingredient).removeClass('ko');
        $('#confirm_ingredient_'+num_ingredient)
            .parent()
                .prepend('<input type="button" id="modif_ingredient_'+num_ingredient+'" value="Modifier" class="button" />')
                .find('#modif_ingredient_'+num_ingredient)
                    .click(function() {	oThis.modifier(num_ingredient);	})
                .end()
            .end()
            .remove();
        return true;
    },
    supprimer: function(num_ingredient) {
		$('#remove_ingredient_'+num_ingredient).unbind('click');
        $tone.log('Supprimer: '+num_ingredient);
        var oThis = this;
        if(confirm('Etes-vous sûr de vouloir supprimer cet ingrédient ?'))
        $('#recap_ing_'+num_ingredient).remove();
        if($('#recap_ingredient > tr').size() == 0)
            $('#table_ingredient').hide();
        $('#recap_ingredient > tr').each(function() {
            var id = $(this).attr('id');
            var num = id.substr(id.lastIndexOf('_')+1);
            $(this).find('#ordre_'+num).val($('#recap_ingredient > tr').index($(this)[0])+1);
        });
    },
    modifier: function(num_ingredient) {
        $('#modif_ingredient_'+num_ingredient).unbind('click');
        $tone.log('Modifier: '+num_ingredient);
        var oThis = this;
        var id_ingredient = $('#id_ingredient_'+num_ingredient).val();
        $.get(
        '/_ajax/recette/recette_ingredient_compose_infos.php?id='+id_ingredient,
        function(data) {
            var data = eval('('+data+')');
            $tone.log('Callback Get: '+data.id);
            if(data.status == 0) {
                alert('Nous ne connaissons pas l\'ingrédient que vous avez saisi. \n'+
                      'Peut être vous êtes-vous trompé, dans ce cas veuillez recommencer, '+
                      'sinon vous pouvez ajouter cet ingrédient afin qu\'il soit disponible pour tout le monde (à venir...)');
                return;
            }
            oThis.tabIngredient[id_ingredient] = data;

            var showUnite = (data.unite.length != 0);
			$tone.log('showUnite : ' + showUnite);
			if(showUnite) {
	            if(!data.obligUnite) {
	                var optionUniteSingulier = '<option value="0"></option>';
	                var optionUnitePluriel = '<option value="0"></option>';
	            }
	            else {
	                var optionUniteSingulier = '';
	                var optionUnitePluriel ='';
	            }
	            for(var i=0, length=data.unite.length; i<length; i++) {
	                oThis.tabUnite[data.unite[i].id] = data.unite[i];
	                optionUniteSingulier += '<option value="'+data.unite[i].id+'">'+data.unite[i].singulier+'</option>';
	                optionUnitePluriel += '<option value="'+data.unite[i].id+'">'+data.unite[i].pluriel+'</option>';
	            }
		 	}
            else {
                var optionUniteSingulier = '';
                var optionUnitePluriel ='';
	       	}
            
            var $recap_ing        = $('#recap_ing_'+num_ingredient);
            var inputOrdre        = $('#ordre_'+num_ingredient);
            var inputQuantite     = $('#quantite_'+num_ingredient);
            var inputUnite        = $('#unite_'+num_ingredient);
            var inputQualificatif = $('#qualificatif_'+num_ingredient);
            var inputFacultatif   = $('#facultatif_'+num_ingredient);
            var nom_ingredient    = $recap_ing.find('td').eq('1').find('span').html();
            var qualificatif      = $recap_ing.find('td').eq('4').find('span').html();
            var facultatif        = (inputFacultatif.val() != 0)?'checked="checked"':'';
            $recap_ing.empty().addClass('ko').append(oThis.lineBuilder({
                num: num_ingredient,
                nom: nom_ingredient,
                id: id_ingredient,
                ordre: inputOrdre.val(),
                quantite: inputQuantite.val(),
                unite: inputUnite.val(),
                option: ((parseFloat(inputQuantite.val().replace(/,/, '.')) || 0) <= 1)?optionUniteSingulier:optionUnitePluriel,
                qualificatif: qualificatif,
                facultatif: facultatif
            }));
            
            $('#unite_'+num_ingredient).val(inputUnite.val());
            $('#quantite_'+num_ingredient).keyup(function() {
                // vérification lors de la saisi dans le champ quantité que la cohérence singulier/pluriel est respectée
                var parent = $(this).parent().parent();
                var id = $(this).attr('id');
                var num_ingredient = id.substr(id.lastIndexOf('_')+1);
                var selectUnite = parent.find('#unite_'+num_ingredient);
                var valUnite = selectUnite.val();
                if(showUnite) {
                    var val = parseFloat($(this).val().replace(/,/, '.')) || 0;
                    if(val <= 1) // singulier
                        selectUnite.html(optionUniteSingulier).val(valUnite);
                    else // pluriel
                        selectUnite.html(optionUnitePluriel).val(valUnite);
                }
            });
            $('#confirm_ingredient_'+num_ingredient).click(function() { oThis.confirmer(num_ingredient); });
            $('#remove_ingredient_'+num_ingredient).click(function() { oThis.supprimer(num_ingredient); });
            $('#monter_'+num_ingredient).click(function() { oThis.monter(num_ingredient); });
            $('#descendre_'+num_ingredient).click(function() { oThis.descendre(num_ingredient); });
        });
    },
    monter: function(num_ingredient) {
        $tone.log('Monter: '+num_ingredient); 
        var index = $('#recap_ingredient > tr').index($('#recap_ing_'+num_ingredient)[0]);
        var size = $('#recap_ingredient > tr').size();
        if(index == 0) return; // annule sur le premier élément
        var me = $('#recap_ingredient > tr').eq(index);
        var moved = $('#recap_ingredient > tr').eq(index-1);
        me.insertBefore(moved).find('#ordre_'+num_ingredient).val(index);
        var idMoved = moved.attr('id');
        var numMoved = idMoved.substr(idMoved.lastIndexOf('_')+1);
        moved.find('#ordre_'+numMoved).val(index+1);
        //$(this).removeClass('button_over');
    },
    descendre: function(num_ingredient) {
        $tone.log('Descendre: '+num_ingredient);   
        var index = $('#recap_ingredient > tr').index($('#recap_ing_'+num_ingredient)[0]);
        var size = $('#recap_ingredient > tr').size();
        if(index+1 == size) return; // annule sur le dernier élément
        var me = $('#recap_ingredient > tr').eq(index);
        var moved = $('#recap_ingredient > tr').eq(index+1);
        me.insertAfter(moved).find('#ordre_'+num_ingredient).val(index+2);
        var idMoved = moved.attr('id');
        var numMoved = idMoved.substr(idMoved.lastIndexOf('_')+1);
        moved.find('#ordre_'+numMoved).val(index+1);
        //$(this).css('border', '1px solid red').removeClass('button_over');
    }
};
