/**
 * Obsługa menu i linkowania na stronie utf-8
 * @version 1.31
 *
 * 1.30 - możliwość wysyłania wieloktrotnego filtru
 * 1.31 - poprawka w setBack
 */

var ajaxAction = {

    getURL : '/ajax.do.php',
    instance : this,

    setLayoutManager : function(lm) {
        ajaxAction.layoutManager = lm;
    },

    sender : new AjaxCommands('/ajax.do.php'),

    /**
     * Funckja do ustawiania parametrów
     * takze zmiennych sesyjnych, drugi parametr postAction tru wywołuje
     * przeładowanie strony lub wywołanie wskazanej metody po ustawieniu */
    setAction : function(parameters, postAction) {

        var param = "?cmd=set";
        var url = '/ajax.do.php' + param;

        var sender = new DestSender();
        if (postAction) {
            if (postAction == true) sender.listener = this.reload;
            else sender.listener = postAction
        }
        sender.get(url, parameters);
    },

    /** 
     *Przeładowuje stronę
     */
    reload : function(text, xml, sender) {
        location.reload();
    },

    openSubmenuElement : null,

    /* metoda zajmuje się sterowaniem rozwijania podmenu */
    subMenuAction : function(groupName) {

        var group = document.getElementById(groupName);

        if (this.openSubmenuElement) {
            this.collapse(this.openSubmenuElement, true);

            var out = this.openSubmenuElement == group;
            this.openSubmenuElement = null;
            if (out)return;
        }
        
        
        if (group) {
            this.openSubmenuElement = group;
            this.collapse(group, group.style.display != 'none');
        }

    },

    /* Zamyka lub otwiera podmenu subMenu w zależności od collapse */
    collapse : function(subMenu, collapse) {
        if (collapse) {
            subMenu.style.display = "none";
        } else {
            subMenu.style.display = "";
        }
    },


    /**
     * Wywołuje żądanie zmiany wersji językowe  - wymaga podania skrótu
     * Przeładowuje witrynę
     */
    setLang : function(lang) {
        ajaxAction.setAction({'c_lang' : lang}, true);
    },


    /* pamięta, że trwa oczekiwanie na odpowiedź */
    actionTask : false,

    menuAction : function(actionName, params, keyAction, targetId, postAction) {

        /* Nie można tego włączyć, gdyż */
//        this.subMenuAction();

        if (ajaxAction.actionTask) return;
        ajaxAction.actionTask = true;

        if (!params) params = new Array();

        params['action'] = actionName;

        var toStore = ajaxAction.waitSignalEnabled(keyAction);
        ajaxAction.sender.send(
            params, null, ajaxAction.waitSignalDisabled, toStore, targetId );

    },

    ajaxCommand : function(actionName, moduleName, cmdName, params, keyAction, targetId){

    },

    uniAction : function(actionName, moduleName, params, keyAction, targetId){

        if (ajaxAction.actionTask) return;
        ajaxAction.actionTask = true;
        
        if (!params) params = new Array();

        params['action'] = actionName;
        if (moduleName) params['module'] = moduleName;

        var toStore = ajaxAction.waitSignalEnabled(keyAction);
        ajaxAction.sender.send(
            params, null, ajaxAction.waitSignalDisabled, toStore, targetId );

    },

    moduleAction : function(moduleName, params, keyAction, targetId) {

        if (ajaxAction.actionTask) return;
        ajaxAction.actionTask = true;

        if (!params) params = new Array();

        params['module'] = moduleName;

        var toStore = ajaxAction.waitSignalEnabled(keyAction);
        ajaxAction.sender.send(
            params, null, ajaxAction.waitSignalDisabled, toStore, targetId );

    },

    moduleAction_old : function(moduleName, parameters, keyAction, targetId) {
        //        alert("Dla modułu: " + moduleName + " parametr id: "+ parameters['id']);

//        if (ajaxAction.actionTask) return;
        ajaxAction.actionTask = true;
        
        var param = "?ajax";
        if (moduleName) param += "&module=" + moduleName;
        var url = ajaxAction.getURL + param;

        var sender = new DestSender(targetId);
        sender.listener = ajaxAction.waitSignalDisabled;
        ajaxAction.waitSignalEnabled(keyAction, sender);
        sender.get(url, parameters);
    },


    systemAction : function(action, parameters, keyAction, targetId) {

        if (ajaxAction.actionTask) return;
        ajaxAction.actionTask = true;

        var param = "";
        param += "?ajax&system=" + action;
        var url = '/ajax.do.php' + param;

//        var sender = new DestSender();
        var sender = new DestSender(targetId);
        sender.setIgnoreServerDest(true);
        sender.listener = this.waitSignalDisabled;
        this.waitSignalEnabled(keyAction, sender);
        sender.get(url, parameters);
    },

    //    i : 100,
    
    /* włącza akcję oczekiwania na odpowiedź z serwera */
    waitSignalEnabled : function(keyAction, sender) {
        
        if (keyAction == null || keyAction.innerHTML == null) {

//            var loading = $el("_loading");
//            var winWidth = document.body.offsetWidth;
//            var winHeight = document.body.offsetHeight;
//
//            var e = new WebElement('_loading2');
//
////                loading.offsetLeft - (loading.offsetWidth - loading.clientWidth);
//
//            var elHeight = loading.offsetTop;
//
//            alert("Rozmiar loadera: " + elWidth + " = " + winHeight);
//
//
//            var top = (winHeight - elHeight) / 2;
//            var left = (winWidth - elWidth) / 2;
//            loading.style.left = left + "px";
//            loading.style.top = top + "px";

//              waiter.style.display = "block";
            return null;
        }



        var toStore = {
            'key':       keyAction,
            'key.inner': keyAction.innerHTML,
            'key.cursor':keyAction.style.cursor
        }
//
//        if (sender) sender.save('stored', toStore);

//        $loadingText = slownik.translate("wczytywanie danych");
//        keyAction.innerHTML= '<span>' + $loadingText +'</span>';
//        keyAction.style.cursor= 'wait';
        
        return toStore;
    },
    
    /* wyłącza akcję oczekiwania na odpowiedź z serwera */
    waitSignalDisabled : function(text, xml, sender, status) {
        
        ajaxAction.actionTask = false;
        window.status = "";


        /* ustawienie layout */
        if (ajaxAction.layoutManager && xml) {
            var p = xml.getElementsByTagName('package');
            if (p) {
                
                var layout = p[0].getAttribute('dynamicLayout');
                if (layout) {
                    sender.insertFunction = ajaxAction.layoutManager[layout];
                }
            }
        }

        /** sprawdzenie, zy wymagane jest przsesunięcie zawartości
         * witryny do góry, zakłądając, że zawartośc zawarta jest 
         * w container
         */
        var scroll = document.documentElement.scrollTop;
        var srodekTop = $el('content').clientHeight;
        if ( (!srodekTop && srodekTop !== 0) || (scroll - srodekTop > 50) )
            window.scroll(0, 0);

        return true;
    },

    /**
     * Dodaje witrynę do ulubionych
     */
    addFavorite : function() {
        var url = window.location.href;
        var title = document.title;
        
        if (this.isIE()) {
            window.external.addFavorite(url, title);
        } else
        if (window.sidebar) {
            window.sidebar.addPanel(title, url,"");
        } else
        if (window.opera && window.print) {

            var a = document.createElement('a');
            a.setAttribute('href', adres);
            a.setAttribute('title', tytul);
            a.setAttribute('rel','sidebar');
            a.click();
        } else {
            alert("Zastosuj CTRL + D aby dodać witrynę do ulubionych");
        }
    },


    search : function(fraza, actionKey, respondeDIV) {

        if (fraza == '') {
            alert('Proszę podać frazę wyszukiwania');
            return false;
        } else {
            ajaxAction.systemAction("search", {"fraza" : fraza}, actionKey, respondeDIV);
            return true;
        }
    },

   
    /**
     * STRONICOWANIE LISTY
     */
   showPage : function(moduleName, number, lastPage) {

        var testInteger = /^\d+$/;
        if(!testInteger.test(number)) {
            aktualna.select();
            alert('Wprowadź wyrażenie numeryczne');
            return false;
        }
        if (number <1) number = 1;
        if (number > lastPage) number = lastPage;

        var params = {
            'module' : moduleName,
            'page' : number
        };
        
        return ajaxAction.sendCommand('setPage', params, "Zmiana strony listowania");
    },


    setLimit : function(editor) {

        var moduleName = editor.getParams().moduleName;
        var number = editor.getNewValue();
        var testInteger = /^\d+$/;
        if(!testInteger.test(number)) {
            alert('Nieprawidłowa wartość ' + number +'. Musi być numeryczna');
            return false;
        }

        var params = {
            'module' : moduleName,
            'limit' : number
        };

        return ajaxAction.sendCommand('setLimit', params, "Zmiana limitu");

    },


    setOrder : function(moduleName, fieldName, ord) {

        var params = {
            'module'    : moduleName,
            'order'     : fieldName + ' '+ ord
        };

        ajaxAction.sendCommand('setOrder', params, "Zmiana sortowania");
    },


    setFilter : function(moduleName, fieldName, value) {

        var params = {
            'module' : moduleName,
            'filterColumn' : fieldName,
            'filterValue' : value
        };

        var updateFilter = function(status) {
            alert('Odebrałem:' + status);
            if (status)
                $el('aktualna').value = 1;
            return true;
        }

        var komunikat = 'Filtrowanie podług ' + fieldName + '=' + value;
//        ajaxAction.sendCommand('filter', params, komunikat, updateFilter);
        ajaxAction.sendCommand('filter', params, komunikat);

    },

//    login : function(name, pass) {
//        ajaxAction.sendCommand('login');
//    },



    logout : function() {
        ajaxAction.setBack(true);
        ajaxAction.sendCommand('logout', null, null, function(){
            ajaxAction.menuAction('_init');
            ajaxAction.setBack(false);
//            ajaxAction.reload();
        });
    },

    sendCommand : function(cmd, params, komunikat, postFunction){
        var pomocnik = ajaxAction.sender.buildCommand(cmd, params, komunikat, postFunction);
        if (!postFunction) postFunction = ajaxAction.waitSignalDisabled;
        pomocnik.getDestSender().onload(postFunction);
        ajaxAction.waitSignalEnabled();
        return pomocnik.send();
    },

    /**
     * Włączy lub wyłacza tło pulpitu
     */
    setBack : function(on) {
        var pane = $el('_disabledPane');
        if (!pane) {
            pane = document.createElement('div');
            pane.id = '_disabledPane';
            document.body.appendChild(pane);
        }
        if (on) pane.style.display = 'block';
        else pane.style.display = 'none';
    },

    /**
     * Sprawdza, czy przeglądarka, to Internet Explorer
     */
    isIE : function() {
        var ie = document.all
        return ie;
    }


};


