/**
 * Obsługa menu i linkowania na stronie utf-8
 * @version 1.50
 *
 * 1.30 - możliwość wysyłania wieloktrotnego filtru
 * 1.31 - poprawka w setBack
 * 1.40 - wykorzystanie nextAction
 * 1.50 - Zmiana Search - funkcja zupełnie niekompatybilna
 */

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) {

        /* 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 );

    },

    uniAction : function(actionName, moduleName, params, keyAction, targetId){

        if (ajaxAction.actionTask) return;
        ajaxAction.actionTask = true;

        /* specjalne oznaczenie dla akcji z menu tożsamego z wyborem modułu */
        if (!moduleName) {
            moduleName = actionName;
            actionName = '_' + actionName;
        }

        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 );

    },

    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) {
            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.length > 0) {
                
                var layout = p[0].getAttribute('dynamicLayout');
                if (layout) {
                    var layoutFunction = ajaxAction.layoutManager.setLayout(layout);
                    sender.insertFunction =
                        ajaxAction.layoutManager[layoutFunction];
                }
            }
        }

        /** 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;
        if ($el('header')) {
            var headerHeight = $el('header').clientHeight;
//            alert('scroll: ' + scroll + ' - content: ' + headerHeight);
            if ( !headerHeight || scroll - headerHeight > 0 )
                window.scroll(0, headerHeight - 50);
        }

        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', url);
            a.setAttribute('title', title);
            a.setAttribute('rel','sidebar');
            a.click();
        } else {
            alert("Zastosuj CTRL + D aby dodać witrynę do ulubionych");
        }
    },


    action : function(editor, addParams, targetId) {

        if (ajaxAction.actionTask) return;
        ajaxAction.actionTask = true;

        var params = editor.getParams();
        var keyAction = editor.getSource();

        if (addParams)
            for(var par in addParams)
                params[par] = addParams[par];

        var toStore = ajaxAction.waitSignalEnabled(keyAction);

        /* params, komunikat, funkcja obsługi, do zapamiętania, cel odpowiedzi */
        ajaxAction.sender.send(
            params, null, ajaxAction.waitSignalDisabled, toStore, targetId );

    },

    /* funkcje wspomagające */

    inputFraza : function(editor, targetId) {

        var fraza = editor.getNewValue();
        if (fraza == '') {
            alert('Proszę podać frazę wyszukiwania');
            return false;
        }

        ajaxAction.action(editor, {'fraza':fraza}, targetId);

        return true;
    },


    buttonFraza : function(action, inputId, targetId) {

        var fraza = $el(inputId).value;

        if (fraza == '') {
            alert('Proszę podać frazę wyszukiwania');
            return false;
        }
        
        ajaxAction.menuAction(action, {'fraza':fraza}, null, targetId);
        return true;
    },
   
    /**
     * STRONICOWANIE LISTY
     */
   showPage : function(moduleName, number, lastPage, action) {

        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
        };
        if (action) params['action'] = action;
        
        return ajaxAction.sendCommand('setPage', params, "Zmiana strony listowania");
    },


    setLimit : function(editor) {

        var moduleName = editor.getParams('module');
        var action = editor.getParams('action');
        var nextAction = editor.getParams('nextAction');

        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
        };

        if (action) params['action'] = action;
        else if (nextAction ) params['action'] = nextAction;

        return ajaxAction.sendCommand('setLimit', params, "Zmiana limitu");

    },


    setOrder : function(moduleName, fieldName, ord, action) {

        var params = {
            'module'    : moduleName,
            'order'     : fieldName + ' '+ ord
        };

        if (action) params['action'] = action;

        ajaxAction.sendCommand('setOrder', params, "Zmiana sortowania");
    },


    setFilter : function(moduleName, fieldName, value, action) {

        var params = {
            'module' : moduleName,
            'filterColumn' : fieldName,
            'filterValue' : value
        };

        if (action) params['action'] = action;
//        alert('Mam akcję: '+action);

        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);

    },


    /**
     * Identyczne z setFilter, jednak pobiera emelka
     */
    addFilter : function(editor) {
        
        var moduleName = editor.getParams('module');
        var nextAction = editor.getParams('nextAction');
        var filterColumn = editor.getParams('filterColumn');
        var value = editor.getNewValue();

        var params = {
            'module' : moduleName,
            'filterColumn' : filterColumn,
            'filterValue' : value
        };

        if (nextAction) params['action'] = nextAction;

        return ajaxAction.sendCommand('filter', params, "Zmiana limitu");
    },

//    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;
    }

};

FormDestSender.setDefaultOnLoad(ajaxAction.waitSignalDisabled);

