
/**
 * 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 (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){
            utils.evt.ExecuteGlobalEvent('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;
        },
        ShowContentCenteredWindow: function(AContent/*:html*/, AWidth/*:width*/, AHeight/*:height*/) /* : Window */{
            var oManager = TLK.GetRadWindowManager();
            TLK.SetRadManagerMaxZIndex(oManager);
            var oWnd = oManager.Open(null);
            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;
        },
        EditRow: function(){
            if (arguments[1] != -1) {
                TLK.ShowCenteredWindow(utils.str.formatArray(arguments), 550, 400);
            }
            else {
                alert(TLK.STR_SELECTION_NEEDED);
            }
        },
        ShowRow: function(){
            if (arguments[1] != -1) {
                window.location.href = utils.str.formatArray(arguments);
            }
            else {
                alert(TLK.STR_SELECTION_NEEDED);
            }
        },
        NewRow: function(){
            window.location.href = utils.str.formatArray(arguments);
        },
        /*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;
        }
    };
}




