
/**
* Funcions de javascript usades amb els controls de telerik.
* @classDescription Funcions de javascript usades amb els controls de telerik.
* @author msalla
* @id TLK
* @namespace TLK
*/
/**
* @classDescription Funcions de javascript usades amb els controls de telerik.
* @author msalla
*/
/* extern seGlobal.js */
/* extern seUtils.js */
/* extern jquery.js */
/* extern jquery.maxzindex.js */

if (window.TLK === undefined) {
    var TLK = {
        STR_SELECTION_NEEDED: '',
        STR_DELETE_QUESTION: '',

        RadAlert: function(aText, aWidth, aTitulo, aCallBackFunction) {
            if (window.top.TLK) {
                var lCurrWnd = TLK.GetRadWindow();
                if (lCurrWnd) {
                    var lIsCurrWndModal = lCurrWnd.isModal();
                    lCurrWnd.set_modal(false);
                    lCurrWnd.show();
                }
                var lWnd = window.top.TLK.ShowAlertFull(aText, aWidth, 1, aTitulo, aCallBackFunction);

                if (lCurrWnd) {
                    lWnd.add_close(function() {
                        lCurrWnd.set_modal(lIsCurrWndModal);
                    });
                }
                return lWnd;
            }
        },

        RadConfirm: function(aText, aCallBackFunction, aWidth, aTitulo) {
            if (window.top.TLK) {
                var lCurrWnd = TLK.GetRadWindow();
                if (lCurrWnd) {
                    var lIsCurrWndModal = lCurrWnd.isModal();
                    lCurrWnd.set_modal(false);
                    lCurrWnd.show();
                }
                var lWnd = window.top.TLK.ShowConfirmFull(aText, aCallBackFunction, aWidth, 1, aTitulo);

                if (lCurrWnd) {
                    lWnd.add_close(function() {
                        lCurrWnd.set_modal(lIsCurrWndModal);
                    });
                }
                return lWnd;
            }
        },

        ShowAlertFull: function(aText, aWidth, aHeight, aTitulo, aOnCloseCallback) {
            var oWnd = null;
            if (!aTitulo) {
                aTitulo = 'Aviso';
            }
            oWnd = radalert(aText, aWidth, aHeight, aTitulo);
            if (aOnCloseCallback) {
                oWnd.add_close(aOnCloseCallback);
            }
            oWnd.set_behaviors(Telerik.Web.UI.WindowBehaviors.Close + Telerik.Web.UI.WindowBehaviors.Move);
            return oWnd;
        },
        RadPrompt: function(text, callBackFn, aTitulo, defaultValue, oWidth, oHeight, callerObj) {
            if (window.top.TLK) {
                var lCurrWnd = TLK.GetRadWindow();
                if (lCurrWnd) {
                    var lIsCurrWndModal = lCurrWnd.isModal();
                    lCurrWnd.set_modal(false);
                    lCurrWnd.show();
                }
                var lWnd = window.top.TLK.ShowPromptFull(text, callBackFn, oWidth, oHeight, callerObj, aTitulo, defaultValue);

                if (lCurrWnd) {
                    lWnd.add_close(function() {
                        lCurrWnd.set_modal(lIsCurrWndModal);
                    });
                }
                return lWnd;
            }
        },
        ShowPromptFull: function(aText, aCallBackFunction, aWidth, aHeight, callerObj, aTitulo, defaultValue) {
            var oWnd = null;
            if (aTitulo === null) {
                aTitulo = 'Introduzca el valor indicado';
            }
            oWnd = radprompt(aText, aCallBackFunction, aWidth, aHeight, callerObj, aTitulo, defaultValue);
            oWnd.set_behaviors(Telerik.Web.UI.WindowBehaviors.Close + Telerik.Web.UI.WindowBehaviors.Move);
            return oWnd;
        },
        ShowConfirmFull: function(aText, aCallBackFunction, aWidth, aHeight, aTitulo) {
            var oWnd = null;
            if (aTitulo === null) {
                aTitulo = 'Confirmaci&oacute;n';
            }
            oWnd = radconfirm(aText, aCallBackFunction, aWidth, aHeight, null, aTitulo);
            oWnd.set_behaviors(Telerik.Web.UI.WindowBehaviors.Close + Telerik.Web.UI.WindowBehaviors.Move);
            return oWnd;
        },
        GetTopDialogOpener: function() {
            if (window.top.MainFormManager) {
                return window.top.$find(window.top.MainFormManager.DialogOpenerClientID);
            }
        },
        /**
        * Opens a Modal window. Takes care if the windows is inside another modal window
        * automatically.
        * @param {Object} aUrl
        * @param {Object} aCallbackFunction
        * @param {Object} aRadWindowName
        * @param {Object} aRadManager
        * @param {Object} AWidth :width
        * @param {Object} AHeight :height
        */
        OpenModalWindow: function(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth/*:width*/, AHeight/*:height*/, aOnCloseCallback) {
            return TLK.OpenModalWindowInsideRadWindow(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth, AHeight, aOnCloseCallback);
        },
        OpenModalWindowRedim: function(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth/*:width*/, AHeight/*:height*/, aOnCloseCallback) {

            var oWnd = TLK.OpenModalWindowInsideRadWindow(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth, AHeight, aOnCloseCallback);
            oWnd.set_behaviors(Telerik.Web.UI.WindowBehaviors.Resize + Telerik.Web.UI.WindowBehaviors.Close + Telerik.Web.UI.WindowBehaviors.Move + Telerik.Web.UI.WindowBehaviors.Maximize);
            //oWnd.set_visibleStatusbar(false);
            oWnd.add_pageLoad(function() {
                oWnd.set_status('');
            });
            oWnd.add_command(function(sender, args) {
                if (args.get_commandName() == "Maximize") {
                    var lContentBody = window.top.document.body;
                    AWidth = oWnd.get_width();
                    AHeight = oWnd.get_height();
                    if (lContentBody) {
                        oWnd.setSize(lContentBody.offsetWidth + "px", lContentBody.offsetHeight + lContentBody.offsetTop - 4 + "px");
                    }
                }
                if (args.get_commandName() == "Restore") {
                    window.setTimeout(function() {
                        if (oWnd !== null && oWnd.isClosed() === false) {
                            oWnd.setSize(AWidth, AHeight);
                        }
                    }, 50);
                }
            });

            return oWnd;
        },
        _OpenModalWindow: function(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth/*:width*/, AHeight/*:height*/, aOnCloseCallback) {
            var oWnd = null;
            if (window.top.TLK) {
                if (aRadManager) {
                    oWnd = window.top.TLK.ShowCenteredWindowWithManager(aRadManager, aUrl, aRadWindowName, AWidth, AHeight);
                }
                else {
                    oWnd = window.top.TLK.ShowCenteredWindow(aUrl, aRadWindowName, AWidth, AHeight);
                }
            }
            else {
                if (aRadManager) {
                    oWnd = TLK.ShowCenteredWindowWithManager(aRadManager, aUrl, aRadWindowName, AWidth, AHeight);
                }
                else {
                    oWnd = TLK.ShowCenteredWindow(aUrl, aRadWindowName, AWidth, AHeight);
                }
            }
            if (oWnd) {
                if (aCallbackFunction) {
                oWnd.ClientCallBackFunction = aCallbackFunction;
                }
                if (aOnCloseCallback) {
                    oWnd.add_close(aOnCloseCallback);
                }
                oWnd.setActive();
                oWnd.set_modal(true);
            }
            return oWnd;
        },
        OpenModalWindowInsideRadWindow: function(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth/*:width*/, AHeight/*:height*/, aOnCloseCallback) {
            var lCurrWnd = TLK.GetRadWindow();
            if (lCurrWnd) {
                var lIsCurrWndModal = lCurrWnd.isModal();
                lCurrWnd.set_modal(false);
                lCurrWnd.show();
            }
            var lWnd = TLK._OpenModalWindow(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth, AHeight, aOnCloseCallback);
            if (lCurrWnd) {
                lWnd.add_pageLoad(function() {
                    TLK.SizeToFitWindow(lWnd);
                    lWnd.show();
                });
                lWnd.add_close(function() {
                    lCurrWnd.set_modal(lIsCurrWndModal);
                });
            }
            return lWnd;
        },

        OpenModalWindowInsideRadWindowWithoutSizeFit: function(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth/*:width*/, AHeight/*:height*/, aOnCloseCallback) {
            var lCurrWnd = TLK.GetRadWindow();
            if (lCurrWnd) {
                var lIsCurrWndModal = lCurrWnd.isModal();
                lCurrWnd.set_modal(false);
                lCurrWnd.show();
            }
            var lWnd = TLK._OpenModalWindow(aUrl, aCallbackFunction, aRadWindowName, aRadManager, AWidth, AHeight, aOnCloseCallback);
            if (lCurrWnd) {
                lWnd.add_pageLoad(function() {
                    lWnd.center();
                    lWnd.show();
                });
                lWnd.add_close(function() {
                    lCurrWnd.set_modal(lIsCurrWndModal);
                });
            }
            return lWnd;
        },

        GetRadWindow: function() {
            var oWnd = null;
            try {
                if (window.radWindow) {
                    oWnd = window.radWindow;
                }
                else
                    if (window.frameElement && window.frameElement.radWindow) {
                    oWnd = window.frameElement.radWindow;
                }
            }
            catch (e) {
            }
            return oWnd;
        },

        LocaLizeWindowManager: function(/*window:*/aWindow) {
            //Translate tooltips
            if (aWindow.Telerik.Web.UI.RadWindowUtils !== undefined) {

                if (!aWindow.Telerik.Web.UI.RadWindowUtils.Localized) {
                    aWindow.Telerik.Web.UI.RadWindowUtils.Localization =
                    {
                        "Close": "Cerrar",
                        "Minimize": "Minimizar",
                        "Maximize": "Maximizar",
                        "Reload": "Recargar",
                        "PinOn": "Fijar",
                        "PinOff": "Liberar",
                        "Restore": "Restaurar",
                        "OK": "Aceptar",
                        "Cancel": "Cancelar",
                        "Yes": "Si",
                        "No": "No"

                    };
                    aWindow.Telerik.Web.UI.RadWindowUtils.Localized = true;
                }
            }
        },

        /*Obtiene el RadWindowManager intentando obtener primero el del Frame
        exterior y sino existe el del frame actual*/
        GetRadWindowManager: function() {

            try {

                //Translate tooltips                

                //We should allways try to use the top window acting as the coordinator.
                if (window.top != window) {


                    if ((!window.top.GetRadWindowManager) || (window.top.GetRadWindowManager === undefined)) {
                        window.console.error('RadWindowManager not found.');

                    }
                    else {
                        this.LocaLizeWindowManager(window.top);
                        return window.top.GetRadWindowManager.apply({}, arguments);
                    }
                }
                else {

                    if ((!window.GetRadWindowManager) || (window.GetRadWindowManager === undefined)) {
                        window.console.error('RadWindowManager not found.');
                    }
                    else {
                        this.LocaLizeWindowManager(window);
                        return window.GetRadWindowManager.apply({}, arguments);
                    }
                }

            }
            catch (ex) {

                // Probably an access denied error because of XDS
                if ((!window.GetRadWindowManager) || (window.GetRadWindowManager === undefined)) {
                    window.console.error('RadWindowManager not found.');
                }
                else {
                    return window.GetRadWindowManager.apply({}, arguments);
                }
            }
        },
        OnClientClose: function(aRadWindow) {
            $.topTrigger('OnClientClose', aRadWindow);
        },
        /**
        * Obté la referència a la radWindow actual.
        */
        GetCurrentRadWindow: function() /*: RadWindow*/{
            var lWindow = undefined;

            if (window.radWindow) {
                lWindow = window.radWindow; //Will work in Moz in all cases, including clasic dialog            
            }
            else
                if ((window.frameElement) && (window.frameElement.radWindow)) {
                lWindow = window.frameElement.radWindow; //IE (and Moz az well)
            }

            return lWindow;
        },
        /**
        * Tanca la radwindow actual si n'hi ha.
        */
        CloseCurrentRadWindow: function() /* void */{
            var lCurrentRadWindow/*:RadWindow*/;

            lCurrentRadWindow = TLK.GetCurrentRadWindow();

            if (lCurrentRadWindow !== undefined) {
                /* Si la finestra es tanca retorna l'objecte finestra com a paràmetre en el OnClientClose 
                del RadWindowManager origen de la crida */
                lCurrentRadWindow.close();
            }
        },
        /**
        * Ajusta la mida de la finestra rebuda com a paràmetre ajustant-la al contingut.
        * @param {Object} ARadWindow :RadWindow
        */
        SizeToFitWindow: function(ARadWindow/*:RadWindow*/) /*void*/{
            if ((ARadWindow) && (ARadWindow.isVisible)) {
                //debugger;
                ARadWindow.set_width(document.body.scrollWidth + 10);
                ARadWindow.set_height(document.body.scrollHeight + 70);
                //var ldocument = ARadWindow.get_contentFrame().document;
                //var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;

                //var dsocleft=document.all? iebody.scrollLeft : window.pageXOffset;
                //var dsoctop=document.all? iebody.scrollTop : window.pageYOffset;
                //if (window.innerWidth) 
                //{
                //	ARadWindow.set_width(window.innerWidth + 10);
                //	ARadWindow.set_height(window.innerHeight + 70);
                //}
                //else 
                //{
                //	ARadWindow.set_width(ldocument.body.scrollWidth + 10);
                //	ARadWindow.set_height(ldocument.body.scrollHeight + 70);
                //}
                ARadWindow.center();
            }
        },
        RegisterGlobal: function(aWnd/*:RadWindow*/) /*void*/{
            if (window.seGlobal) {
                aWnd.seGlobal = window.seGlobal;
            }
            if (window.utils) {
                aWnd.utils = window.utils;
            }
        },
        SetRadManagerMaxZIndex: function(aManager) {
            var lMaxZIndex = $.maxZIndex();
            var lManagerZIndex = aManager.get_zIndex();
            if (lMaxZIndex > lManagerZIndex) {
                aManager.set_zIndex(lMaxZIndex + 1);
            }
        },
        /**
        * Obre una finestra centrada a la mida que li especifiquem.
        * @ADestination {url}
        * @ARadWindowName {string}
        * @AWitdh {int}
        * @AHeight {int}
        */
        ShowCenteredWindow: function(/*url*/ADestination, /*string*/ARadWindowName, /*width*/AWidth, /*height*/AHeight) /*: Window */{
            var oManager = TLK.GetRadWindowManager();
            if (oManager) {
                TLK.SetRadManagerMaxZIndex(oManager);
                var oWnd = oManager.open(ADestination, ARadWindowName); //radopen(ADestination, ARadWindowName);
                TLK.ConfigureWindow(oWnd, AWidth, AHeight, null);
                return oWnd;
            }
            return null;
        },
        /*Para abrir la ventana especificando el Manager*/
        ShowCenteredWindowWithManager: function(/*Especificamos QUE manager utilizar*/aManager, /*url*/ADestination, /*string*/ARadWindowName, /*width*/AWidth, /*height*/AHeight) /*: Window */{
            TLK.SetRadManagerMaxZIndex(aManager);
            var oWnd = aManager.open(ADestination, ARadWindowName); //radopen(ADestination, ARadWindowName);
            TLK.ConfigureWindow(oWnd, AHeight, AWidth, null);
            return oWnd;
        },
        /**
        * Tanca la finestra actual.
        * @param {Object} ARadWindow :RadWindow
        */
        ShowMDIWindow: function(ADestination/*:url*/, AWidth/*:width*/, AHeight/*:height*/) {
            var oManager = TLK.GetRadWindowManager();
            var oWnd = oManager.Open(ADestination);
            oWnd.SetSize(AWidth, AHeight);
            TLK.RegisterGlobal(oWnd);
        },
        /**
        * Ajusta la mida de la finestra rebuda com a paràmetre ajustant-la al contingut.
        * @param {Object} ARadWindow :RadWindow
        */
        SizeToFitCurrentWindow: function() /*void*/{
            window.setTimeout(function() {
                TLK.SizeToFitWindow(TLK.GetCurrentRadWindow());
            });
        },
        ShowDynContentWindow: function(AContent, AWidth, AHeight, ADestination) /*void*/{
            var oManager = TLK.GetRadWindowManager();
            var oWnd = oManager.Open(ADestination);
            TLK.ConfigureWindow(oWnd, AHeight, AWidth, null);
            return oWnd;
        },
        /*Logica de configuración de apertura de ventanas
        (que antes estaba repetida el 10.000 lugares)*/
        ConfigureWindow: function(aWnd, AWidth, AHeight, AContent) {
            if (AContent) {
                aWnd.SetContent(AContent);
            }
            // Esto es un bug porque el código debería ser
            // if ((!AWidth) && (!AHeight)) pero eso provoca que como
            // hay llamadas que no especifican valores AWidth y AHeight
            // la ventana inicialmente aparece pequeña y queda mejor
            // que ajustándose realmente al contenido
            if ((AWidth === null) && (AHeight === null)) {
                TLK.SizeToFitWindow(aWnd);
            }
            else {
                aWnd.SetSize(AWidth, AHeight);
            }
            aWnd.Center();
            TLK.RegisterGlobal(aWnd);
        },
        /*Función de busqueda para elementos de telerik. Pensada para RadMenu, probablemente
        funcione con RadPanelBar, etc*/
        ContainsChild: function(parent, childName) {
            var items = parent.get_items();
            var n = 0;
            var found = false;
            while (n < items.get_count() && !found) {
                if (items.getItem(n).get_value() == childName) {
                    found = true;
                }
                ++n;
            }
            return found;
        }
    };
}





