﻿var BatterieCelluleBlocFileAPI = (function () {

    var _fileEmpaquetageId;


    function AddBatterieCelluleBloc_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la batterie que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);


    }

    function UpdateBatterieCelluleBloc_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function DeleteBatterieCelluleBloc_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogVoltageRead').css(cssRead);
        $('#CatalogVoltage').css(cssEdit);

        $('#CatalogCapaciteRead').css(cssRead);
        $('#CatalogCapacite').css(cssEdit);
    }


    function ChangeCapacite() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateFloatType('#CatalogFileCapacite');
    }

    function ChangeVoltage() {
        CatalogFileAPI.StartUpdate();
    }


    function ValidateEmpaquetage(args) {
        if (args != null) {
            var modifications = args.modifications;

            if (modifications != null) {

                if (_fileEmpaquetageId != modifications.id) {
                    CatalogFileAPI.StartUpdate();
                }

                _fileEmpaquetageId = modifications.id;

                if (modifications.nom == null) {
                    $('#CatalogEmpaquetageId').html(_emptyString);
                }
                else {
                    $('#CatalogEmpaquetageId').html(modifications.nom);
                }
            }
        }
    }

    function SelectEmpaquetage(args) {
        if (_fileEmpaquetageId != args.id) {
            CatalogFileAPI.StartUpdate();
            _fileEmpaquetageId = args.id;
            $('#CatalogEmpaquetageId').html(args.name);
        }

    }


    return {
        Validate: function () {
            var assertions = new Array();

            assertions.push(ValidatorAPI.ValidateFloatType('#CatalogFileVoltage'));
            assertions.push(ValidatorAPI.ValidateFloatType('#CatalogFileCapacite'));

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {
            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.CelluleBloc.ReadMode, function () {
                    CatalogFileAPI.DisplayBatterieCelluleBlocFile(uniqueKey);
                });
            }
            else {
                CatalogFileAPI.DisplayBatterieCelluleBlocFile(uniqueKey);
            }
        },

        AddNew: function () {
            _fileEmpaquetageId = null;

            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            $('#CatalogFileCapacite').val("");
            $('#CatalogFileVoltage').val("");

            $('#CatalogEmpaquetageId').html(_emptyString);

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.CelluleBloc.EditMode, function () {
                displayEditForm(ReadStateEnum.Edit);

                $('#empaquetageEditor').css({ visibility: "visible" });
                $('#resetEmpaquetage').css({ visibility: "visible" });

                $('#CatalogFileCapacite').val(getNullValue("fileCapacite", $('#CatalogCapaciteRead').html()));
                $('#CatalogFileVoltage').val(getNullValue("filePuissance", $('#CatalogVoltageRead').html()));

            });

        },

        Read: function () {
            $('#empaquetageEditor').css({ visibility: "hidden" });
            $('#resetEmpaquetage').css({ visibility: "hidden" });

            $('#CatalogFileCapacite').val("");
            $('#CatalogFileVoltage').val("");

            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {

            var fileCode;
            var filePuissance;
            var fileEmpaquetage;
            var fileCapacite;

            if (file != null) {
                fileCode = file.ProduitApparente.Code;
                filePuissance = collectNullValue("filePuissance", file.PuissanceFr);
                fileEmpaquetage = collectNullValue("fileEmpaquetage", file.Empaquetage);
                fileCapacite = collectNullValue("fileCapacite", file.Capacite);

                _fileEmpaquetageId = file.EmpaquetageId;
            }
            else {
                filePuissance = collectNullValue("filePuissance");
                fileEmpaquetage = collectNullValue("fileEmpaquetage");
                fileCapacite = collectNullValue("fileCapacite");
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + fileCode + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Voltage */
                    '<div class=\'CatalogFileInfosTitle\'>Voltage</div>' +
                    '<div id="CatalogVoltageRead" class=\'CatalogFileInfosValue\' style=\'\'>' + filePuissance + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogVoltage" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileVoltage\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Capacité */
                    '<div class=\'CatalogFileInfosTitle\'>Capacité</div>' +
                    '<div id="CatalogCapaciteRead" class=\'CatalogFileInfosValue\' style=\'\'>' + fileCapacite + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogCapacite" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileCapacite\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Empaquetage */
                    '<div class=\'CatalogFileInfosTitle\'>Empaquetage</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'>' + fileEmpaquetage + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogEmpaquetageId" style="float: left; padding-top: 5px;">' + fileEmpaquetage + '</div>' +
                    '   <div>' +
                    '   <button id="empaquetageEditor" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button>' +
                    '   <button id="resetEmpaquetage" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-reset.png" alt="" /></button>' +
                    '   </div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');

            $('#CatalogFileCapacite').unbind('keydown');
            $('#empaquetageEditor').unbind('click');
            $('#resetEmpaquetage').unbind('click');
            $('#CatalogFileVoltage').unbind('keydown');

            $('#CatalogFileCapacite').bind('keydown', function () { ChangeCapacite(); });

            $('#CatalogFileVoltage').bind('keydown', function () { ChangeVoltage(); });

            $('#empaquetageEditor').bind('click',
                        function () {
                            Editor(MetadataFactory.Empaquetage(ValidateEmpaquetage, SelectEmpaquetage), _fileEmpaquetageId);
                        });

            $('#resetEmpaquetage').bind('click',
                        function () {
                            if (_fileEmpaquetageId != null) {
                                _fileEmpaquetageId = null;
                                $('#CatalogEmpaquetageId').html(_emptyString);
                                CatalogFileAPI.StartUpdate();
                            }
                        });

        },

        Add: function (cp, categorie, famille, manufacturierId, format, longueur, largeur, hauteur, diametre,
                                             longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                             unite, redirectionExterne) {


            var voltage = $('#CatalogFileVoltage').val();
            var capacite = $('#CatalogFileCapacite').val();

            CatalogueClient.AddBatterieCelluleBloc(cp, categorie, famille, manufacturierId, redirectionExterne, _fileEmpaquetageId, voltage, capacite, AddBatterieCelluleBloc_Complete);

        },

        Update: function (cp, manufacturierId, dimensionId, format, longueur, largeur, hauteur, diametre,
                                                   longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                                   unite, redirectionExterne) {


            var voltage = $('#CatalogFileVoltage').val();
            var capacite = $('#CatalogFileCapacite').val();

            CatalogueClient.UpdateBatterieCelluleBloc(cp, manufacturierId, redirectionExterne, _fileEmpaquetageId, voltage, capacite, UpdateBatterieCelluleBloc_Complete);

        },

        Delete: function (cp) {
            CatalogueClient.DeleteBatterieCelluleBloc(cp, DeleteBatterieCelluleBloc_Complete);
        }

    };


} ());

var BatterieDemarrageAutoFileAPI = (function () {


    function AddBatterieDemarrageAuto_Complete(resultat) {

        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la batterie que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);

    }

    function UpdateBatterieDemarrageAuto_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }
    }

    function DeleteBatterieDemarrageAuto_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogBCIRead').css(cssRead);
        $('#CatalogCARead').css(cssRead);
        $('#CatalogCCARead').css(cssRead);
        $('#CatalogCRRead').css(cssRead);
        $('#CatalogPoidsKgRead').css(cssRead);
        $('#CatalogPoidsLbsRead').css(cssRead);


        $('#CatalogBCI').css(cssEdit);
        $('#CatalogCA').css(cssEdit);
        $('#CatalogCCA').css(cssEdit);
        $('#CatalogCR').css(cssEdit);
        $('#CatalogPoidsKg').css(cssEdit);
        $('#CatalogPoidsLbs').css(cssEdit);
    }

    function ChangePoidsLbs() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsLbs');
    }

    function ChangePoidsKg() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsKg');
    }

    function ChangeCR() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileCR');
    }


    function ChangeCCA() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileCCA');
    }


    function ChangeCA() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileCA');
    }

    function ChangeBCI() {
        CatalogFileAPI.StartUpdate();
    }



    return {
        Validate: function () {
            var assertions = new Array();

            assertions.push(ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsLbs'));
            assertions.push(ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsKg'));
            assertions.push(ValidatorAPI.ValidateRequiredField('#CatalogFileBCI'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileCR'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileCCA'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileCA'));

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {
            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.DemarrageAuto.ReadMode, function () {
                    CatalogFileAPI.DisplayBatterieDemarrageAutoFile(uniqueKey);
                });
            }
            else {
                CatalogFileAPI.DisplayBatterieDemarrageAutoFile(uniqueKey);
            }

        },

        AddNew: function () {
            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            $('#CatalogFileBCI').val("");
            $('#CatalogFileCA').val("");
            $('#CatalogFileCCA').val("");
            $('#CatalogFileCR').val("");
            $('#CatalogFilePoidsKg').val("");
            $('#CatalogFilePoidsLbs').val("");

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.DemarrageAuto.EditMode, function () {
                displayEditForm(ReadStateEnum.Edit);

                $('#CatalogFileCA').val(getNullValue("fileCA", $('#CatalogCARead').html()));
                $('#CatalogFileCCA').val(getNullValue("fileCCA", $('#CatalogCCARead').html()));
                $('#CatalogFileCR').val(getNullValue("fileCR", $('#CatalogCRRead').html()));
                $('#CatalogFilePoidsKg').val(getNullValue("filePoidsKg", $('#CatalogPoidsKgRead').html()));
                $('#CatalogFilePoidsLbs').val(getNullValue("filePoidsLbs", $('#CatalogPoidsLbsRead').html()));
                $('#CatalogFileBCI').val(getNullValue("fileBCI", $('#CatalogBCIRead').html()));
            });
        },

        Read: function () {
            $('#CatalogFileBCI').val("");
            $('#CatalogFileCA').val("");
            $('#CatalogFileCCA').val("");
            $('#CatalogFileCR').val("");
            $('#CatalogFilePoidsKg').val("");
            $('#CatalogFilePoidsLbs').val("");

            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {

            var fileCode;
            var fileBCI;
            var fileCCA;
            var fileCR;
            var fileCA;
            var filePoidsLbs;
            var filePoidsKg;

            if (file != null) {
                fileCode = file.ProduitApparente.Code;
                fileBCI = collectNullValue("fileBCI", file.BCI);
                fileCCA = collectNullValue("fileCCA", file.CCA);
                fileCR = collectNullValue("fileCR", file.CR);
                fileCA = collectNullValue("fileCA", file.CA);
                filePoidsLbs = collectNullValue("filePoidsLbs", file.PoidsLbs);
                filePoidsKg = collectNullValue("filePoidsKg", file.PoidsKg);
            }
            else {
                fileBCI = collectNullValue("fileBCI");
                fileCCA = collectNullValue("fileCCA");
                fileCR = collectNullValue("fileCR");
                fileCA = collectNullValue("fileCA");
                filePoidsLbs = collectNullValue("filePoidsLbs");
                filePoidsKg = collectNullValue("filePoidsKg");
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + fileCode + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* BCI */
                    '<div class=\'CatalogFileInfosTitle\'>BCI</div>' +
                    '<div id="CatalogBCIRead" class=\'CatalogFileInfosValue\' style=\'\'>' + fileBCI + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogBCI" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileBCI\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* ampérage */
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 100px;\'>CA</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 100px;\'>CCA</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 100px;\'>CR</div>' +

                    '<div id="CatalogCARead" class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' + fileCA + '</div>' +
                    '<div id="CatalogCCARead" class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' + fileCCA + '</div>' +
                    '<div id="CatalogCRRead" class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' + fileCR + '</div>' +

                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogCA" style="float: left; min-width: 50px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileCA\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogCCA" style="float: left; min-width: 50px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileCCA\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogCR" style="float: left; min-width: 50px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileCR\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* dimensions */
                    '<div id="DimensionsPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Poids */
                    '<div class=\'CatalogFileInfosTitle\' style=\'float: left; min-width: 145px\'>Poids (LBS)</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'float: left; min-width: 145px\'>Poids (KG)</div>' +

                    '<div id="CatalogPoidsLbsRead" class=\'CatalogFileInfosValue\' style=\'float: left; min-width: 145px\'>' + filePoidsLbs + '</div>' +
                    '<div id="CatalogPoidsKgRead" class=\'CatalogFileInfosValue\' style=\'float: left; min-width: 145px\'>' + filePoidsKg + '</div>' +

                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogPoidsLbs" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFilePoidsLbs\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogPoidsKg" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFilePoidsKg\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');

            $('#CatalogFilePoidsKg').unbind('keydown');
            $('#CatalogFilePoidsLbs').unbind('keydown');
            $('#CatalogFileCR').unbind('keydown');
            $('#CatalogFileCCA').unbind('keydown');
            $('#CatalogFileCA').unbind('keydown');
            $('#CatalogFileBCI').unbind('keydown');

            $('#CatalogFilePoidsKg').bind('keydown', function () { ChangePoidsKg(); });
            $('#CatalogFilePoidsLbs').bind('keydown', function () { ChangePoidsLbs(); });
            $('#CatalogFileCR').bind('keydown', function () { ChangeCR(); });
            $('#CatalogFileCCA').bind('keydown', function () { ChangeCCA(); });
            $('#CatalogFileCA').bind('keydown', function () { ChangeCA(); });
            $('#CatalogFileBCI').bind('keydown', function () { ChangeBCI(); });
        },

        Add: function (cp, categorie, famille, manufacturier, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {


            var dimensions = {
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            var CA = $('#CatalogFileCA').val();
            var CCA = $('#CatalogFileCCA').val();
            var CR = $('#CatalogFileCR').val();
            var poidsKg = $('#CatalogFilePoidsKg').val();
            var poidsLbs = $('#CatalogFilePoidsLbs').val();
            var BCI = $('#CatalogFileBCI').val();

            CatalogueClient.AddBatterieDemarrageAuto(cp, categorie, famille, manufacturier, dimensions, dimensionsReelles, redirectionExterne, BCI, CA, CCA, CR, poidsLbs, poidsKg, AddBatterieDemarrageAuto_Complete);

        },

        Update: function (cp, manufacturier, dimensionId, format, longueur, largeur, hauteur, diametre,
                                                   longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                                   unite, redirectionExterne) {

            var dimensions = {
                dimId: dimensionId,
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            var CA = $('#CatalogFileCA').val();
            var CCA = $('#CatalogFileCCA').val();
            var CR = $('#CatalogFileCR').val();
            var poidsKg = $('#CatalogFilePoidsKg').val();
            var poidsLbs = $('#CatalogFilePoidsLbs').val();
            var BCI = $('#CatalogFileBCI').val();

            CatalogueClient.UpdateBatterieDemarrageAuto(cp, manufacturier, dimensions, dimensionsReelles, redirectionExterne, BCI, CA, CCA, CR, poidsLbs, poidsKg, UpdateBatterieDemarrageAuto_Complete);

        },

        Delete: function (cp) {
            CatalogueClient.DeleteBatterieDemarrageAuto(cp, DeleteBatterieDemarrageAuto_Complete);
        }

    };


} ());

var BatterieDemarrageMarineFileAPI = (function () {


    function AddBatterieDemarrageMarine_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la batterie que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);

    }

    function UpdateBatterieDemarrageMarine_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function DeleteBatterieDemarrageMarine_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogBCIRead').css(cssRead);
        $('#CatalogMCARead').css(cssRead);
        $('#CatalogAHRead').css(cssRead);
        $('#CatalogCRRead').css(cssRead);
        $('#CatalogPoidsKgRead').css(cssRead);
        $('#CatalogPoidsLbsRead').css(cssRead);


        $('#CatalogBCI').css(cssEdit);
        $('#CatalogMCA').css(cssEdit);
        $('#CatalogAH').css(cssEdit);
        $('#CatalogCR').css(cssEdit);
        $('#CatalogPoidsKg').css(cssEdit);
        $('#CatalogPoidsLbs').css(cssEdit);
    }

    function ChangePoidsLbs() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsLbs');
    }

    function ChangePoidsKg() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsKg');
    }

    function ChangeCR() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileCR');
    }


    function ChangeMCA() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileMCA');
    }


    function ChangeAH() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileAH');
    }

    function ChangeBCI() {
        CatalogFileAPI.StartUpdate();
    }



    return {
        Validate: function () {
            var assertions = new Array();

            assertions.push(ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsLbs'));
            assertions.push(ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsKg'));
            assertions.push(ValidatorAPI.ValidateRequiredField('#CatalogFileBCI'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileCR'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileMCA'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileAH'));

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {
            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.DemarrageMarine.ReadMode, function () {
                    CatalogFileAPI.DisplayBatterieDemarrageMarineFile(uniqueKey);
                });

            }
            else {
                CatalogFileAPI.DisplayBatterieDemarrageMarineFile(uniqueKey);
            }

        },

        AddNew: function () {
            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            $('#CatalogFileBCI').val("");
            $('#CatalogFileMCA').val("");
            $('#CatalogFileCR').val("");
            $('#CatalogFileAH').val("");
            $('#CatalogFilePoidsKg').val("");
            $('#CatalogFilePoidsLbs').val("");

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.DemarrageMarine.EditMode, function () {
                displayEditForm(ReadStateEnum.Edit);

                $('#CatalogFileMCA').val(getNullValue("fileMCA", $('#CatalogMCARead').html()));
                $('#CatalogFileCR').val(getNullValue("fileCR", $('#CatalogCRRead').html()));
                $('#CatalogFileAH').val(getNullValue("fileAH", $('#CatalogAHRead').html()));
                $('#CatalogFilePoidsKg').val(getNullValue("filePoidsKg", $('#CatalogPoidsKgRead').html()));
                $('#CatalogFilePoidsLbs').val(getNullValue("filePoidsLbs", $('#CatalogPoidsLbsRead').html()));
                $('#CatalogFileBCI').val(getNullValue("fileBCI", $('#CatalogBCIRead').html()));
            });
        },

        Read: function () {
            $('#CatalogFileBCI').val("");
            $('#CatalogFileAH').val("");
            $('#CatalogFileMCA').val("");
            $('#CatalogFileCR').val("");
            $('#CatalogFilePoidsKg').val("");
            $('#CatalogFilePoidsLbs').val("");

            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {
            var fileCode;
            var fileBCI;
            var fileMCA;
            var fileCR;
            var fileAH;
            var filePoidsLbs;
            var filePoidsKg;

            if (file != null) {
                fileCode = file.ProduitApparente.Code;
                fileBCI = collectNullValue("fileBCI", file.BCI);
                fileMCA = collectNullValue("fileMCA", file.MCA);
                fileCR = collectNullValue("fileCR", file.CR);
                fileAH = collectNullValue("fileCA", file.AH);
                filePoidsLbs = collectNullValue("filePoidsLbs", file.PoidsLbs);
                filePoidsKg = collectNullValue("filePoidsKg", file.PoidsKg);
            }
            else {
                fileBCI = collectNullValue("fileBCI");
                fileMCA = collectNullValue("fileMCA");
                fileCR = collectNullValue("fileCR");
                fileAH = collectNullValue("fileCA");
                filePoidsLbs = collectNullValue("filePoidsLbs");
                filePoidsKg = collectNullValue("filePoidsKg");
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + fileCode + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* BCI */
                    '<div class=\'CatalogFileInfosTitle\'>BCI</div>' +
                    '<div id="CatalogBCIRead" class=\'CatalogFileInfosValue\' style=\'\'>' + fileBCI + '</div>' +
                    '<div class=\'CatalogFileInfosValue\' >' +
                    '   <div id="CatalogBCI" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileBCI\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* ampérage */
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 100px;\'>MCA</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 100px;\'>CR</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 100px;\'>AH</div>' +

                    '<div id="CatalogMCARead" class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' + fileMCA + '</div>' +
                    '<div id="CatalogCRRead" class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' + fileCR + '</div>' +
                    '<div id="CatalogAHRead" class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' + fileAH + '</div>' +

                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogMCA" style="float: left; min-width: 100px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileMCA\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogCR" style="float: left; min-width: 100px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileCR\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 100px;\'>' +
                    '   <div id="CatalogAH" style="float: left; min-width: 100px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileAH\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* dimensions */
                    '<div id="DimensionsPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Poids */
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 145px\'>Poids (LBS)</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 145px\'>Poids (KG)</div>' +

                    '<div id="CatalogPoidsLbsRead" class=\'CatalogFileInfosValue\' style=\'min-width: 145px\'>' + filePoidsLbs + '</div>' +
                    '<div id="CatalogPoidsKgRead" class=\'CatalogFileInfosValue\' style=\'min-width: 145px\'>' + filePoidsKg + '</div>' +

                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'min-width: 145px\'>' +
                    '   <div id="CatalogPoidsLbs" style="min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFilePoidsLbs\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'min-width: 145px\'>' +
                    '   <div id="CatalogPoidsKg" style="min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFilePoidsKg\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');

            $('#CatalogFilePoidsKg').unbind('keydown');
            $('#CatalogFilePoidsLbs').unbind('keydown');
            $('#CatalogFileMCA').unbind('keydown');
            $('#CatalogFileCR').unbind('keydown');
            $('#CatalogFileAH').unbind('keydown');
            $('#CatalogFileBCI').unbind('keydown');

            $('#CatalogFilePoidsKg').bind('keydown', function () { ChangePoidsKg(); });
            $('#CatalogFilePoidsLbs').bind('keydown', function () { ChangePoidsLbs(); });
            $('#CatalogFileMCA').bind('keydown', function () { ChangeMCA(); });
            $('#CatalogFileCR').bind('keydown', function () { ChangeCR(); });
            $('#CatalogFileAH').bind('keydown', function () { ChangeAH(); });
            $('#CatalogFileBCI').bind('keydown', function () { ChangeBCI(); });
        },

        Add: function (cp, categorie, famille, manufacturier, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var dimensions = {
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            var MCA = $('#CatalogFileMCA').val();
            var CR = $('#CatalogFileCR').val();
            var AH = $('#CatalogFileAH').val();
            var poidsKg = $('#CatalogFilePoidsKg').val();
            var poidsLbs = $('#CatalogFilePoidsLbs').val();
            var BCI = $('#CatalogFileBCI').val();

            CatalogueClient.AddBatterieDemarrageMarine(cp, categorie, famille, manufacturier, dimensions, dimensionsReelles, redirectionExterne, BCI, MCA, CR, AH, poidsLbs, poidsKg, AddBatterieDemarrageMarine_Complete);

        },

        Update: function (cp, manufacturier, dimensionId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var dimensions = {
                dimId: dimensionId,
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };


            var MCA = $('#CatalogFileMCA').val();
            var CR = $('#CatalogFileCR').val();
            var AH = $('#CatalogFileAH').val();
            var poidsKg = $('#CatalogFilePoidsKg').val();
            var poidsLbs = $('#CatalogFilePoidsLbs').val();
            var BCI = $('#CatalogFileBCI').val();

            CatalogueClient.UpdateBatterieDemarrageMarine(cp, manufacturier, dimensions, dimensionsReelles, redirectionExterne, BCI, MCA, CR, AH, poidsLbs, poidsKg, UpdateBatterieDemarrageMarine_Complete);

        },

        Delete: function (cp) {
            CatalogueClient.DeleteBatterieDemarrageMarine(cp, DeleteBatterieDemarrageMarine_Complete);
        }

    };


} ());

var BatterieIndustrielleFileAPI = (function () {

    function AddBatterieIndustrielle_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la batterie que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);

    }

    function UpdateBatterieIndustrielle_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function DeleteBatterieIndustrielle_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }
    }

    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogCR25AmpRead').css(cssRead);
        $('#CatalogCR75AmpRead').css(cssRead);
        $('#CatalogPoidsKgRead').css(cssRead);
        $('#CatalogPoidsLbsRead').css(cssRead);
        $('#CatalogRendement5hRead').css(cssRead);
        $('#CatalogRendement20hRead').css(cssRead);

        $('#CatalogCR25Amp').css(cssEdit);
        $('#CatalogCR75Amp').css(cssEdit);
        $('#CatalogPoidsKg').css(cssEdit);
        $('#CatalogPoidsLbs').css(cssEdit);
        $('#CatalogRendement5h').css(cssEdit);
        $('#CatalogRendement20h').css(cssEdit);
    }

    function ChangeCR25Amp() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateNullableShortType('#CatalogFileCR25Amp');
    }

    function ChangeCR75Amp() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateNullableShortType('#CatalogFileCR75Amp');
    }

    function ChangeRendement5h() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileRendement5h');
    }

    function ChangeRendement20h() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateShortType('#CatalogFileRendement20h');
    }

    function ChangePoidsLbs() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateIntType('#CatalogFilePoidsLbs');
    }

    function ChangePoidsKg() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateIntType('#CatalogFilePoidsKg');
    }


    return {
        Validate: function () {
            var assertions = new Array();

            assertions.push(ValidatorAPI.ValidateNullableShortType('#CatalogFileCR25Amp'));
            assertions.push(ValidatorAPI.ValidateNullableShortType('#CatalogFileCR75Amp'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileRendement5h'));
            assertions.push(ValidatorAPI.ValidateShortType('#CatalogFileRendement20h'));
            assertions.push(ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsLbs'));
            assertions.push(ValidatorAPI.ValidateNullableIntType('#CatalogFilePoidsKg'));

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {
            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.Industrielle.ReadMode, function () {
                    CatalogFileAPI.DisplayBatterieIndustrielleFile(uniqueKey);
                });

            }
            else {
                CatalogFileAPI.DisplayBatterieIndustrielleFile(uniqueKey);
            }


        },

        AddNew: function () {

            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            $('#CatalogFileCR25Amp').val("");
            $('#CatalogFileCR75Amp').val("");
            $('#CatalogFileRendement5h').val("");
            $('#CatalogFileRendement20h').val("");
            $('#CatalogFilePoidsLbs').val("");
            $('#CatalogFilePoidsKg').val("");

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.Industrielle.EditMode, function () {
                displayEditForm(ReadStateEnum.Edit);

                $('#CatalogFileCR25Amp').val(getNullValue("fileCR25Amp", $('#CatalogCR25AmpRead').html()));
                $('#CatalogFileCR75Amp').val(getNullValue("fileCR75Amp", $('#CatalogCR75AmpRead').html()));
                $('#CatalogFileRendement5h').val(getNullValue("fileRendement5h", $('#CatalogRendement5hRead').html()));
                $('#CatalogFileRendement20h').val(getNullValue("fileRendement20h", $('#CatalogRendement20hRead').html()));
                $('#CatalogFilePoidsLbs').val(getNullValue("filePoidsLbs", $('#CatalogPoidsLbsRead').html()));
                $('#CatalogFilePoidsKg').val(getNullValue("filePoidsKg", $('#CatalogPoidsKgRead').html()));
            });

        },

        Read: function () {
            $('#CatalogFileCR25Amp').val("");
            $('#CatalogFileCR75Amp').val("");
            $('#CatalogFileRendement5h').val("");
            $('#CatalogFileRendement20h').val("");
            $('#CatalogFilePoidsLbs').val("");
            $('#CatalogFilePoidsKg').val("");

            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {

            var fileCode;
            var fileCR25Amp;
            var fileCR75Amp;
            var fileRendement5h;
            var fileRendement20h;
            var filePoidsLbs;
            var filePoidsKg;

            CatalogFileAPI.SetOptionalDimensions(false);

            if (file != null) {
                fileCode = file.ProduitApparente.Code;
                fileCR25Amp = collectNullValue("fileCR25Amp", file.CR25Amp);
                fileCR75Amp = collectNullValue("fileCR75Amp", file.CR75Amp);
                fileRendement5h = collectNullValue("fileRendement5h", file.Rendement5h);
                fileRendement20h = collectNullValue("fileRendement20h", file.Rendement20h);
                filePoidsLbs = collectNullValue("filePoidsLbs", file.PoidsLbs);
                filePoidsKg = collectNullValue("filePoidsKg", file.PoidsKg);
            }
            else {
                fileCR25Amp = collectNullValue("fileCR25Amp");
                fileCR75Amp = collectNullValue("fileCR75Amp");
                fileRendement5h = collectNullValue("fileRendement5h");
                fileRendement20h = collectNullValue("fileRendement20h");
                filePoidsLbs = collectNullValue("filePoidsLbs");
                filePoidsKg = collectNullValue("filePoidsKg");
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + fileCode + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Manufacturiers */
                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Catégories 
            '<div id="CategoriesPlaceHolder">' +
            '</div>' +
            '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +
            */
            /* ampérage */
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 145px; float: left;\'>CR (25 amp)</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 145px; float: left;\'>CR (75 amp)</div>' +

                    '<div id="CatalogCR25AmpRead" class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' + fileCR25Amp + '</div>' +
                    '<div id="CatalogCR75AmpRead" class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' + fileCR75Amp + '</div>' +

                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' +
                    '   <div id="CatalogCR25Amp" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none;"><input id=\'CatalogFileCR25Amp\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' +
                    '   <div id="CatalogCR75Amp" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none;"><input id=\'CatalogFileCR75Amp\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +


                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 145px; float: left;\'>Rendement (5h)</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'min-width: 145px; float: left;\'>Rendement (20h)</div>' +

                    '<div id="CatalogRendement5hRead" class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' + fileRendement5h + '</div>' +
                    '<div id="CatalogRendement20hRead" class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' + fileRendement20h + '</div>' +

                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' +
                    '   <div id="CatalogRendement5h" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileRendement5h\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'min-width: 145px; float: left;\'>' +
                    '   <div id="CatalogRendement20h" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFileRendement20h\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +


            /* Dimensions */
                    '<div id="DimensionsPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Poids */
                    '<div class=\'CatalogFileInfosTitle\' style=\'float: left; min-width: 145px\'>Poids (LBS)</div>' +
                    '<div class=\'CatalogFileInfosTitle\' style=\'float: left; min-width: 145px\'>Poids (KG)</div>' +

                    '<div id="CatalogPoidsLbsRead" class=\'CatalogFileInfosValue\' style=\'float: left; min-width: 145px\'>' + filePoidsLbs + '</div>' +
                    '<div id="CatalogPoidsKgRead" class=\'CatalogFileInfosValue\' style=\'float: left; min-width: 145px\'>' + filePoidsKg + '</div>' +

                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'float: left; min-width: 145px\'>' +
                    '   <div id="CatalogPoidsLbs" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFilePoidsLbs\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'float: left; min-width: 145px\'>' +
                    '   <div id="CatalogPoidsKg" style="float: left; min-width: 145px; padding-top: 5px; visibility: hidden; display: none"><input id=\'CatalogFilePoidsKg\' type=\'text\' value=\'\' style=\'width: 70px\' /></div>' +
                    '</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');


            $('#CatalogFileCR25Amp').unbind('keydown');
            $('#CatalogFileCR75Amp').unbind('keydown');
            $('#CatalogFileRendement5h').unbind('keydown');
            $('#CatalogFileRendement20h').unbind('keydown');
            $('#CatalogFilePoidsKg').unbind('keydown');
            $('#CatalogFilePoidsLbs').unbind('keydown');

            $('#CatalogFileCR25Amp').bind('keydown', function () { ChangeCR25Amp(); });
            $('#CatalogFileCR75Amp').bind('keydown', function () { ChangeCR75Amp(); });
            $('#CatalogFileRendement5h').bind('keydown', function () { ChangeRendement5h(); });
            $('#CatalogFileRendement20h').bind('keydown', function () { ChangeRendement20h(); });
            $('#CatalogFilePoidsKg').bind('keydown', function () { ChangePoidsKg(); });
            $('#CatalogFilePoidsLbs').bind('keydown', function () { ChangePoidsLbs(); });

        },

        Add: function (cp, categorie, famille, manufacturier, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var CR25Amp = $('#CatalogFileCR25Amp').val();
            var CR75Amp = $('#CatalogFileCR75Amp').val();
            var rendement5h = $('#CatalogFileRendement5h').val();
            var rendement20h = $('#CatalogFileRendement20h').val();
            var poidsKg = $('#CatalogFilePoidsKg').val();
            var poidsLbs = $('#CatalogFilePoidsLbs').val();

            var dimensions = {
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            CatalogueClient.AddBatterieIndustrielle(cp, categorie, famille, manufacturier, dimensions, dimensionsReelles, redirectionExterne, null, CR25Amp, CR75Amp, rendement20h, rendement5h, poidsLbs, poidsKg, AddBatterieIndustrielle_Complete);

        },

        Update: function (cp, manufacturier, dimensionId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var CR25Amp = $('#CatalogFileCR25Amp').val();
            var CR75Amp = $('#CatalogFileCR75Amp').val();
            var rendement5h = $('#CatalogFileRendement5h').val();
            var rendement20h = $('#CatalogFileRendement20h').val();
            var poidsKg = $('#CatalogFilePoidsKg').val();
            var poidsLbs = $('#CatalogFilePoidsLbs').val();

            var dimensions = {
                dimId: dimensionId,
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            CatalogueClient.UpdateBatterieIndustrielle(cp, manufacturier, dimensions, dimensionsReelles, redirectionExterne, null, CR25Amp, CR75Amp, rendement20h, rendement5h, poidsLbs, poidsKg, UpdateBatterieIndustrielle_Complete);
        },

        Delete: function (cp) {
            CatalogueClient.DeleteBatterieIndustrielle(cp, DeleteBatterieIndustrielle_Complete);
        }

    };


} ());

var BatterieMotoriseFileAPI = (function () {

    function AddBatterieMotorise_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la batterie que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);

    }

    function UpdateBatterieMotorise_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function DeleteBatterieMotorise_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {

    }

    return {
        Validate: function () {
            var assertions = new Array();

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {

            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.Motorise.ReadMode, function () {
                    CatalogFileAPI.DisplayBatterieMotoriseFile(uniqueKey);
                });

            }
            else {
                CatalogFileAPI.DisplayBatterieMotoriseFile(uniqueKey);
            }



        },

        AddNew: function () {
            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.Motorise.EditMode, function () {
                displayEditForm(ReadStateEnum.Edit);
            });
        },

        Read: function () {
            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {

            var fileCode;

            CatalogFileAPI.SetOptionalManufacturier(false);

            if (file != null) {
                fileCode = file.ProduitApparente.Code;
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + fileCode + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Manufacturiers */
                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Catégories */
                    '<div id="CategoriesPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');


        },

        Add: function (cp, categorie, famille, manufacturierId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            CatalogueClient.AddBatterieMotorise(cp, categorie, famille, manufacturierId, redirectionExterne, AddBatterieMotorise_Complete);

        },

        Update: function (cp, manufacturierId, dimensionId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            CatalogueClient.UpdateBatterieMotorise(cp, manufacturierId, redirectionExterne, UpdateBatterieMotorise_Complete);
        },

        Delete: function (cp) {
            CatalogueClient.DeleteBatterieMotorise(cp, DeleteBatterieMotorise_Complete);
        }

    };


} ());

var BatterieScelleeAcideFileAPI = (function () {

    var _fileEmpaquetageId;

    function AddBatterieScelleeAcide_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la batterie que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);

    }

    function UpdateBatterieScelleeAcide_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function DeleteBatterieScelleeAcide_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogVoltageRead').css(cssRead);
        $('#CatalogVoltage').css(cssEdit);


        $('#CatalogCapaciteRead').css(cssRead);
        $('#CatalogCapacite').css(cssEdit);

        $('#CatalogTerminalRead').css(cssRead);
        $('#CatalogTerminal').css(cssEdit);

    }

    function ChangeCapacite() {
        CatalogFileAPI.StartUpdate();
        return ValidatorAPI.ValidateFloatType('#CatalogFileCapacite');
    }

    function ChangeTerminal() {
        CatalogFileAPI.StartUpdate();
    }

    function ChangeVoltage() {
        CatalogFileAPI.StartUpdate();
    }


    function ValidateEmpaquetage(args) {
        if (args != null) {
            var modifications = args.modifications;

            if (modifications != null) {

                if (_fileEmpaquetageId != modifications.id) {
                    CatalogFileAPI.StartUpdate();
                }

                _fileEmpaquetageId = modifications.id;

                if (modifications.nom == null) {
                    $('#CatalogEmpaquetageId').html(_emptyString);
                }
                else {
                    $('#CatalogEmpaquetageId').html(modifications.nom);
                }
            }
        }
    }

    function SelectEmpaquetage(args) {
        if (_fileEmpaquetageId != args.id) {
            CatalogFileAPI.StartUpdate();
            _fileEmpaquetageId = args.id;
            $('#CatalogEmpaquetageId').html(args.name);
        }

    }

    function SelectVoltage(args) {
        if (_fileVoltageId != args.id) {
            CatalogFileAPI.StartUpdate();
            _fileVoltageId = args.id;
            $('#CatalogVoltageId').html(args.name);
        }
    }


    return {
        Validate: function () {
            var assertions = new Array();

            assertions.push(ValidatorAPI.ValidateFloatType('#CatalogFileCapacite'));
            assertions.push(ValidatorAPI.ValidateRequiredField('#CatalogFileTerminal'));
            assertions.push(ValidatorAPI.ValidateRequiredField('#CatalogFileVoltage'));


            //            assertions.push(ValidatorAPI.ValidateFloatType('#CatalogFileEmpaquetage'));

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {

            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.ScelleeAcide.ReadMode, function () {
                    CatalogFileAPI.DisplayBatterieScelleeAcideFile(uniqueKey);
                });

            }
            else {
                CatalogFileAPI.DisplayBatterieScelleeAcideFile(uniqueKey);
            }

        },

        AddNew: function () {
            _fileVoltageId = null;
            _fileEmpaquetageId = null;

            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            $('#CatalogFileCapacite').val("");
            $('#CatalogFileTerminal').val("");
            $('#CatalogFileVoltage').val("");

            $('#CatalogEmpaquetageId').html(_emptyString);

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {

            CatalogFileAPI.ResizeCatalogFile(EditorHeight.ScelleeAcide.EditMode, function () {

                displayEditForm(ReadStateEnum.Edit);

                $('#empaquetageEditor').css({ visibility: "visible" });
                $('#resetEmpaquetage').css({ visibility: "visible" });

                $('#CatalogFileCapacite').val(getNullValue("fileCapacite", $('#CatalogCapaciteRead').html()));
                $('#CatalogFileTerminal').val(getNullValue("fileTerminal", $('#CatalogTerminalRead').html()));
                $('#CatalogFileVoltage').val(getNullValue("filePuissance", $('#CatalogVoltageRead').html()));

            });
        },

        Read: function () {
            $('#empaquetageEditor').css({ visibility: "hidden" });
            $('#resetEmpaquetage').css({ visibility: "hidden" });

            $('#CatalogFileCapacite').val("");
            $('#CatalogFileTerminal').val("");
            $('#CatalogFileVoltage').val("");

            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {

            var fileCode;
            var filePuissance;
            var fileEmpaquetage;
            var fileCapacite;
            var fileTerminal;
            var fileDimensionFormatee;

            CatalogFileAPI.SetOptionalManufacturier(false);


            if (file != null) {
                fileCode = file.ProduitApparente.Code;
                filePuissance = collectNullValue("filePuissance", file.PuissanceFr);
                fileEmpaquetage = collectNullValue("fileEmpaquetage", file.Empaquetage);
                fileCapacite = collectNullValue("fileCapacite", file.Capacite);
                fileTerminal = collectNullValue("fileTerminal", file.Terminal);
                fileDimensionFormatee = file.DimensionsMM.DimensionFormatee;

                _fileVoltageId = file.PuissanceId;
                _fileEmpaquetageId = file.EmpaquetageId;
            }
            else {
                filePuissance = collectNullValue("filePuissance");
                fileEmpaquetage = collectNullValue("fileEmpaquetage");
                fileCapacite = collectNullValue("fileCapacite");
                fileTerminal = collectNullValue("fileTerminal");
                fileDimensionFormatee = _emptyString;
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + fileCode + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Manufacturiers */
                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Catégories */
                    '<div id="CategoriesPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Voltage */
                    '<div class=\'CatalogFileInfosTitle\'>Voltage</div>' +
                    '<div id="CatalogVoltageRead" class=\'CatalogFileInfosValue\' style=\'\'>' + filePuissance + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogVoltage" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileVoltage\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Capacité */
                    '<div class=\'CatalogFileInfosTitle\'>Capacité</div>' +
                    '<div id="CatalogCapaciteRead" class=\'CatalogFileInfosValue\' style=\'\'>' + fileCapacite + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogCapacite" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileCapacite\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Empaquetage */
                    '<div class=\'CatalogFileInfosTitle\'>Empaquetage</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'>' + fileEmpaquetage + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogEmpaquetageId" style="float: left; padding-top: 5px;">' + fileEmpaquetage + '</div>' +
                    '   <div>' +
                    '   <button id="empaquetageEditor" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button>' +
                    '   <button id="resetEmpaquetage" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-reset.png" alt="" /></button>' +
                    '   </div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +



            /* Terminal */
                    '<div class=\'CatalogFileInfosTitle\'>Terminal</div>' +
                    '<div id="CatalogTerminalRead" class=\'CatalogFileInfosValue\' style=\'\'>' + fileTerminal + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogTerminal" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileTerminal\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Dimensions */
                    '<div id="DimensionsPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Dimensions (MM) */
            '<div class=\'CatalogFileInfosTitle\'>Dimensions (MM)</div>' +
                    '<div id="CatalogTerminalRead" class=\'CatalogFileInfosValue\' style=\'\'>' + fileDimensionFormatee + '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');


            $('#CatalogFileCapacite').unbind('keydown');
            $('#CatalogFileTerminal').unbind('keydown');
            $('#empaquetageEditor').unbind('click');
            $('#resetEmpaquetage').unbind('click');

            $('#CatalogFileCapacite').bind('keydown', function () { ChangeCapacite(); });
            $('#CatalogFileTerminal').bind('keydown', function () { ChangeTerminal(); });

            $('#empaquetageEditor').bind('click',
                        function () {
                            Editor(MetadataFactory.Empaquetage(ValidateEmpaquetage, SelectEmpaquetage), _fileEmpaquetageId);
                        });

            $('#resetEmpaquetage').bind('click',
                        function () {
                            if (_fileEmpaquetageId != null) {
                                _fileEmpaquetageId = null;
                                $('#CatalogEmpaquetageId').html(_emptyString);
                                CatalogFileAPI.StartUpdate();
                            }
                        });

            $('#CatalogFileVoltage').unbind('keydown');
            $('#CatalogFileVoltage').bind('keydown', function () { ChangeVoltage(); });

        },

        Add: function (cp, categorie, famille, manufacturier, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var voltage = $('#CatalogFileVoltage').val();
            var capacite = $('#CatalogFileCapacite').val();
            var terminal = $('#CatalogFileTerminal').val();

            var dimensions = {
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            CatalogueClient.AddBatterieScelleeAcide(cp, categorie, famille, manufacturier, dimensions, dimensionsReelles, redirectionExterne, _fileEmpaquetageId, voltage, capacite, terminal, AddBatterieScelleeAcide_Complete);

        },

        Update: function (cp, manufacturier, dimensionId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var voltage = $('#CatalogFileVoltage').val();
            var capacite = $('#CatalogFileCapacite').val();
            var terminal = $('#CatalogFileTerminal').val();

            var dimensions = {
                dimId: dimensionId,
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            CatalogueClient.UpdateBatterieScelleeAcide(cp, manufacturier, dimensions, dimensionsReelles, redirectionExterne, _fileEmpaquetageId, voltage, capacite, terminal, UpdateBatterieScelleeAcide_Complete);

        },

        Delete: function (cp) {
            CatalogueClient.DeleteBatterieScelleeAcide(cp, DeleteBatterieScelleeAcide_Complete);
        }

    };


} ());

var ChargeurFileAPI = (function () {

    function AddChargeur_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce du chargeur que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);
    }

    function UpdateChargeur_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function DeleteChargeur_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function ChangeVoltage() {
        CatalogFileAPI.StartUpdate();
    }


    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogVoltageRead').css(cssRead);
        $('#CatalogVoltage').css(cssEdit);

        $('#CatalogDescriptionRead').css(cssRead);
        $('#CatalogDescription').css(cssEdit);

        $('#CatalogAmperageRead').css(cssRead);
        $('#CatalogAmperage').css(cssEdit);

        $('#CatalogApplicationRecommandeeRead').css(cssRead);
        $('#CatalogApplicationRecommandee').css(cssEdit);

    }

    return {
        Validate: function () {
            return true;
        },

        Refresh: function (uniqueKey, keepSize) {
            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.Chargeur.ReadMode, function () {
                    CatalogFileAPI.DisplayChargeurFile(uniqueKey);
                });

            }
            else {
                CatalogFileAPI.DisplayChargeurFile(uniqueKey);
            }
        },

        AddNew: function () {

            $('#CatalogFileVoltage').val("");

            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            $('#CatalogFileAmperage').val("");
            $('#CatalogFileDescription').val("");
            $('#CatalogFileApplicationRecommandee').val("");

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.Chargeur.EditMode, function () {
                displayEditForm(ReadStateEnum.Edit);

                $('#CatalogFileAmperage').val(getNullValue("amperage", $('#CatalogAmperageRead').html()));
                $('#CatalogFileDescription').val(getNullValue("description", $('#CatalogDescriptionRead').html()));
                $('#CatalogFileApplicationRecommandee').val(getNullValue("applicationRecommandee", $('#CatalogApplicationRecommandeeRead').html()));

                $('#CatalogFileVoltage').val(getNullValue("voltage", $('#CatalogVoltageRead').html()));

            });

        },

        Read: function () {
            $('#CatalogFileAmperage').val("");
            $('#CatalogFileDescription').val("");
            $('#CatalogFileApplicationRecommandee').val("");
            $('#CatalogFileVoltage').val("");

            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {

            var code;
            var amperage;
            var voltage;
            var applicationRecommandee;
            var description;

            if (file != null) {
                _fileVoltageId = file.PuissanceId;

                code = file.ProduitApparente.Code;
                amperage = collectNullValue("amperage", file.Amperage);
                voltage = collectNullValue("voltage", file.Voltage);
                applicationRecommandee = collectNullValue("applicationRecommandee", file.ApplicationRecommandee);
                description = collectNullValue("description", file.ProduitApparente.DescriptionFr);
            }
            else {
                amperage = collectNullValue("amperage");
                voltage = collectNullValue("voltage");
                applicationRecommandee = collectNullValue("applicationRecommandee");
                description = collectNullValue("description");
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + code + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Catégories */
                    '<div id="CategoriesPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Voltage */
                    '<div class=\'CatalogFileInfosTitle\'>Voltage</div>' +
                    '<div id="CatalogVoltageRead" class=\'CatalogFileInfosValue\' style=\'\'>' + voltage + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogVoltage" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileVoltage\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +

            /* Ampérage */
                    '<div class=\'CatalogFileInfosTitle\'>Ampérage</div>' +
                    '<div id="CatalogAmperageRead" class=\'CatalogFileInfosValue\' style=\'\'>' + amperage + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogAmperage" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileAmperage\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Application recommandée */
                    '<div class=\'CatalogFileInfosTitle\'>Application recommandée</div>' +
                    '<div id="CatalogApplicationRecommandeeRead" class=\'CatalogFileInfosValue\' style=\'\'>' + applicationRecommandee + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogApplicationRecommandee" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileApplicationRecommandee\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Description */
                    '<div class=\'CatalogFileInfosTitle\'>Description</div>' +
                    '<div id="CatalogDescriptionRead" class=\'CatalogFileInfosValue\' style=\'\'>' + description + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogDescription" style="visibility: hidden; display: none; padding-top: 5px;"><textarea id=\'CatalogFileDescription\' style=\'font-family: arial; font-size: 11px\'></textarea></div>' +
                    '</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');

            $('#CatalogFileVoltage').unbind('keydown');
            $('#CatalogFileVoltage').bind('keydown', function () { ChangeVoltage(); });


        },

        Add: function (cp, categorie, famille, manufacturier, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var voltage = $('#CatalogFileVoltage').val();
            var description = $('#CatalogFileDescription').val();

            var amperage = $('#CatalogFileAmperage').val();
            var applicationRecommandee = $('#CatalogFileApplicationRecommandee').val();

            CatalogueClient.AddChargeur(cp, famille, manufacturier, redirectionExterne, voltage, description, amperage, applicationRecommandee, AddChargeur_Complete);

        },

        Update: function (cp, manufacturier, dimensionId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var voltage = $('#CatalogFileVoltage').val();
            var description = $('#CatalogFileDescription').val();
            var amperage = $('#CatalogFileAmperage').val();
            var applicationRecommandee = $('#CatalogFileApplicationRecommandee').val();

            CatalogueClient.UpdateChargeur(cp, manufacturier, redirectionExterne, voltage, description, amperage, applicationRecommandee, UpdateChargeur_Complete);
        },

        Delete: function (cp) {
            CatalogueClient.DeleteChargeur(cp, DeleteChargeur_Complete);
        }

    };


} ());

var PileFileAPI = (function () {

    var _fileEmpaquetageId;

    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogVoltageRead').css(cssRead);
        $('#CatalogVoltage').css(cssEdit);
    }



    function ValidateEmpaquetage(args) {
        if (args != null) {
            var modifications = args.modifications;

            if (modifications != null) {

                if (_fileEmpaquetageId != modifications.id) {
                    CatalogFileAPI.StartUpdate();
                }

                _fileEmpaquetageId = modifications.id;

                if (modifications.nom == null) {
                    $('#CatalogEmpaquetageId').html(_emptyString);
                }
                else {
                    $('#CatalogEmpaquetageId').html(modifications.nom);
                }
            }
        }
    }

    function SelectEmpaquetage(args) {
        if (_fileEmpaquetageId != args.id) {
            CatalogFileAPI.StartUpdate();
            _fileEmpaquetageId = args.id;
            $('#CatalogEmpaquetageId').html(args.name);
        }

    }

    function ChangeVoltage() {
        CatalogFileAPI.StartUpdate();
    }


    function AddPile_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la pile que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);
    }

    function UpdatePile_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    function DeletePile_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    return {
        Validate: function () {
            var assertions = new Array();

            assertions.push(ValidatorAPI.ValidateRequiredField('#CatalogFileVoltage'));

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {
            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.Pile.ReadMode, function () {
                    CatalogFileAPI.DisplayPileFile(uniqueKey);
                });
            }
            else {
                CatalogFileAPI.DisplayPileFile(uniqueKey);
            }
        },

        AddNew: function () {
            _fileEmpaquetageId = null;

            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });


            $('#CatalogEmpaquetageId').html(_emptyString);
            $('#CatalogFileVoltage').val("");

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.Pile.EditMode, function () {

                displayEditForm(ReadStateEnum.Edit);

                $('#empaquetageEditor').css({ visibility: "visible" });
                $('#resetEmpaquetage').css({ visibility: "visible" });

                $('#CatalogFileVoltage').val(getNullValue("puissance", $('#CatalogVoltageRead').html()));
            });
        },

        Read: function () {
            $('#empaquetageEditor').css({ visibility: "hidden" });
            $('#resetEmpaquetage').css({ visibility: "hidden" });

            $('#CatalogFileVoltage').val("");

            displayEditForm(ReadStateEnum.Read);

        },

        RenderInterface: function (file) {
            var code;
            var puissance;
            var empaquetage;

            CatalogFileAPI.SetOptionalDimensions(true);
            CatalogFileAPI.SetOptionalManufacturier(false);

            if (file != null) {
                _fileEmpaquetageId = file.EmpaquetageId;

                code = file.ProduitApparente.Code;
                puissance = collectNullValue("puissance", file.PuissanceFr);
                empaquetage = collectNullValue("empaquetage", file.Empaquetage);
            }
            else {
                puissance = collectNullValue("puissance");
                empaquetage = collectNullValue("empaquetage");
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + code + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="EquivalencesPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Voltage */
                    '<div class=\'CatalogFileInfosTitle\'>Voltage</div>' +
                    '<div id="CatalogVoltageRead" class=\'CatalogFileInfosValue\' style=\'\'>' + puissance + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogVoltage" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileVoltage\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Dimensions */
                    '<div id="DimensionsPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Empaquetage */
                    '<div class=\'CatalogFileInfosTitle\'>Empaquetage</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogEmpaquetageId" style="float: left; padding-top: 5px;">' + empaquetage + '</div>' +
                    '   <div>' +
                    '   <button id="empaquetageEditor" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button>' +
                    '   <button id="resetEmpaquetage" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-reset.png" alt="" /></button>' +
                    '   </div>' +
                    '</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');


            $('#empaquetageEditor').unbind('click');
            $('#resetEmpaquetage').unbind('click');

            $('#empaquetageEditor').bind('click',
                        function () {
                            Editor(MetadataFactory.Empaquetage(ValidateEmpaquetage, SelectEmpaquetage), _fileEmpaquetageId);
                        });

            $('#resetEmpaquetage').bind('click',
                        function () {
                            if (_fileEmpaquetageId != null) {
                                _fileEmpaquetageId = null;
                                $('#CatalogEmpaquetageId').html(_emptyString);
                                CatalogFileAPI.StartUpdate();
                            }
                        });

            $('#CatalogFileVoltage').unbind('keydown');
            $('#CatalogFileVoltage').bind('keydown', function () { ChangeVoltage(); });


        },

        Add: function (cp, categorie, famille, manufacturierId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var dimensions = {
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            var voltage = $('#CatalogFileVoltage').val();

            CatalogueClient.AddPile(cp, categorie, famille, manufacturierId, dimensions, dimensionsReelles, redirectionExterne, _fileEmpaquetageId, voltage, AddPile_Complete);


        },

        Update: function (cp, manufacturierId, dimensionId, format, longueur, largeur, hauteur, diametre,
                                                longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                                unite, redirectionExterne) {

            var dimensions = {
                dimId: dimensionId,
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            var voltage = $('#CatalogFileVoltage').val();

            CatalogueClient.UpdatePile(cp, manufacturierId, dimensions, dimensionsReelles, redirectionExterne, _fileEmpaquetageId, voltage, UpdatePile_Complete);

        },

        Delete: function (cp) {
            CatalogueClient.DeletePile(cp, DeletePile_Complete);
        }

    };


} ());

var PileLithiumFileAPI = (function () {

    var _fileEmpaquetageId;


    var ReadStateEnum = {
        Read: 0,
        Edit: 1
    };

    function displayEditForm(readState) {
        var cssRead;
        var cssEdit;

        if (readState == ReadStateEnum.Edit) {
            cssRead = { visibility: "hidden", display: "none" };
            cssEdit = { visibility: "visible", display: "block" };
        }
        else {
            cssRead = { visibility: "visible", display: "block" };
            cssEdit = { visibility: "hidden", display: "none" };
        }

        $('#CatalogCapaciteRead').css(cssRead);
        $('#CatalogVoltageRead').css(cssRead);

        $('#CatalogCapacite').css(cssEdit);
        $('#CatalogVoltage').css(cssEdit);

    }



    function ChangeCapacite() {
        CatalogFileAPI.StartUpdate();

        return ValidatorAPI.ValidateNullableFloatType('#CatalogFileCapacite');
    }

    function ChangeVoltage() {
        CatalogFileAPI.StartUpdate();
    }


    function ValidateEmpaquetage(args) {
        if (args != null) {
            var modifications = args.modifications;

            if (modifications != null) {

                if (_fileEmpaquetageId != modifications.id) {
                    CatalogFileAPI.StartUpdate();
                }

                _fileEmpaquetageId = modifications.id;

                if (modifications.nom == null) {
                    $('#CatalogEmpaquetageId').html(_emptyString);
                }
                else {
                    $('#CatalogEmpaquetageId').html(modifications.nom);
                }
            }
        }
    }

    function SelectEmpaquetage(args) {
        if (_fileEmpaquetageId != args.id) {
            CatalogFileAPI.StartUpdate();
            _fileEmpaquetageId = args.id;
            $('#CatalogEmpaquetageId').html(args.name);
        }

    }


    function AddPile_Complete(resultat) {
        var msg;

        switch (resultat) {
            case CatalogueClient.Resultats.Succes:
                CatalogFileAPI.AddedNew();
                break;

            case CatalogueClient.Resultats.ProduitDejaExistant:
                msg = "Le numéro de pièce de la batterie que vous tentez d'ajouter existe déjà.  Veuillez en saisir un autre.";

                $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
                $('#CatalogFileCode').attr({ alt: msg, title: msg });

                break;
            default:
                break;
        }

        CatalogFileAPI.Error(resultat, msg);
    }

    function UpdatePile_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.UpdatedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }
    }

    function DeletePile_Complete(resultat) {
        if (resultat == CatalogueClient.Resultats.Succes) {
            CatalogFileAPI.DeletedFile();
        }
        else {
            CatalogFileAPI.Error(resultat);
        }

    }

    return {
        Validate: function () {
            var assertions = new Array();

            assertions.push(ValidatorAPI.ValidateRequiredField('#CatalogFileVoltage'));
            assertions.push(ValidatorAPI.ValidateFloatType('#CatalogFileCapacite'));

            if ($.inArray(false, assertions) > -1) {
                return false;
            }
            else {
                return true;
            }
        },

        Refresh: function (uniqueKey, keepSize) {
            if (!keepSize) {
                CatalogFileAPI.ResizeCatalogFile(EditorHeight.PileLithium.ReadMode, function () {
                    CatalogFileAPI.DisplayPileLithiumFile(uniqueKey);
                });

            }
            else {
                CatalogFileAPI.DisplayPileLithiumFile(uniqueKey);
            }
        },

        AddNew: function () {
            _fileEmpaquetageId = null;

            $('#CatalogFileReadCode').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileEditCode').css({ visibility: "visible", display: "block" });

            $('#CatalogFileCapacite').val("");
            $('#CatalogFileVoltage').val("");

            $('#CatalogEmpaquetageId').html(_emptyString);

            displayEditForm(ReadStateEnum.Edit);

        },

        Edit: function () {
            CatalogFileAPI.ResizeCatalogFile(EditorHeight.PileLithium.EditMode, function () {

                displayEditForm(ReadStateEnum.Edit);

                $('#empaquetageEditor').css({ visibility: "visible" });
                $('#resetEmpaquetage').css({ visibility: "visible" });

                $('#CatalogFileCapacite').val(getNullValue("capacite", $('#CatalogCapaciteRead').html()));
                $('#CatalogFileVoltage').val(getNullValue("puissance", $('#CatalogVoltageRead').html()));

            });

        },

        Read: function () {
            $('#empaquetageEditor').css({ visibility: "hidden" });
            $('#resetEmpaquetage').css({ visibility: "hidden" });

            $('#CatalogFileCapacite').val("");
            $('#CatalogFileVoltage').val("");

            displayEditForm(ReadStateEnum.Read);
        },

        RenderInterface: function (file) {

            var code;
            var puissance;
            var empaquetage;
            var capacite;

            CatalogFileAPI.SetOptionalDimensions(true);
            CatalogFileAPI.SetOptionalManufacturier(false);

            if (file != null) {
                _fileEmpaquetageId = file.EmpaquetageId;

                code = file.ProduitApparente.Code;
                puissance = collectNullValue("puissance", file.Puissance);
                empaquetage = collectNullValue("empaquetage", file.Empaquetage);
                capacite = collectNullValue("capacite", file.Capacite);
            }
            else {
                puissance = collectNullValue("puissance");
                capacite = collectNullValue("capacite");
                empaquetage = collectNullValue("empaquetage");
            }

            $('#CatalogFileInfos').html(
                '<div class=\'CatalogFileInfosTitle\'>Numéro de pièce</div>' +

                    '<div id=\'CatalogFileReadCode\' class=\'CatalogFileInfosValue\'>' + code + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'><input id=\'CatalogFileCode\' type=\'text\' value=\'\' /></div>' +

                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="ManufacturiersPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="EquivalencesPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div class=\'CatalogFileInfosTitle\'>Voltage</div>' +
                    '<div id="CatalogVoltageRead" class=\'CatalogFileInfosValue\' style=\'\'>' + puissance + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogVoltage" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileVoltage\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

            /* Capacité */
                    '<div class=\'CatalogFileInfosTitle\'>Capacité</div>' +
                    '<div id="CatalogCapaciteRead" class=\'CatalogFileInfosValue\' style=\'\'>' + capacite + '</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogCapacite" style="visibility: hidden; display: none; padding-top: 5px;"><input id=\'CatalogFileCapacite\' type=\'text\' value=\'\' /></div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div id="DimensionsPlaceHolder">' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>' +

                    '<div class=\'CatalogFileInfosTitle\'>Empaquetage</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'>' + empaquetage + '</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogEmpaquetageId" style="float: left; padding-top: 5px;">' + empaquetage + '</div>' +
                    '   <div>' +
                    '   <button id="empaquetageEditor" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button>' +
                    '   <button id="resetEmpaquetage" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-reset.png" alt="" /></button>' +
                    '   </div>' +
                    '</div>' +

            /* Redirection vers site externe */
                    '<div id="RedirectionExternePlaceHolder">' +
                    '</div>');


            $('#CatalogFileCapacite').unbind('keydown');
            $('#CatalogFileVoltage').unbind('keydown');

            $('#empaquetageEditor').unbind('click');
            $('#resetEmpaquetage').unbind('click');

            $('#CatalogFileCapacite').bind('keydown', function () { ChangeCapacite(); });
            $('#CatalogFileVoltage').bind('keydown', function () { ChangeVoltage(); });

            $('#empaquetageEditor').bind('click',
                        function () {
                            Editor(MetadataFactory.Empaquetage(ValidateEmpaquetage, SelectEmpaquetage), _fileEmpaquetageId);
                        });

            $('#resetEmpaquetage').bind('click',
                        function () {
                            if (_fileEmpaquetageId != null) {
                                _fileEmpaquetageId = null;
                                $('#CatalogEmpaquetageId').html(_emptyString);
                                CatalogFileAPI.StartUpdate();
                            }
                        });

        },

        Add: function (cp, categorie, famille, manufacturierId, format, longueur, largeur, hauteur, diametre,
                                            longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                            unite, redirectionExterne) {

            var dimensions = {
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            var capacite = $('#CatalogFileCapacite').val();
            var voltage = $('#CatalogFileVoltage').val();

            CatalogueClient.AddPileLithium(cp, categorie, famille, manufacturierId, dimensions, dimensionsReelles, redirectionExterne, _fileEmpaquetageId, voltage, capacite, AddPile_Complete);

        },

        Update: function (cp, manufacturierId, dimensionId, format, longueur, largeur, hauteur, diametre,
                                                longueurReelle, largeurReelle, hauteurReelle, diametreReel,
                                                unite, redirectionExterne) {

            var dimensions = {
                dimId: dimensionId,
                dimGabarit: format,
                dimLongueur: longueur,
                dimLargeur: largeur,
                dimHauteur: hauteur,
                dimDiametre: diametre,
                dimUnite: unite
            };

            var dimensionsReelles = {
                dimLongueur: longueurReelle,
                dimLargeur: largeurReelle,
                dimHauteur: hauteurReelle,
                dimDiametre: diametreReel
            };

            var capacite = $('#CatalogFileCapacite').val();
            var voltage = $('#CatalogFileVoltage').val();

            CatalogueClient.UpdatePileLithium(cp, manufacturierId, dimensions, dimensionsReelles, redirectionExterne, _fileEmpaquetageId, voltage, capacite, UpdatePile_Complete);

        },

        Delete: function (cp) {
            CatalogueClient.DeletePileLithium(cp, DeletePile_Complete);
        }

    };


} ());


$(function () {
    $('#CatalogFileLightBox .hrefLightBox').lightBox({
        imageLoading: 'images/loading3.gif',
        imageBtnClose: 'images/lightbox/lightbox-btn-close.gif',
        imageBtnPrev: 'images/lightbox/lightbox-btn-prev.gif',
        imageBtnNext: 'images/lightbox/lightbox-btn-next.gif',
        imageBlank: 'images/lightbox/lightbox-blank.gif'
    }
    );
});

var _currentOption = null;

var EditorHeight = {
    Pile: {
        ReadMode: 420,
        EditMode: 600
    },

    PileLithium: {
        ReadMode: 470,
        EditMode: 640
    },

    Chargeur: {
        ReadMode: 380,
        EditMode: 500
    },

    Motorise: {
        ReadMode: 370,
        EditMode: 420
    },

    Industrielle: {
        ReadMode: 380,
        EditMode: 530
    },

    ScelleeAcide: {
        ReadMode: 520,
        EditMode: 650
    },

    CelluleBloc: {
        ReadMode: 400,
        EditMode: 450
    },

    DemarrageMarine: {
        ReadMode: 400,
        EditMode: 540
    },

    DemarrageAuto: {
        ReadMode: 400,
        EditMode: 540
    }
};



function categorieOptions(categorieId, categorieNom) {

    if (_currentOption != null) {
        _currentOption.remove();
    }

    $('#CatalogFileInfos').append(sprintf(
                '<div class="CatalogFileInfosCtrlHover" id="%s" style="background-color: silver; border: 1px solid #FFFFFF; float: left; position: absolute; top: %spx; left: %spx">' +
                '   <div style=" float: left;">%s&nbsp;' +
                '   </div><div style="float: left"><a href="javascript:void(0)" onclick="CatalogFileAPI.DissociateCategorie(\'%s\')"><img src="images/catalog-remove-association.png" alt="" style="border-width: 0px"/></a></div>' +
                '</div>',

                ("c_" + categorieId + "_hover"),
                $('#c_' + categorieId).position().top,
                $('#c_' + categorieId).position().left,
                categorieNom,
                categorieId
            ));

    _currentOption = $("#c_" + categorieId + "_hover");
}

function equivalenceOptions(equivalenceId, equivalenceNom) {

    if (_currentOption != null) {
        _currentOption.remove();
    }

    $('#CatalogFileInfos').append(
                '<div class="CatalogFileInfosCtrlHover" id="' + ("e_" + equivalenceId + "_hover") + '" style="background-color: silver; border: 1px solid #FFFFFF; float: left; position: absolute; top: ' + $('#e_' + equivalenceId).position().top + 'px; left: ' + $('#e_' + equivalenceId).position().left + 'px">' +
                '   <div style=" float: left;">' + equivalenceNom + '&nbsp;' +
                '   </div><div style="float: left"><a href="javascript:void(0)" onclick="CatalogFileAPI.DissociateEquivalence(\'' + equivalenceId + '\', \'' + escape(equivalenceNom) + '\')"><img src="images/catalog-remove-association.png" alt="" style="border-width: 0px"/></a></div>' +
                '</div>'
            );

    _currentOption = $("#e_" + equivalenceId + "_hover");
}



var CatalogFileAPI = (function () {
    var _opening = false;

    var _currentProductCode;
    var _imageVersion = 0;
    var _file;
    var _familleId;

    var _typeProduitId;

    var _dimPatternId = null;

    var _closeAfterSave = false;

    var _intModalStack = 0;

    var _dimensionId = null;

    var _redirectionId;
    var _manufacturierId;

    var _optionalDimensions = true;
    var _optionalManufacturier = true;

    var _unite = null;

    var _mode;

    var _callback;

    var _dirtyFile = false;

    var _dirtyCatalog = new Array();

    var _closeCallback = null;

    var ModeEnum = {
        Reading: 1,
        Adding: 2,
        Modifying: 3
    };


    function closedFile() {
        $('#CatalogFileSplash').hide();
        $('#' + _CatalogFileId).css({ visibility: 'hidden', display: 'none' });

        if ((_dirtyCatalog != null) && (_closeCallback != null)) {

            var dirtyIds = new Array();

            for (var i in _dirtyCatalog) {
                if (_dirtyCatalog[i]) {
                    dirtyIds.push(i);
                }
            }

            _closeCallback(dirtyIds);
            _currentProductCode = null;

        }
    }

    function File_EndRefresh() {

        ModalWait(_CatalogFileId, false);

    }

    function ValidateRedirection(args) {
        if (args != null) {
            var modifications = args.modifications;

            if (modifications != null) {

                if (_redirectionId != modifications.id) {
                    CatalogFileAPI.StartUpdate();
                }

                _redirectionId = modifications.id;

                if (modifications.nom == null) {
                    $('#CatalogRedirectionId').html(_emptyString);
                }
                else {
                    $('#CatalogRedirectionId').html(modifications.nom);
                }
            }
        }
    }

    function ValidateManufacturier(args) {
        if (args != null) {
            var modifications = args.modifications;

            if (modifications != null) {

                if (_manufacturierId != modifications.id) {
                    CatalogFileAPI.StartUpdate();
                }

                _manufacturierId = modifications.id;

                if (modifications.nom == null) {
                    $('#CatalogManufacturierId').html(_emptyString);
                }
                else {
                    $('#CatalogManufacturierId').html(modifications.nom);
                }
            }
        }
    }

    function SelectRedirection(args) {
        if (_redirectionId != args.id) {
            CatalogFileAPI.StartUpdate();
            _redirectionId = args.id;
            $('#CatalogRedirectionId').html(args.name);
        }
    }

    function SelectManufacturier(args) {
        if (_manufacturierId != args.id) {
            CatalogFileAPI.StartUpdate();
            _manufacturierId = args.id;
            $('#CatalogManufacturierId').html(args.name);
        }
    }

    function LocalizeUniteMesure(unite) {
        switch (unite) {
            case "uMillimetres":
                return "mm";
            case "uCentimetres":
                return "cm";
            case "uPouces":
                return "po";
            case "uPieds":
                return "pi";
            default:
                return "";
        }
    }


    function DrawCategories(categories) {

        $('#categoriesEditor').unbind('click');

        $('#categoriesEditor').bind('click',
                        function () {
                            var code;
                            if (_mode == ModeEnum.Adding) {
                                code = $('#CatalogFileCode').val();
                            }
                            else {
                                code = _currentProductCode;
                            }

                            KeysEditor(KeywordsFactory.Categories(RedrawCategories), code, _mode);
                        });

        if (categories != null) {
            var list = "";

            var oldCategorie = null;

            $.each(categories, function (index, cat) {

                if (oldCategorie != null) {
                    $("#categoriesActives").append('<div class="e_sep" id="c_sep_' + cat.Id + '" style="float: left;">&nbsp;-&nbsp;</div>');
                }

                $("#categoriesActives").append(sprintf('<div class="categorieLayer" id="c_%s" style="float: left; position: relative;"><input type="hidden" id="c_%s_hidden" value="%s" /><div id="c_%s_name">%s</div></div>',
                        cat.Id,
                        cat.Id,
                        cat.Id,
                        cat.Id,
                        cat.NomFr));

                UnbindCategorieActiveHover(cat.Id);
                BindCategorieActiveHover(cat.Id, cat.NomFr);

                oldCategorie = cat.Id;
            });
        }


    }


    function DrawEquivalences(equivalences) {
        $('#equivalencesEditor').unbind('click');

        $('#equivalencesEditor').bind('click',
                        function () {
                            var code;
                            if (_mode == ModeEnum.Adding) {
                                code = $('#CatalogFileCode').val();
                            }
                            else {
                                code = _currentProductCode;
                            }

                            KeysEditor(KeywordsFactory.Equivalences(RedrawEquivalences), code, _mode);
                        });

        if (equivalences != null) {
            var list = "";

            var oldEquivalence = null;

            var equivInitialized = false;

            $.each(equivalences, function (index, e) {
                equivInitialized = true;

                if (oldEquivalence != null) {
                    $("#equivalencesActives").append('<div class="e_sep" id="e_sep_' + e.Id + '" style="float: left;">&nbsp;-&nbsp;</div>');
                }

                $("#equivalencesActives").append(sprintf('<div class="equivalenceLayer" id="e_%s" style="float: left; position: relative;"><input type="hidden" id="e_%s_hidden" value="%s" /><div id="e_%s_name" style="float: left">%s</div></div>',
                        e.Id,
                        e.Id,
                        e.Id,
                        e.Id,
                        e.NomFr));

                UnbindEquivalenceActiveHover(e.Id);
                BindEquivalenceActiveHover(e.Id, e.NomFr);

                oldEquivalence = e.Id;
            });

            if (equivInitialized) {
                $("#equivalencesSO").css({ visibility: "hidden", display: "none" });
            }
            else {
                $("#equivalencesSO").css({ visibility: "visible", display: "block" });
            }
        }
    }

    function DrawRedirectionExterne() {

        $('#redirectionsEditor').unbind('click');

        $('#redirectionsEditor').bind('click',
                        function () {
                            RedirectionEditor(new RedirectionEditorClient(_redirectionId, ValidateRedirection, SelectRedirection));
                        });

    }


    function UnsetCategoriesActivesHover() {
        $('#categoriesActives .categorieLayer').each(function (index) {

            var id = '#' + $(this).attr("id") + "_hidden";
            var name = '#' + $(this).attr("id") + "_name";

            UnbindCategorieActiveHover($(id).val());
        });

    }

    function SetCategoriesActivesHover() {

        $('#categoriesActives .categorieLayer').each(function (index) {

            var id = '#' + $(this).attr("id") + "_hidden";
            var name = '#' + $(this).attr("id") + "_name";

            UnbindCategorieActiveHover($(id).val());
            BindCategorieActiveHover($(id).val(), $(name).html());
        });
    }


    function UnsetEquivalencesActivesHover() {
        $('#equivalencesActives .equivalenceLayer').each(function (index) {

            var id = '#' + $(this).attr("id") + "_hidden";
            var name = '#' + $(this).attr("id") + "_name";

            UnbindEquivalenceActiveHover($(id).val());
        });

    }

    function SetEquivalencesActivesHover() {

        $('#equivalencesActives .equivalenceLayer').each(function (index) {

            var id = '#' + $(this).attr("id") + "_hidden";
            var name = '#' + $(this).attr("id") + "_name";

            UnbindEquivalenceActiveHover($(id).val());
            BindEquivalenceActiveHover($(id).val(), $(name).html());
        });
    }


    function UnbindCategorieActiveHover(categorieId) {
        var categorieLayerId = "#c_" + categorieId;

        $(categorieLayerId).unbind('mouseover');

        if (_currentOption != null) {
            _currentOption.remove();
        }
    }

    function UnbindEquivalenceActiveHover(equivalenceId) {
        var equivalenceLayerId = "#e_" + equivalenceId;

        $(equivalenceLayerId).unbind('mouseover');

        if (_currentOption != null) {
            _currentOption.remove();
        }
    }



    function BindCategorieActiveHover(categorieId, categorieName) {
        var categorieLayerId = "#c_" + categorieId;

        if ((_mode == ModeEnum.Adding) || (_mode == ModeEnum.Modifying)) {
            $(categorieLayerId).bind('mouseover', function () { categorieOptions(categorieId, categorieName); });
        }
    }


    function BindEquivalenceActiveHover(equivalenceId, equivalenceName) {
        var equivalenceLayerId = "#e_" + equivalenceId;

        if ((_mode == ModeEnum.Adding) || (_mode == ModeEnum.Modifying)) {
            $(equivalenceLayerId).bind('mouseover', function () { equivalenceOptions(equivalenceId, equivalenceName); });
        }
    }


    function RedrawCategories(args) {

        if (args != null) {
            CatalogFileAPI.StartUpdate();

            $("#categoriesActives").html("");

            var oldcategorie = null;
            var i;

            for (i = 0; i < args.length; i++) {

                if (oldcategorie != null) {
                    $("#categoriesActives").append('<div class="c_sep" id="c_sep_' + i + '" style="float: left;">&nbsp;-&nbsp;</div>');
                }

                $("#categoriesActives").append(sprintf('<div class="categorieLayer" id="c_%s" style="float: left; position: relative;"><input type="hidden" id="c_%s_hidden" value="%s" /><div id="c_%s_name">%s</div></div>',
                        i,
                        i,
                        i,
                        i,
                        args[i]) + '</div>');

                UnbindCategorieActiveHover(i);
                BindCategorieActiveHover(i, args[i]);

                oldcategorie = args[i];

            }

        }

    }


    function RedrawEquivalences(args) {

        if (args != null) {
            CatalogFileAPI.StartUpdate();

            $("#equivalencesActives").html("");

            var oldEquivalence = null;
            var equivalenceInitialized = false;
            var i;

            for (i = 0; i < args.length; i++) {
                equivalenceInitialized = true;

                if (oldEquivalence != null) {
                    $("#equivalencesActives").append('<div class="e_sep" id="e_sep_' + i + '" style="float: left;">&nbsp;-&nbsp;</div>');
                }

                $("#equivalencesActives").append(sprintf('<div class="equivalenceLayer" id="e_%s" style="float: left; position: relative;"><input type="hidden" id="e_%s_hidden" value="%s" /><div id="e_%s_name">%s</div></div>',
                        i,
                        i,
                        i,
                        i,
                        args[i]) + '</div>');

                UnbindEquivalenceActiveHover(i);
                BindEquivalenceActiveHover(i, args[i]);

                oldEquivalence = args[i];

            }

            if (equivalenceInitialized) {
                $("#equivalencesSO").css({ visibility: "hidden", display: "none" });
            }
            else {
                $("#equivalencesSO").css({ visibility: "visible", display: "block" });
            }


        }
    }



    function SelectDimensions_Complete(args) {

        if (args != null) {

            if (args.pattern != null) {


                var pattern = args.pattern;
                var longueur = $('#dimLongueurValue').val();
                var largeur = $('#dimLargeurValue').val();
                var hauteur = $('#dimHauteurValue').val();
                var diametre = $('#dimDiametreValue').val();

                var longueurReelle = $('#dimLongueurValue_reelles').val();
                var largeurReelle = $('#dimLargeurValue_reelles').val();
                var hauteurReelle = $('#dimHauteurValue_reelles').val();
                var diametreReel = $('#dimDiametreValue_reelles').val();

                _callback = SelectDimensions_Complete;

                if (_dimPatternId != pattern.Id) {
                    CatalogFileAPI.StartUpdate();
                    _dimPatternId = pattern.Id;
                }

                if (_unite != args.unite) {
                    CatalogFileAPI.StartUpdate();
                    _unite = args.unite;
                }

                FormatDimensions(pattern, { Unite: args.unite, Longueur: longueur, Largeur: largeur, Hauteur: hauteur, Diametre: diametre }, true);
                FormatDimensions(pattern, { Unite: args.unite, Longueur: longueurReelle, Largeur: largeurReelle, Hauteur: hauteurReelle, Diametre: diametreReel }, false, '_reelles');

            }

        }
    }

    var _longueurExploitee = false;
    var _largeurExploitee = false;
    var _hauteurExploitee = false;
    var _diametreExploite = false;

    function FormatDimensions(dimensionsActives, dimensions, setFocus, suffix) {

        if (suffix == null) {
            suffix = "";
        }

        var dimInitialisee = false;

        $('#dimSeparateur1' + suffix).css({ visibility: "hidden", display: "none" });
        $('#dimSeparateur2' + suffix).css({ visibility: "hidden", display: "none" });
        $('#dimSeparateur3' + suffix).css({ visibility: "hidden", display: "none" });


        var longueur = "";
        var largeur = "";
        var hauteur = "";
        var diametre = "";

        var longueurAbrev = "";
        var largeurAbrev = "";
        var hauteurAbrev = "";
        var diametreAbrev = "";
        var hasFocus = false;

        var unite = LocalizeUniteMesure(_unite);

        if ((dimensionsActives != null) && (dimensionsActives.LongueurExploitee)) {
            _longueurExploitee = true;

            $('#dimLongueur' + suffix).css({ visibility: "visible", display: "block" });
            longueur = dimensions.Longueur;
            longueurAbrev = dimensionsActives.LongueurAbreviation;

            if ((longueurAbrev != null) && (longueurAbrev != "")) {
                $('#dimLongueurAbrev' + suffix).html(longueurAbrev + "&nbsp;");
            }
            else {
                $('#dimLongueurAbrev' + suffix).html("&nbsp;");
            }

            $('#dimLongueurValue' + suffix).val(longueur);

            if (setFocus) {
                $('#dimLongueurValue' + suffix).focus();
                hasFocus = true;
            }

            $('#dimLongueurValueRead' + suffix).html(longueur);
            $('#dimLongueurUnite' + suffix).html(unite);

            dimInitialisee = true;
        }
        else {
            _longueurExploitee = false;

            $('#dimLongueur' + suffix).css({ visibility: "hidden", display: "none" });

        }

        if ((dimensionsActives != null) && (dimensionsActives.LargeurExploitee)) {
            _largeurExploitee = true;

            $('#dimLargeur' + suffix).css({ visibility: "visible", display: "block" });
            largeur = dimensions.Largeur;
            largeurAbrev = dimensionsActives.LargeurAbreviation;

            if ((dimInitialisee) && (dimensionsActives.Separateur != "") && (dimensionsActives.Separateur != null)) {
                $('#dimSeparateur1' + suffix).css({ visibility: "visible", display: "block" });
                $('#dimSeparateur1' + suffix).html("&nbsp;" + dimensionsActives.Separateur + "&nbsp;");
            }
            else if (dimInitialisee) {
                $('#dimSeparateur1' + suffix).css({ visibility: "visible", display: "block" });
                $('#dimSeparateur1' + suffix).html("&nbsp;&nbsp;");
            }

            if ((largeurAbrev != null) && (largeurAbrev != "")) {
                $('#dimLargeurAbrev' + suffix).html(largeurAbrev + "&nbsp;");
            }
            else {
                $('#dimLargeurAbrev' + suffix).html("&nbsp;");
            }

            $('#dimLargeurValue' + suffix).val(largeur);
            if ((setFocus) && (!hasFocus)) {
                $('#dimLargeurValue' + suffix).focus();
                hasFocus = true;
            }

            $('#dimLargeurValueRead' + suffix).html(largeur);
            $('#dimLargeurUnite' + suffix).html(unite);

            dimInitialisee = true;
        }
        else {
            _largeurExploitee = false;

            $('#dimLargeur' + suffix).css({ visibility: "hidden", display: "none" });
        }


        if ((dimensionsActives != null) && (dimensionsActives.HauteurExploitee)) {
            _hauteurExploitee = true;

            $('#dimHauteur' + suffix).css({ visibility: "visible", display: "block" });
            hauteur = dimensions.Hauteur;
            hauteurAbrev = dimensionsActives.HauteurAbreviation;

            if ((dimInitialisee) && (dimensionsActives.Separateur != "") && (dimensionsActives.Separateur != null)) {
                $('#dimSeparateur2' + suffix).css({ visibility: "visible", display: "block" });
                $('#dimSeparateur2' + suffix).html("&nbsp;" + dimensionsActives.Separateur + "&nbsp;");
            }
            else if (dimInitialisee) {
                $('#dimSeparateur2' + suffix).css({ visibility: "visible", display: "block" });
                $('#dimSeparateur2' + suffix).html("&nbsp;&nbsp;");
            }

            if ((hauteurAbrev != null) && (hauteurAbrev != "")) {
                $('#dimHauteurAbrev' + suffix).html(hauteurAbrev + "&nbsp;");
            }
            else {
                $('#dimHauteurAbrev' + suffix).html("&nbsp;");
            }

            $('#dimHauteurValue' + suffix).val(hauteur);
            if ((setFocus) && (!hasFocus)) {
                $('#dimHauteurValue' + suffix).focus();
                hasFocus = true;
            }

            $('#dimHauteurValueRead' + suffix).html(hauteur);
            $('#dimHauteurUnite' + suffix).html(unite);

            dimInitialisee = true;
        }
        else {
            _hauteurExploitee = false;

            $('#dimHauteur' + suffix).css({ visibility: "hidden", display: "none" });
        }


        if ((dimensionsActives != null) && (dimensionsActives.DiametreExploite)) {
            _diametreExploite = true;

            $('#dimDiametre' + suffix).css({ visibility: "visible", display: "block" });
            diametre = dimensions.Diametre;
            diametreAbrev = dimensionsActives.DiametreAbreviation;

            if ((dimInitialisee) && (dimensionsActives.Separateur != "") && (dimensionsActives.Separateur != null)) {
                $('#dimSeparateur3' + suffix).css({ visibility: "visible", display: "block" });
                $('#dimSeparateur3' + suffix).html("&nbsp;" + dimensionsActives.Separateur + "&nbsp;");
            }
            else if (dimInitialisee) {
                $('#dimSeparateur3' + suffix).css({ visibility: "visible", display: "block" });
                $('#dimSeparateur3' + suffix).html("&nbsp;&nbsp;");
            }

            if ((diametreAbrev != null) && (diametreAbrev != "")) {
                $('#dimDiametreAbrev' + suffix).html(diametreAbrev + "&nbsp;");
            }
            else {
                $('#dimDiametreAbrev' + suffix).html("&nbsp;");
            }

            $('#dimDiametreValue' + suffix).val(diametre);
            if ((setFocus) && (!hasFocus)) {
                $('#dimDiametreValue' + suffix).focus();
                hasFocus = true;
            }

            $('#dimDiametreValueRead' + suffix).html(diametre);
            $('#dimDiametreUnite' + suffix).html(unite);

        }
        else {
            _diametreExploite = false;

            $('#dimDiametre' + suffix).css({ visibility: "hidden", display: "none" });
        }

        if (!dimInitialisee) {
            $('#dimSO').css({ visibility: "visible", display: "block" });
        }
        else {
            $('#dimSO').css({ visibility: "hidden", display: "none" });
        }

    }

    function RedrawDimensions(dimensions) {

        var dimensionsActives;

        var longueur;
        var largeur;
        var hauteur;
        var diametre;

        var longueurReelle;
        var largeurReelle;
        var hauteurReelle;
        var diametreReel;

        if (dimensions != null) {
            dimensionsActives = dimensions.DimensionsActives;

            longueur = dimensions.Longueur;
            largeur = dimensions.Largeur;
            hauteur = dimensions.Hauteur;
            diametre = dimensions.Diametre;

            longueurReelle = dimensions.LongueurReelle;
            largeurReelle = dimensions.LargeurReelle;
            hauteurReelle = dimensions.HauteurReelle;
            diametreReel = dimensions.DiametreReel;

        }

        DrawDimensionsReelles();

        FormatDimensions(dimensionsActives, { Unite: _unite, Longueur: longueur, Largeur: largeur, Hauteur: hauteur, Diametre: diametre }, true);
        FormatDimensions(dimensionsActives, { Unite: _unite, Longueur: longueurReelle, Largeur: largeurReelle, Hauteur: hauteurReelle, Diametre: diametreReel }, false, '_reelles');

    }


    // pour le moment, on assume que toutes les dimensions sont de même format.  Seule l'unité est susceptible d'être modifiée.
    function DrawDimensionsReelles() {

        $('#dimensionsReelles').html("");

        var replacement = new Array();
        replacement.push("dimLongueur");
        replacement.push("dimLongueurAbrev");
        //            replacement.push("dimLongueurValueRead");
        replacement.push("dimLongueurValue");
        replacement.push("dimLongueurUnite");

        replacement.push("dimLargeur");
        replacement.push("dimLargeurAbrev");
        //            replacement.push("dimLargeurValueRead");
        replacement.push("dimLargeurValue");
        replacement.push("dimLargeurUnite");

        replacement.push("dimHauteur");
        replacement.push("dimHauteurAbrev");
        //            replacement.push("dimHauteurValueRead");
        replacement.push("dimHauteurValue");
        replacement.push("dimHauteurUnite");

        replacement.push("dimDiametre");
        replacement.push("dimDiametreAbrev");
        //            replacement.push("dimDiametreValueRead");
        replacement.push("dimDiametreValue");
        replacement.push("dimDiametreUnite");

        replacement.push("dimSeparateur1");
        replacement.push("dimSeparateur2");
        replacement.push("dimSeparateur3");

        $("#dimensions").clone().removeAttr("id").appendTo('#dimensionsReelles');

        $.each(replacement, function (index, rep) {
            $('#dimensionsReelles .' + rep).attr({ "id": rep + '_reelles' });
        });

        $('#dimLongueur_reelles' + ' input').attr({ "id": "dimLongueurValue_reelles" });
        $('#dimLargeur_reelles' + ' input').attr({ "id": "dimLargeurValue_reelles" });
        $('#dimHauteur_reelles' + ' input').attr({ "id": "dimHauteurValue_reelles" });
        $('#dimDiametre_reelles' + ' input').attr({ "id": "dimDiametreValue_reelles" });
        // reste à identifier les dimensions réelles dans les input.
    }

    function DrawDimensions(dimensions) {
        $('#dimensionsEditor').unbind('click');
        $('#resetDimensions').unbind('click');

        var dimensionsActives;

        $("#dimensions").append('<div class="dimLongueur" id="dimLongueur" style="float: left"><div class="dimLongueurAbrev" id="dimLongueurAbrev" style="float: left; padding-top: 2px;"></div><div style="float: left"><div class="dimLongueurValueRead" id="dimLongueurValueRead" style="float: left; padding-top: 2px;"></div><input class="catalogFileDimension" id="dimLongueurValue" type="text" value="" /></div><div class="dimLongueurUnite" id="dimLongueurUnite" style="float: left; padding-top: 2px;"></div></div>');
        $("#dimensions").append('<div class="dimSeparateur1" id="dimSeparateur1" style="float: left; visibility: hidden; display: none"></div>');

        $("#dimensions").append('<div class="dimLargeur" id="dimLargeur" style="float: left"><div class="dimLargeurAbrev" id="dimLargeurAbrev" style="float: left; padding-top: 2px;"></div><div style="float: left"><div class="dimLargeurValueRead" id="dimLargeurValueRead" style="float: left; padding-top: 2px;"></div><input class="catalogFileDimension" id="dimLargeurValue" type="text" value="" /></div><div id="dimLargeurUnite" class="dimLargeurUnite" style="float: left; padding-top: 2px;"></div></div>');
        $("#dimensions").append('<div class="dimSeparateur2" id="dimSeparateur2" style="float: left; visibility: hidden; display: none"></div>');

        $("#dimensions").append('<div class="dimHauteur" id="dimHauteur" style="float: left"><div class="dimHauteurAbrev" id="dimHauteurAbrev" style="float: left; padding-top: 2px;"></div><div style="float: left"><div class="dimHauteurValueRead" id="dimHauteurValueRead" style="float: left; padding-top: 2px;"></div><input class="catalogFileDimension" id="dimHauteurValue" type="text" value="" /></div><div id="dimHauteurUnite" class="dimHauteurUnite" style="float: left; padding-top: 2px;"></div></div>');
        $("#dimensions").append('<div class="dimSeparateur3" id="dimSeparateur3" style="float: left; visibility: hidden; display: none"></div>');

        $("#dimensions").append('<div class="dimDiametre" id="dimDiametre" style="float: left"><div class="dimDiametreAbrev" id="dimDiametreAbrev" style="float: left; padding-top: 2px;"></div><div style="float: left"><div class="dimDiametreValueRead" id="dimDiametreValueRead" style="float: left; padding-top: 2px;"></div><input class="catalogFileDimension" id="dimDiametreValue" type="text" value="" /></div><div id="dimDiametreUnite" class="dimDiametreUnite" style="float: left; padding-top: 2px;"></div></div>');

        $("#dimensions").append('<div class="dimLongueur" id="dimSO" style="float: left; visibility: hidden;">-</div>');

        var cssRead;
        var cssEdit;
        if (_mode == ModeEnum.Adding || _mode == ModeEnum.Modifying) {
            cssEdit = { visibility: "visible", display: "block" };
            cssRead = { visibility: "hidden", display: "none" };
        }
        else if (_mode == ModeEnum.Reading) {
            cssEdit = { visibility: "hidden", display: "none" };
            cssRead = { visibility: "visible", display: "block" };
        }

        $('#dimLongueurValue').css(cssEdit);
        $('#dimLargeurValue').css(cssEdit);
        $('#dimHauteurValue').css(cssEdit);
        $('#dimDiametreValue').css(cssEdit);

        $('#dimLongueurValueRead').css(cssRead);
        $('#dimLargeurValueRead').css(cssRead);
        $('#dimHauteurValueRead').css(cssRead);
        $('#dimDiametreValueRead').css(cssRead);


        _callback = SelectDimensions_Complete;

        if (dimensions != null) {
            dimensionsActives = dimensions.DimensionsActives;
        }


        if (dimensionsActives != null) {
            _dimPatternId = dimensionsActives.Id;
            _unite = dimensions.Unite;
        }

        $('#dimensionsEditor').bind('click',
                        function () {
                            DimEditor(new DimensionEditorClient());
                            DimEditor().Context({ callback: _callback, id: _dimPatternId, unite: _unite });
                        });

        $('#resetDimensions').bind('click',
                        function () {
                            if (_dimPatternId != null) {
                                CatalogFileAPI.StartUpdate();
                                _dimPatternId = null;

                                RedrawDimensions();
                            }
                        });


        RedrawDimensions(dimensions);
    }


    function ResetCategoriesActives_Complete(result) {
        UnsetCategoriesActivesHover();

        $('#categoriesActives').html("");

        if (_intModalStack == 1) {
            ModalWait(_CatalogFileId, false);
        }

        _intModalStack--;
    }

    function ResetEquivalencesActives_Complete(result) {
        UnsetEquivalencesActivesHover();

        $('#equivalencesActives').html("");

        if (_intModalStack == 1) {
            ModalWait(_CatalogFileId, false);
        }

        _intModalStack--;
    }

    function RenderInterface(file) {
        var dimension;
        var manufacturier;
        var categories;
        var equivalences;

        if (file != null) {
            initializeNullValues();

            dimension = file.ProduitApparente.DimensionsOriginales;
            manufacturier = file.ProduitApparente.Manufacturier;
            categories = file.ProduitApparente.Categories;
            equivalences = file.ProduitApparente.Equivalences;

            _currentProductCode = file.ProduitApparente.Code;
            _dimensionId = dimension.Id;

            // mémoriser les références pour usage ultérieur (sauvegarde.)
            _redirectionId = file.ProduitApparente.RedirectionId;
            _manufacturierId = file.ProduitApparente.ManufacturierId;

            $('#' + _CatalogFileCtrlEditId).attr("disabled", false);

            $('#CatalogFileImage').attr({ src: file.ProduitApparente.Photo });
            $('#CatalogFileEnlargedImage').attr({ src: file.ProduitApparente.Photo });

            if (file.ProduitApparente.PDFAttached) {
                $('#CatalogPDFFile').show();
                $('#hrefCatalogPDF').attr('href', "images/CatalogPDFCache/" + _currentProductCode + ".pdf");

            }
            else {
                $('#CatalogPDFFile').hide();
            }

            if (file.ProduitApparente.EnlargedImageAvailable) {
                $('#CatalogFileHrefEnlargedImage').attr('href', file.ProduitApparente.EnlargedImage);
                $('#CatalogFileHrefEnlargedImage').show();
                $('#CatalogFileImage').hide();
            }
            else {
                $('#CatalogFileHrefEnlargedImage').attr('href', 'javascript:void(0)');
                $('#CatalogFileHrefEnlargedImage').hide();
                $('#CatalogFileImage').show();
            }

        }
        else {
            $('#CatalogFileImage').attr({ src: "images/produit-inconnu.png" });
            $('#CatalogPDFFile').hide();
        }


        _file.RenderInterface(file);

        if (_mode != ModeEnum.Modifying) {
            $('#CatalogFileUploader').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileSearchKeys').hide();
        }

        RenderImageUploader();
        RenderSearchKeysEditor();

        RenderCategories();
        RenderEquivalences();

        RenderManufacturiers(file);
        RenderRedirectionExterne(file);

        RenderDimensions(dimension);

        DrawCategories(categories);
        DrawEquivalences(equivalences);

        DrawRedirectionExterne();

        DrawDimensions(dimension);


        $('#dimLongueurValue_reelles').unbind('keyup');
        $('#dimLargeurValue_reelles').unbind('keyup');
        $('#dimHauteurValue_reelles').unbind('keyup');
        $('#dimDiametreValue_reelles').unbind('keyup');

        $('#dimLongueurValue').unbind('keyup');
        $('#dimLargeurValue').unbind('keyup');
        $('#dimHauteurValue').unbind('keyup');
        $('#dimDiametreValue').unbind('keyup');

        $('#dimLongueurValue').bind('keyup', function () { ChangeLongueurProduit(); });
        $('#dimLargeurValue').bind('keyup', function () { ChangeLargeurProduit(); });
        $('#dimHauteurValue').bind('keyup', function () { ChangeHauteurProduit(); });
        $('#dimDiametreValue').bind('keyup', function () { ChangeDiametreProduit(); });

        $('#dimLongueurValue_reelles').bind('keyup', function () { ChangeLongueurReelleProduit(); });
        $('#dimLargeurValue_reelles').bind('keyup', function () { ChangeLargeurReelleProduit(); });
        $('#dimHauteurValue_reelles').bind('keyup', function () { ChangeHauteurReelleProduit(); });
        $('#dimDiametreValue_reelles').bind('keyup', function () { ChangeDiametreReelProduit(); });


        if (_mode == ModeEnum.Modifying) {
            _file.Edit();
        }

        $('#CatalogFileCode').bind('keydown', function () { ChangeCodeProduit(); });

    }

    function RenderImageUploader() {
        if (_currentProductCode != null) {
            $('#CatalogFileUploader').html(
                    '<div class="CatalogFileInfosTitle" style="min-width: 100px; text-align: center; padding: 3px; cursor: pointer" onclick="CatalogFileAPI.DisplayFileUploader(true)">Modifier les pièces jointes...</div>' +
                    '<div id="CatalogFileUploaderIFrame" style="visibility: hidden; display: none; background-color: silver; position: absolute; top: 230px; left: 0px; width: 360px; height: 190px;">' +
                    '<iframe scrolling="no" id="" src="catalogFileUploader.aspx?parentContainer=CatalogFileUploader&productCode=' + _currentProductCode + '" style="border: 1px solid #FFFFFF; width: 360px; height: 190px"></iframe>' +
                    '</div>');
        }

    }

    function RenderSearchKeysEditor() {
        $('#CatalogFileSearchKeys').html(
                    '<div class="CatalogFileInfosTitle" style="min-width: 100px; text-align: center; padding: 3px; padding-top: 10px; cursor: pointer" onclick="CatalogFileAPI.OpenSearchKeysEditor()">Mots clés de recherche...</div>');
    }

    function RenderManufacturiers(file) {
        if ($('#ManufacturiersPlaceHolder').get(0) != null) {

            var manufacturier;

            if (file != null) {
                manufacturier = collectNullValue("manufacturier", file.ProduitApparente.ManufacturierFr);
            }
            else {
                manufacturier = collectNullValue("manufacturier");
            }


            $('#ManufacturiersPlaceHolder').append(
                    '<div class=\'CatalogFileInfosTitle\'>Manufacturier</div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogManufacturierId" style="float: left; padding-top: 5px;">' + manufacturier + '</div>' +
                    '   <div style="float: left;">' +
                    '       <div style="float: left"><button id="manufacturiersEditor" type=\'button\' style="display: none; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button></div>' +
                    '       <div style="float: left"><button id="resetManufacturier" type=\'button\' style="display: none; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-reset.png" alt="" /></button></div>' +
                    '   </div>' +
                    '   <div style="width: 290px; float: left; height: 5px; overflow: hidden;">&nbsp;</div>' +

                    '</div>');

            if (_mode == ModeEnum.Modifying) {
                $('#manufacturiersEditor').show();
                $('#resetManufacturier').show();
            }

            $('#manufacturiersEditor').unbind('click');
            $('#resetManufacturier').unbind('click');

            $('#manufacturiersEditor').bind('click',
                        function () {
                            Editor(MetadataFactory.Manufacturier(ValidateManufacturier, SelectManufacturier), _manufacturierId);
                        });

            $('#resetManufacturier').bind('click',
                        function () {
                            if (_manufacturierId != null) {
                                _manufacturierId = null;
                                $('#CatalogManufacturierId').html(_emptyString);

                                CatalogFileAPI.StartUpdate();
                            }
                        });
        }
    }

    function RenderCategories() {
        if ($('#CategoriesPlaceHolder').get(0) != null) {

            $('#CategoriesPlaceHolder').append(
                    '    <div class=\'CatalogFileInfosTitle\'>Catégories</div>' +
                    '    <div class=\'CatalogFileInfosValue\'>' +
                    '       <div id=\'categoriesActives\' style="float: left; padding-top: 5px;"></div>' +
                    '       <div style="float: left">' +
                    '       <button id="categoriesEditor" type=\'button\' style="display: none; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button>' +
                    '       </div>' +
                    '   <div style="min-width: 290px; float: left; height: 5px; overflow: hidden;">&nbsp;</div>' +
                    '    </div>');

            if (_mode == ModeEnum.Modifying) {
                $('#categoriesEditor').show();
            }
        }
    }

    function RenderEquivalences() {
        if ($('#EquivalencesPlaceHolder').get(0) != null) {

            $('#EquivalencesPlaceHolder').append(
                    '    <div class=\'CatalogFileInfosTitle\'>Équivalences</div>' +
                    '    <div class=\'CatalogFileInfosValue\'>' +
                    '       <div id=\'equivalencesActives\' style="float: left; padding-top: 5px;"></div>' +
                    '       <div id=\'equivalencesSO\' style="float: left; padding-top: 5px;">-</div>' +
                    '       <div style="float: left">' +
                    '       <button id="equivalencesEditor" type=\'button\' style="display: none; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button>' +
                    '       </div>' +
                    '   <div style="width: 290px; float: left; height: 5px; overflow: hidden;">&nbsp;</div>' +
                    '    </div>');

            if (_mode == ModeEnum.Modifying) {
                $('#equivalencesEditor').show();
            }
        }
    }

    function RenderRedirectionExterne(file) {

        var redirection;

        if (file != null) {
            redirection = collectNullValue("redirection", file.ProduitApparente.Redirection);
        }
        else {
            redirection = collectNullValue("redirection");
        }

        if ($('#RedirectionExternePlaceHolder').get(0) != null) {

            $('#RedirectionExternePlaceHolder').append(
                    '<div class=\'CatalogFileInfosTitle\'>Redirection proposée lors d\'une recherche</div>' +
                    '<div class=\'CatalogFileInfosValue\' style=\'visibility: hidden; display: none\'>' + redirection + ' </div>' +
                    '<div id=\'CatalogFileEditCode\' class=\'CatalogFileInfosValue\'>' +
                    '   <div id="CatalogRedirectionId" style="float: left; padding-top: 5px;">' + redirection + '</div>' +
                    '   <div style="float: left">' +
                    '       <button id="redirectionsEditor" type=\'button\' style="border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button>' +
                    '       <button id="resetRedirection" type=\'button\' style="border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-reset.png" alt="" /></button>' +
                    '   </div>' +
                    '</div>' +
                    '<div class=\'CatalogFileInfosSpacer\'>&nbsp;</div>');

        }

        if (_mode == ModeEnum.Modifying) {
            $('#RedirectionExternePlaceHolder').css({ visibility: "visible", display: "block" });
        }
        else {
            // rendre le tout invisible par défaut tout le reste du temps
            $('#RedirectionExternePlaceHolder').css({ visibility: "hidden", display: "none" });
        }

    }

    function RenderDimensions(dimension) {
        if ($('#DimensionsPlaceHolder').get(0) != null) {

            $('#DimensionsPlaceHolder').html(
                    '<div class=\'CatalogFileInfosTitle\'>Dimensions</div>' +
                    '<div class=\'CatalogFileInfosValue\'>' +
                    '   <div id="dimensions" style="float: left; padding-top: 5px;"></div>' +
                    '   <div style="float: left;">' +
                    '       <div style="float: left;"><button id="dimensionsEditor" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-edit.png" alt="" /></button></div>' +
                    '       <div style="float: left;"><button id="resetDimensions" type=\'button\' style="visibility: hidden; border-width: 0px; background-color: transparent" onclick=""><img src="images/catalog-reset.png" alt="" /></button></div>' +
                    '   </div>' +
                    '   <div style="height: 25px">&nbsp;</div>' +
                    '</div>');

            $('#DimensionsPlaceHolder').append(
                    '<div id=\'dimensionsReellesWrapper\' style=\'visibility: hidden; display: none; padding-top: 5px;\'>' +
                        '<div class=\'CatalogFileInfosTitle\'>Dimensions réelles</div>' +
                        '<div class=\'CatalogFileInfosValue\'>' +
                        '   <div id="dimensionsReelles" style="float: left; padding-top: 2px; min-width: 400px"></div>' +
                        '</div>' +
                    '</div>');

            if (_mode == ModeEnum.Modifying) {
                $('#dimensionsEditor').css({ visibility: "visible", display: "block" });
                $('#resetDimensions').css({ visibility: "visible", display: "block" });
                $('#dimensionsReellesWrapper').css({ visibility: "visible", display: "block" });
            }
        }
    }

    function DisplayPileFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }

    function DisplayPileLithiumFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }

    function DisplayBatterieDemarrageAutoFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }

    function DisplayBatterieDemarrageMarineFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }


    function DisplayBatterieCelluleBlocFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }

    function DisplayBatterieScelleeAcideFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }

    function DisplayBatterieIndustrielleFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }

    function DisplayBatterieMotoriseFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }

    function DisplayChargeurFile_Complete(result) {
        var file = JSON.parse(result.toString());

        RenderInterface(file);
        ModalWait(_CatalogFileId, false);
    }


    function clearFile() {
        $('#CatalogFileInfos').html("");

        $('#CatalogFileCode').unbind('keydown');

        $('#dimLongueurValue').unbind('keydown');
        $('#dimLargeurValue').unbind('keydown');
        $('#dimHauteurValue').unbind('keydown');
        $('#dimDiametreValue').unbind('keydown');

        _mode = ModeEnum.Reading;
        _closeAfterSave = false;

        if (isUserLoggedIn()) {
            $('#CatalogFileEdit').css({ visibility: "hidden", display: "none" });
            $('#' + _CatalogFileCtrlCancelId).val("Lire");
            $('#CatalogFileUploader').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileSearchKeys').hide();

            CatalogueClient.ResetEquivalencesActives(function () { });
            CatalogueClient.ResetCategoriesActives(function () { });
        }

        $('#CatalogFileRead').css({ visibility: "visible", display: "block" });
        $('#CatalogFileHrefEnlargedImage').hide();
        $('#CatalogFileImage').show();
        $('#CatalogPDFFile').hide();

        $('#CatalogFileImage').attr({ src: "images/produit-inconnu.png" });
        $('#CatalogFileEnlargedImage').attr({ src: "images/produit-inconnu.png" });
        $('#' + _CatalogFileWrapperId).css({ visibility: 'hidden', display: 'none' });

    }

    function AddItemToList_Complete(result) {
        var amount = JSON.parse(result.toString());

        if (amount != null) {
            var id = "#Product_" + amount.Code + "_Amount";

            $(id).html(amount.SelfAmount);
        }
    }


    function AssociateCategorie_Complete(result) {
        var id = result;
        var nom = $('#categoriesInactives option[value="' + id + '"]').text();

        CatalogFileAPI.StartUpdate();

        var separateur;

        if ($('#c_' + id + '_hover').get(0) == null) {
            // on déduit qu'on insère un élément en bout de liste, à la suite d'un élément ayant déjà été ajouté
            if ($('#categoriesActives').html() != '') {
                $("#categoriesActives").append('<div class="c_sep" id="c_sep_' + id + '" style="float: left;">&nbsp;-&nbsp;</div>');
            }

            // insérer l'élément en bout de liste
            $("#categoriesActives").append(sprintf('<div class="categorieLayer" id="c_%s" style="float: left; position: relative;"><input type="hidden" id="c_%s_hidden" value="%s" /><div id="c_%s_name">%s</div></div>',
                        id,
                        id,
                        id,
                        id,
                        nom));

            UnbindCategorieActiveHover(id);
            BindCategorieActiveHover(id, nom);

        }

        $('#categoriesInactives option[value="' + id + '"]').remove();
    }

    function DissociateCategorie_Complete(result) {
        var id = result;

        CatalogFileAPI.StartUpdate();

        if ($('#c_' + id + '_hover').get(0) != null) {
            $('#c_' + id + '_hover').remove();
        }

        if ($('#c_' + id).get(0) != null) {
            UnbindCategorieActiveHover(id);
            $('#c_' + id).remove();

            if ($('#c_sep_' + id).get(0) != null) {
                $('#c_sep_' + id).remove();
            }
            else {
                $('#categoriesActives .c_sep').first().remove();
            }

        }
    }



    function DissociateEquivalence_Complete(result) {
        var id = result;

        CatalogFileAPI.StartUpdate();

        if ($('#e_' + id + '_hover').get(0) != null) {
            $('#e_' + id + '_hover').remove();
        }

        if ($('#e_' + id).get(0) != null) {
            UnbindEquivalenceActiveHover(id);
            $('#e_' + id).remove();

            if ($('#e_sep_' + id).get(0) != null) {
                $('#e_sep_' + id).remove();
            }
            else {
                $('#equivalencesActives .e_sep').first().remove();
            }
        }

        var equivalencesList = $.trim($('#equivalencesActives').html());
        var equivalenceInitialized = ((equivalencesList != null) && (equivalencesList != ""));

        if (equivalenceInitialized) {
            $("#equivalencesSO").css({ visibility: "hidden", display: "none" });
        }
        else {
            $("#equivalencesSO").css({ visibility: "visible", display: "block" });
        }
        
    }



    function CancelAddNew() {
        var proceed = confirm("Souhaitez-vous annuler l'ajout en cours?");

        if (proceed) {
            GoBackToEditMode();
        }
    }


    function GoBackToEditMode(newProductCode) {

        // substituer le code de produit actuel pour pointer sur l'édition d'un autre produit.
        if (newProductCode != null) {
            _currentProductCode = newProductCode;
        }

        _mode = ModeEnum.Modifying;
        _dirtyFile = false;

        $('#CatalogFileUploader').css({ visibility: "visible", display: "block" });
        $('#CatalogFileSearchKeys').show();

        $('#' + _CatalogFileCtrlCancelId).val("Lire");
        $('#' + _CatalogFileCtrlSaveId).attr("disabled", true);
        $('#' + _CatalogFileCtrlSaveAndCloseId).attr("disabled", true);
        $('#' + _CatalogFileCtrlCancelId).attr("disabled", false);
        $('#' + _CatalogFileCtrlDeleteId).attr("disabled", false);


        _file.Refresh(_currentProductCode, true);

        _file.Edit();
    }

    function CancelEdit() {
        var proceed = true;

        if (_dirtyFile) {
            proceed = confirm("Souhaitez-vous annuler les modifications en cours?");
        }

        if (proceed) {
            _mode = ModeEnum.Reading;
            _dirtyFile = false;

            UnsetCategoriesActivesHover();
            UnsetEquivalencesActivesHover();

            $('#' + _CatalogFileCtrlSaveId).attr("disabled", true);
            $('#' + _CatalogFileCtrlSaveAndCloseId).attr("disabled", true);

            $('#CatalogFileUploader').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileSearchKeys').hide();

            $('#manufacturiersEditor').hide();
            $('#resetManufacturier').hide();

            $('#categoriesInactivesSelection').css({ visibility: "hidden", display: "none" });
            $('#categoriesEditor').hide();

            $('#equivalencesInactivesSelection').css({ visibility: "hidden", display: "none" });
            $('#associationequivalences').css({ visibility: "hidden", display: "none" });
            $('#equivalencesEditor').hide();

            $('#RedirectionExternePlaceHolder').css({ visibility: "hidden", display: "none" });

            $('#dimensionsEditor').css({ visibility: "hidden", display: "none" });
            $('#resetDimensions').css({ visibility: "hidden", display: "none" });
            $('#dimensionsReellesWrapper').css({ visibility: "hidden", display: "none" });

            $('#dimLongueurValue').css({ visibility: "hidden", display: "none" });
            $('#dimLargeurValue').css({ visibility: "hidden", display: "none" });
            $('#dimHauteurValue').css({ visibility: "hidden", display: "none" });
            $('#dimDiametreValue').css({ visibility: "hidden", display: "none" });
            $('#dimLongueurValue_reelles').css({ visibility: "hidden", display: "none" });
            $('#dimLargeurValue_reelles').css({ visibility: "hidden", display: "none" });
            $('#dimHauteurValue_reelles').css({ visibility: "hidden", display: "none" });
            $('#dimDiametreValue_reelles').css({ visibility: "hidden", display: "none" });

            $('#dimLongueurValueRead').css({ visibility: "visible", display: "block" });
            $('#dimLargeurValueRead').css({ visibility: "visible", display: "block" });
            $('#dimHauteurValueRead').css({ visibility: "visible", display: "block" });
            $('#dimDiametreValueRead').css({ visibility: "visible", display: "block" });

            $('#CatalogFileEdit').css({ visibility: "hidden", display: "none" });
            $('#CatalogFileRead').css({ visibility: "visible", display: "block" });


            _file.Refresh(_currentProductCode);

        }
    }


    function ValidateCodeProduit() {
        var msg = "";

        if ($('#CatalogFileCode').val() == '') {
            msg = "Vous devez attribuer un code unique au produit";

            $('#CatalogFileCode').css({ backgroundColor: "rgb(249, 170, 174)" });
            $('#CatalogFileCode').attr({ alt: msg, title: msg });

            return false;
        }
        else {
            $('#CatalogFileCode').css({ backgroundColor: "#FFFFFF" });
            $('#CatalogFileCode').attr({ alt: "", title: "" });

            return true;
        }



    }

    function ChangeCodeProduit() {
        CatalogFileAPI.StartUpdate();
        ValidateCodeProduit();
    }

    function fractionToDecimal(fraction) {

        var regexFraction = /^([0-9]+\s)?([0-9]+(\||\/)[0-9]+)$/;

        if (regexFraction.test(fraction)) {
            var parsedFraction = fraction.split(/\s/);

            if (parsedFraction.length > 1) {

                var integer = parseInt(parsedFraction[0], 10);
                var fractionArray = parsedFraction[1].split(/[\|\/]+/g);
                if (fractionArray.length > 1) {
                    var numerator = parseInt(fractionArray[0], 10);
                    var denominator = parseInt(fractionArray[1], 10);

                    return (integer + (numerator / denominator));
                }

            }
        }

        return fraction;
    }

    function ChangeLongueurProduit() {
        CatalogFileAPI.StartUpdate();

        var dimValue = fractionToDecimal($('#dimLongueurValue').val());

        $('#dimLongueurValue_reelles').val(dimValue);
        ValidateLongueurProduit();
    }

    function ChangeLongueurReelleProduit() {
        CatalogFileAPI.StartUpdate();
        ValidateLongueurProduit();
    }

    function ChangeLargeurProduit() {
        CatalogFileAPI.StartUpdate();

        var dimValue = fractionToDecimal($('#dimLargeurValue').val());

        $('#dimLargeurValue_reelles').val(dimValue);
        ValidateLargeurProduit();
    }

    function ChangeLargeurReelleProduit() {
        CatalogFileAPI.StartUpdate();
        ValidateLargeurProduit();
    }

    function ChangeHauteurProduit() {
        CatalogFileAPI.StartUpdate();

        var dimValue = fractionToDecimal($('#dimHauteurValue').val());

        $('#dimHauteurValue_reelles').val(dimValue);
        ValidateHauteurProduit();
    }

    function ChangeHauteurReelleProduit() {
        CatalogFileAPI.StartUpdate();
        ValidateHauteurProduit();
    }

    function ChangeDiametreProduit() {
        CatalogFileAPI.StartUpdate();
        ValidateDiametreProduit();

        var dimValue = fractionToDecimal($('#dimDiametreValue').val());

        $('#dimDiametreValue_reelles').val(dimValue);
    }

    function ChangeDiametreReelProduit() {
        CatalogFileAPI.StartUpdate();
        ValidateDiametreProduit();
    }

    function ValidateRequiredDimensions() {

        var r = true;

        if (_longueurExploitee) {
            r = ValidatorAPI.ValidateRequiredField('#dimLongueurValue');
        }

        if (_largeurExploitee) {
            r = ValidatorAPI.ValidateRequiredField('#dimLargeurValue');
        }

        if (_hauteurExploitee) {
            r = ValidatorAPI.ValidateRequiredField('#dimHauteurValue');
        }

        if (_diametreExploite) {
            r = ValidatorAPI.ValidateRequiredField('#dimDiametreValue');
        }
        return r;
    }



    function ValidateRequiredManufacturier() {

        if ((_manufacturierId == null) && (!_optionalManufacturier)) {
            return false;
        }

        return true;
    }


    function ValidateLongueurProduit() {
        if (_longueurExploitee) {
            return ValidateDimensionProduit('#dimLongueurValue_reelles', "La longueur saisie doit être au format numérique.");
        }
    }

    function ValidateLargeurProduit() {

        if (_largeurExploitee) {
            return ValidateDimensionProduit('#dimLargeurValue_reelles', "La largeur saisie doit être au format numérique.");
        }
    }

    function ValidateHauteurProduit() {

        if (_hauteurExploitee) {
            return ValidateDimensionProduit('#dimHauteurValue_reelles', "La hauteur saisie doit être au format numérique.");
        }
    }


    function ValidateDiametreProduit() {

        if (_diametreExploite) {
            return ValidateDimensionProduit('#dimDiametreValue_reelles', "Le diamètre saisi doit être au format numérique.");
        }
    }


    function SavedSearchKeys() {
        CatalogFileAPI.StartUpdate();
    }

    function ValidateDimensionProduit(idObjetDimension, messageNumeriqueDimension) {

        var regexNumeric = /^[0-9]+(\.[0-9]{1,})?$/;

        if (($(idObjetDimension).val() != '') && (!regexNumeric.test($(idObjetDimension).val()))) {
            $(idObjetDimension).css({ backgroundColor: "rgb(249, 170, 174)" });
            $(idObjetDimension).attr({ alt: messageNumeriqueDimension, title: messageNumeriqueDimension });

            return false;
        }
        else {
            $(idObjetDimension).css({ backgroundColor: "#FFFFFF" });
            $(idObjetDimension).attr({ alt: "", title: "" });

            return true;
        }

    }

    function StartAsNew() {
        RenderInterface();

        CatalogFileAPI.Edit();
        CatalogFileAPI.AddNew();
    }

    return {
        DisplayCatalogImage: function (imageName) {
            // swap cache...
            $('#CatalogFileImage').attr({ src: "images/CatalogImageCache/" + imageName + "?version=" + _imageVersion });
            _imageVersion++;

            CatalogFileAPI.StartUpdate();
        },

        DisplayFileUploader: function (display) {
            if (display) {
                $('#CatalogFileUploaderIFrame').css({ visibility: "visible", display: "block" });
            }
            else {
                $('#CatalogFileUploaderIFrame').css({ visibility: "hidden", display: "none" });

            }
        },

        OpenSearchKeysEditor: function () {
            var code;

            if (_mode == ModeEnum.Adding) {
                code = $('#CatalogFileCode').val();
            }
            else {
                code = _currentProductCode;
            }

            KeysEditor(KeywordsFactory.SearchKeys(SavedSearchKeys), code, _mode);
        },

        DissociateCategorie: function (id) {
            CatalogueClient.DissociateCategorie(id, DissociateCategorie_Complete);
        },

        DissociateEquivalence: function (id, name) {
            CatalogueClient.DissociateEquivalence(id, name, DissociateEquivalence_Complete);
        },


        AddNew: function () {
            var proceed = true;

            if ((_dirtyFile) || (_mode == ModeEnum.Adding)) {
                proceed = confirm("Souhaitez-vous annuler les modifications en cours?");
            }

            if (proceed) {
                _redirectionId = null;
                _dimPatternId = null;
                _manufacturierId = null;

                _longueurExploitee = false;
                _largeurExploitee = false;
                _hauteurExploitee = false;
                _diametreExploite = false;
                _unite = "";

                // implémenter une interface pour chaque type de fiche produit
                _file.AddNew();

                if ($('#ManufacturiersPlaceHolder').get(0) != null) {
                    $('#CatalogManufacturierId').html(_emptyString);
                }

                if ($('#CategoriesPlaceHolder').get(0) != null) {
                    _intModalStack++;
                    CatalogueClient.ResetCategoriesActives(ResetCategoriesActives_Complete);
                }

                if ($('#EquivalencesPlaceHolder').get(0) != null) {
                    _intModalStack++;
                    CatalogueClient.ResetEquivalencesActives(ResetEquivalencesActives_Complete);
                }

                if (_intModalStack > 0) {
                    ModalWait(_CatalogFileId, true, "silver");
                }


                $('#CatalogFileUploader').css({ visibility: "hidden", display: "none" });
                $('#CatalogFileImage').attr({ src: "images/produit-inconnu.png" });

                $('#CatalogFileHrefEnlargedImage').hide();
                $('#CatalogFileImage').show();

                $('#dimLongueurValue').val("");
                $('#dimLargeurValue').val("");
                $('#dimHauteurValue').val("");
                $('#dimDiametreValue').val("");

                // faire suivre les autres dimensions affichées

                RedrawDimensions();

                $('#' + _CatalogFileCtrlSaveId).attr("disabled", true);
                $('#' + _CatalogFileCtrlSaveAndCloseId).attr("disabled", true);
                $('#' + _CatalogFileCtrlDeleteId).attr("disabled", true);

                if (_currentProductCode != null) {
                    $('#' + _CatalogFileCtrlCancelId).attr("disabled", false);
                }
                else {
                    $('#' + _CatalogFileCtrlCancelId).attr("disabled", true);
                }

                $('#' + _CatalogFileCtrlCancelId).val("Annuler");


                _mode = ModeEnum.Adding;
            }
        },


        Save: function () {
            _closeAfterSave = false;

            // préconditions propres à la sauvegarde
            if (!ValidateRequiredManufacturier()) {
                alert("Vous devez sélectionner un manufacturier pour la fiche courante.");
            }
            else if ((_dimPatternId == null) && (!_optionalDimensions)) {
                alert("Vous devez sélectionner le format de dimensions du produit et y attribuer les dimensions voulues.");
            }
            else {

                // validateurs 
                var assertions = new Array();

                if (_mode == ModeEnum.Adding) {
                    assertions.push(ValidateCodeProduit());
                }

                if (!_optionalDimensions) {
                    assertions.push(ValidateRequiredDimensions());

                    assertions.push(ValidateDiametreProduit());
                    assertions.push(ValidateHauteurProduit());
                    assertions.push(ValidateLargeurProduit());
                    assertions.push(ValidateLongueurProduit());
                    assertions.push(ValidateManufacturier());
                }


                if (($.inArray(false, assertions) > -1) || (!_file.Validate())) {
                    alert("Une ou plusieurs erreurs se sont produites lors de la saisie.  Veuillez réviser la fiche.");
                }
                else {
                    switch (_mode) {
                        case ModeEnum.Adding:
                            _file.Add(
                                    $('#CatalogFileCode').val(),
                                    _typeProduitId,
                                    _familleId,
                                    _manufacturierId,
                                    _dimPatternId,
                                    _longueurExploitee ? $('#dimLongueurValue').val() : null,
                                    _largeurExploitee ? $('#dimLargeurValue').val() : null,
                                    _hauteurExploitee ? $('#dimHauteurValue').val() : null,
                                    _diametreExploite ? $('#dimDiametreValue').val() : null,
                                    _longueurExploitee ? $('#dimLongueurValue_reelles').val() : null,
                                    _largeurExploitee ? $('#dimLargeurValue_reelles').val() : null,
                                    _hauteurExploitee ? $('#dimHauteurValue_reelles').val() : null,
                                    _diametreExploite ? $('#dimDiametreValue_reelles').val() : null,
                                    _unite,
                                    _redirectionId
                                );
                            ModalWait(_CatalogFileId, true, "silver", "Ajout en cours...");

                            break;
                        case ModeEnum.Modifying:
                            _file.Update(
                                    _currentProductCode,
                                    _manufacturierId,
                                    _dimensionId,
                                    _dimPatternId,
                                    _longueurExploitee ? $('#dimLongueurValue').val() : null,
                                    _largeurExploitee ? $('#dimLargeurValue').val() : null,
                                    _hauteurExploitee ? $('#dimHauteurValue').val() : null,
                                    _diametreExploite ? $('#dimDiametreValue').val() : null,
                                    _longueurExploitee ? $('#dimLongueurValue_reelles').val() : null,
                                    _largeurExploitee ? $('#dimLargeurValue_reelles').val() : null,
                                    _hauteurExploitee ? $('#dimHauteurValue_reelles').val() : null,
                                    _diametreExploite ? $('#dimDiametreValue_reelles').val() : null,
                                    _unite,
                                    _redirectionId
                                );
                            ModalWait(_CatalogFileId, true, "silver", "Mise à jour en cours...");

                            break;
                        default:
                            break;

                    }
                }
            }
        },

        SaveAndClose: function () {
            CatalogFileAPI.Save();
            _closeAfterSave = true;
        },

        Delete: function () {
            if (confirm("Souhaitez-vous supprimer ce produit?")) {
                _file.Delete(_currentProductCode);
            }
        },

        StartUpdate: function () {
            if (_mode != ModeEnum.Adding) {
                $('#' + _CatalogFileCtrlSaveId).attr("disabled", false);
                $('#' + _CatalogFileCtrlSaveAndCloseId).attr("disabled", false);
                $('#' + _CatalogFileCtrlDeleteId).attr("disabled", false);
                $('#' + _CatalogFileCtrlCancelId).attr("disabled", false);

                _mode = ModeEnum.Modifying;
                _dirtyFile = true;
            }
            else {
                $('#' + _CatalogFileCtrlSaveId).attr("disabled", false);
                $('#' + _CatalogFileCtrlSaveAndCloseId).attr("disabled", false);
            }
        },

        DisplayPileFile: function (codeProduit, noModalWait) {
            _file = PileFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetPileByUniqueKey(codeProduit, DisplayPileFile_Complete);
            }
            else {
                StartAsNew();
            }
        },

        DisplayPileLithiumFile: function (codeProduit, noModalWait) {
            _file = PileLithiumFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetPileByUniqueKey(codeProduit, DisplayPileLithiumFile_Complete);
            }
            else {
                StartAsNew();
            }
        },

        DisplayBatterieDemarrageAutoFile: function (codeProduit, noModalWait) {
            _file = BatterieDemarrageAutoFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetBatterieDemarrageByUniqueKey(codeProduit, DisplayBatterieDemarrageAutoFile_Complete);
            }
            else {
                StartAsNew();
            }

        },

        DisplayBatterieDemarrageMarineFile: function (codeProduit, noModalWait) {
            _file = BatterieDemarrageMarineFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetBatterieDemarrageByUniqueKey(codeProduit, DisplayBatterieDemarrageMarineFile_Complete);
            }
            else {
                StartAsNew();
            }


        },

        DisplayBatterieCelluleBlocFile: function (codeProduit, noModalWait) {
            _file = BatterieCelluleBlocFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetBatterieCelluleBlocByUniqueKey(codeProduit, DisplayBatterieCelluleBlocFile_Complete);
            }
            else {
                StartAsNew();
            }

        },


        DisplayBatterieIndustrielleFile: function (codeProduit, noModalWait) {
            _file = BatterieIndustrielleFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetBatterieIndustrielleByUniqueKey(codeProduit, DisplayBatterieIndustrielleFile_Complete);
            }
            else {
                StartAsNew();
            }

        },

        DisplayBatterieMotoriseFile: function (codeProduit, noModalWait) {
            _file = BatterieMotoriseFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetBatterieMotoriseByUniqueKey(codeProduit, DisplayBatterieMotoriseFile_Complete);
            }
            else {
                StartAsNew();
            }

        },

        DisplayBatterieScelleeAcideFile: function (codeProduit, noModalWait) {
            _file = BatterieScelleeAcideFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetBatterieScelleeAcideByUniqueKey(codeProduit, DisplayBatterieScelleeAcideFile_Complete);
            }
            else {
                StartAsNew();
            }

        },

        DisplayChargeurFile: function (codeProduit, noModalWait) {
            _file = ChargeurFileAPI;

            if (codeProduit != null) {
                if (!noModalWait) {
                    ModalWait(_CatalogFileId, true, "silver");
                }

                CatalogueClient.GetChargeurByUniqueKey(codeProduit, DisplayChargeurFile_Complete);
            }
            else {
                StartAsNew();
            }

        },

        CreateCatalogFile: function () {
        },

        OpenCatalogFile: function (gabaritCatalogue, codeProduit, familleId, typeProduitId, closeCallback) {
            if (!_opening) {

                _opening = true;
                _dirtyCatalog = new Array();

                _familleId = familleId;

                _typeProduitId = typeProduitId;

                _mode = ModeEnum.Reading;

                _optionalDimensions = true;
                _optionalManufacturier = true;

                var toInvoke;
                var eHeight;

                switch (gabaritCatalogue) {

                    case "Pile":
                        eHeight = EditorHeight.Pile.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayPileFile;
                        break;
                    case "PileLithium":
                        eHeight = EditorHeight.PileLithium.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayPileLithiumFile;
                        break;
                    case "DemarrageAuto":
                        eHeight = EditorHeight.DemarrageAuto.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayBatterieDemarrageAutoFile;
                        break;
                    case "DemarrageMarine":
                        eHeight = EditorHeight.DemarrageMarine.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayBatterieDemarrageMarineFile;
                        break;
                    case "CelluleBloc":
                        eHeight = EditorHeight.CelluleBloc.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayBatterieCelluleBlocFile;
                        break;
                    case "ScelleeAcide":
                        eHeight = EditorHeight.ScelleeAcide.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayBatterieScelleeAcideFile;
                        break;
                    case "Industrielle":
                        eHeight = EditorHeight.Industrielle.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayBatterieIndustrielleFile;
                        break;
                    case "Motorise":
                        eHeight = EditorHeight.Motorise.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayBatterieMotoriseFile;
                        break;
                    case "Chargeur":
                        eHeight = EditorHeight.Chargeur.ReadMode;
                        toInvoke = CatalogFileAPI.DisplayChargeurFile;
                        break;
                }

                if (toInvoke != null) {

                    if (closeCallback != null) {
                        _closeCallback = closeCallback;
                    }
                    else {
                        _closeCallback = null;
                    }

                    var scrollTop = getScrollTop();
                    $('#' + _CatalogFileId).css({ top: scrollTop + 195 });
                    $('#' + _CatalogFileId).css({ visibility: 'visible', display: 'block' });

                    $('#CatalogFileSplash').show();

                    $('#CatalogFileSplash').css({ top: 0, left: (-1 * $('#body').offset().left), width: $(document).width(), height: $(document).height() });

                    $('#' + _CatalogFileCtrlEditId).attr("disabled", true);


                    $('#' + _CatalogFileId).animate(
                        { top: 30 + scrollTop, height: eHeight }, 400,
                        function () {

                            $('#' + _CatalogFileId).animate({ left: 70, width: 500 }, 400,
                                function () {
                                    _opening = false;
                                    toInvoke(codeProduit, true);
                                    $('#' + _CatalogFileWrapperId).css({ visibility: 'visible', display: 'block' });
                                }
                            );
                        }
                    );
                }
            }
        },

        ResizeCatalogFile: function (height, callback) {

            $('#' + _CatalogFileId).animate(
                        { top: 30, height: height }, 0, callback);
        },

        CloseCatalogFile: function () {

            // permettre de fermer uniquement si le site n'est pas en état modal.
            if ((!IsModal()) && (!_opening)) {
                var proceed = true;
                if ((_dirtyFile) || (_mode == ModeEnum.Adding)) {
                    proceed = confirm("Attention!  Vous perdrez les modifications en cours si vous fermez cette fiche.\n\nPoursuivre?");
                }


                if (proceed) {
                    clearFile();

                    var scrollTop = getScrollTop();

                    _dirtyFile = false;

                    $('#' + _CatalogFileId).animate(
                        { top: scrollTop + 195, height: 0 }, 400,
                        function () {
                            $('#' + _CatalogFileId).animate({ left: 270, width: 0 }, 400,
                                function () { closedFile(); }
                            );
                        }
                     );
                }
            }
        },


        AddItemToList: function () {
            if (_currentProductCode != null) {
                AddItemToList(_currentProductCode, AddItemToList_Complete);
            }
        },

        Cancel: function () {
            if (_mode == ModeEnum.Adding) {
                // on annule un ajout en cours.

                CancelAddNew();
            }
            else if (_mode == ModeEnum.Modifying) {
                // on retourne en mode lecture (on quitte le mode Édition)
                CancelEdit();
            }
        },

        AddedNew: function () {
            var newProductCode = $('#CatalogFileCode').val();

            $('#CatalogFileCode').val("");

            GoBackToEditMode(newProductCode);

            if (_dirtyCatalog[_currentProductCode] == null) {
                _dirtyCatalog[_currentProductCode] = true;
            }

            if (_closeAfterSave) {
                CatalogFileAPI.CloseCatalogFile();
            }
        },

        Error: function (result, innerMessage) {

            switch (result) {
                case CatalogueClient.Resultats.AccesInterdit:
                    innerMessage = "Vous devez être authentifié et reconnu par le système pour effectuer cette action.";

                    break;
                case CatalogueClient.Resultats.ErreurInattendue:

                    innerMessage = "Une erreur inattendue s'est produite.  Veuillez contacter l'administrateur du site.";

                    break;
            }

            if ((innerMessage != null) && (innerMessage != "")) {
                alert(innerMessage);
            }

            ModalWait(_CatalogFileId, false);
        },

        UpdatedFile: function () {
            _dirtyFile = false;
            $('#' + _CatalogFileCtrlSaveId).attr("disabled", true);
            $('#' + _CatalogFileCtrlSaveAndCloseId).attr("disabled", true);

            ModalWait(_CatalogFileId, false);

            if (_dirtyCatalog[_currentProductCode] == null) {
                _dirtyCatalog[_currentProductCode] = true;
            }

            if (_closeAfterSave) {
                CatalogFileAPI.CloseCatalogFile();
            }
        },

        DeletedFile: function () {
            _dirtyFile = false;

            if (_dirtyCatalog[_currentProductCode] == null) {
                _dirtyCatalog[_currentProductCode] = true;
            }

            clearFile();

            $('#' + _CatalogFileId).animate(
                    { top: 295, opacity: 0 }, 400, function () {
                        $('#' + _CatalogFileId).css({ display: "none", visibility: "hidden", top: 195, left: 270, width: 0, height: 0, opacity: 0.95 });
                        closedFile();
                    });
        },

        SetOptionalDimensions: function (optional) {

            _optionalDimensions = optional;

        },

        SetOptionalManufacturier: function (optional) {

            _optionalManufacturier = optional;

        },


        Edit: function () {
            _mode = ModeEnum.Modifying;

            SetCategoriesActivesHover();
            SetEquivalencesActivesHover();

            $('#' + _CatalogFileCtrlCancelId).attr("disabled", false);

            $('#CatalogFileUploader').css({ visibility: "visible", display: "block" });
            $('#CatalogFileSearchKeys').show();

            $('#manufacturiersEditor').show();
            $('#resetManufacturier').show();

            $('#categoriesEditor').show();

            $('#equivalencesEditor').show();

            $('#RedirectionExternePlaceHolder').css({ visibility: "visible", display: "block" });


            $('#dimensionsEditor').css({ visibility: "visible", display: "block" });
            $('#resetDimensions').css({ visibility: "visible", display: "block" });

            $('#dimensionsReellesWrapper').css({ visibility: "visible", display: "block" });

            $('#dimLongueurValue').css({ visibility: "visible", display: "block" });
            $('#dimLargeurValue').css({ visibility: "visible", display: "block" });
            $('#dimHauteurValue').css({ visibility: "visible", display: "block" });
            $('#dimDiametreValue').css({ visibility: "visible", display: "block" });
            $('#dimLongueurValue_reelles').css({ visibility: "visible", display: "block" });
            $('#dimLargeurValue_reelles').css({ visibility: "visible", display: "block" });
            $('#dimHauteurValue_reelles').css({ visibility: "visible", display: "block" });
            $('#dimDiametreValue_reelles').css({ visibility: "visible", display: "block" });

            $('#dimLongueurValueRead').css({ visibility: "hidden", display: "none" });
            $('#dimLargeurValueRead').css({ visibility: "hidden", display: "none" });
            $('#dimHauteurValueRead').css({ visibility: "hidden", display: "none" });
            $('#dimDiametreValueRead').css({ visibility: "hidden", display: "none" });

            $('#CatalogFileEdit').css({ visibility: "visible", display: "block" });
            $('#CatalogFileRead').css({ visibility: "hidden", display: "none" });

            _file.Edit();
        },

        Blur: function () {

            Modal(_CatalogFileId, true);

        }

    };


} ());


