defaultNS.ModuleRemember = function(){

    var cookieProvider = new Ext.state.CookieProvider({
        path: '/',
        expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 30))
    });
    Ext.state.Manager.setProvider(cookieProvider);
    
    // zobrazí panel s zapamatovanými položkami
    showRemember = {
        show: function(){
        
            // pokud div pro panel neexistuje v dom vytvoří jej
            if (!Ext.get('rememberPanel')) {
                Ext.DomHelper.append(Ext.get(document.body), {
                    id: 'rememberPanel',
                    title: _l10n('mRemember_moveByButtonPressDrag'),
                    cn: [{
                        tag: 'div',
                        cn: [{
                            tag: 'h2',
                            html: _l10n('mRemember_favouriteList')
                        }, {
                            tag: 'a',
                            href: '#',
                            title: _l10n('mRemember_close'),
                            onclick: "defaultNS.ModuleRemember().hideRemember();",
                            html: _l10n('mRemember_close')
                        }, {
                            tag: 'span',
                            html: ' | '
                        }, {
                            tag: 'label',
                            'for': 'rememberPanelKML',
                            html: _l10n('mRemember_kMLExport'),
                            title: _l10n('mRemember_kMLExportTitle')
                        }, {
                            tag: 'input',
                            type: 'checkbox',
                            id: 'rememberPanelKML',
                            value: 1,
                            name: 'rememberPanelKML'
                        }, {
                            tag: 'label',
                            'for': 'rememberPanelEMail',
                            html: _l10n('mRemember_yourEmail')
                        }, {
                            tag: 'input',
                            type: 'text',
                            id: 'rememberPanelEMail',
                            value: _l10n('mRemember_eMailExample'),
                            name: 'rememberPanelEMail',
                            onclick: "this.focus();",
                        }, {
                            tag: 'a',
                            href: '#',
                            title: _l10n('mRemember_sendEMail'),
                            onclick: 'defaultNS.ModuleRemember().sendRemember()',
                            html: 'Odešli na mail'
                        }, {
                            tag: 'br',
                            cls: 'cleaner'
                        }, {
                            tag: 'span',
                            cn: []
                        }]
                    }]
                });
                
                // nastaví možnost drag div s zapamatovanými nemovitostmi
                var ddEl = new Ext.dd.DD(Ext.get('rememberPanel'));
                
            }
            
            // dokud panel nebude ručně zavřen otevírej jej automaticky
            cookieProvider.set('estateToRememberOpen', 1);
            
            showRemember.update();
            Ext.fly('rememberPanel').fadeIn();
            
            // nastaví pozici div
            estateToRememberPosition = cookieProvider.get('estateToRememberPosition');
            Ext.fly('rememberPanel').setXY([estateToRememberPosition[0], estateToRememberPosition[1]]);
        },
        
        // skryje panel
        hide: function(){
            Ext.get('rememberPanel').hide();
            cookieProvider.set('estateToRememberOpen', 0);
        },
        
        send: function(){
            var o = {
                url: baseUrl + '/default/estate/remember-send/',
                method: 'POST',
                
                // volání ukončeno data načtena
                callback: function(options, success, response){
                    alert(_l10n('mRemember_eMailSent'));
                },
                scope: this,
                params: {
                    eMail: Ext.get('rememberPanelEMail').getValue(),
                    kML: Ext.get('rememberPanelKML').dom.checked ? Ext.get('rememberPanelKML').getValue() : 0,
                    estate: Ext.util.JSON.encode(estateToRemember)
                }
            };
            Ext.Ajax.request(o);
        },
        update: function(){
        
            rememberPanelAlready = Ext.get('rememberPanel');
            if (!rememberPanelAlready || !rememberPanelAlready.isVisible()) {
                return false;
            }
            
            // sestavování objektu na zkl. kterého se postaví
            // dom obsah prvku s zapamatovanými položkami
            toDomHelper = [];
            
            // vlož všechny nemovitosti které jsou v cookie
            Ext.each(estateToRemember, function(_input){
                //console.log(estateToRemember);
                photoFile = baseUrl + '/public/';
                photoFile = _input.photo !== '' ? photoFile + 'upload/image/medium/' + _input.photo : photoFile + 'image/default/tmp/img-02.jpg';
                toDomHelper.push({
                    tag: 'span',
                    cn: [{
                        tag: 'img',
                        src: photoFile
                    }, {
                        tag: 'dl',
                        cn: [{
                            tag: 'dt',
                            html: _l10n('mRemember_id')
                        }, {
                            tag: 'dd',
                            html: _input.id
                        }, {
                            tag: 'dt',
                            html: _l10n('mRemember_title')
                        }, {
                            tag: 'dd',
                            html: _input.title
                        }, {
                            tag: 'dt',
                            html: _l10n('mRemember_detail')
                        }, {
                            tag: 'dd',
                            cn: [{
                                tag: 'a',
                                href: baseUrl + '/' + languageUrl + '/nemovitost/' + _input.url,
                                title: _l10n('mRemember_moreInfo'),
                                html: _l10n('mRemember_moreInfo')
                            }]
                        }, {
                            tag: 'dt',
                            html: _l10n('mRemember_remove')
                        }, {
                            tag: 'dd',
                            cn: [{
                                tag: 'a',
                                id: 'rememberPanel' + _input.id,
                                cls: 'rememberPanelRemoveLink',
                                href: '#',
                                title: _l10n('mRemember_removeTitle'),
                                onclick: "defaultNS.ModuleRemember().rememberEstateAdd({id: " + _input.id + ", el:this});",
                                html: _l10n('mRemember_remove')
                            }]
                        }]
                    }, {
                        tag: 'br',
                        cls: 'cleaner'
                    }]
                
                });
            });
            
            // vždy nový dom jinak dochází k připisování k stávajícímu obsahu
            Ext.DomHelper.overwrite(Ext.select('#rememberPanel span').elements[1], toDomHelper);
        }
    };
    
    markRemember = function(_input){
        Ext.select(_input.select).each(function(el){
            splitBy = _input.select.split('\^=')[1];
            splitBy = splitBy.substring(0, splitBy.length - 1);
            if (_input.cmd == 'existTrue') {
                if (rememberExist.exist({
                    id: parseInt(el.dom.id.split(splitBy)[1], 10)
                })) {
                    el.update(_l10n('mRemember_remove'));
                    el.setStyle({
                        color: '#FF0000'
                    });
                    el.set({
                        title: _l10n('mRemember_removeTitle')
                    });
                }
            }
            if (_input.cmd == 'existFalse') {
                if (!rememberExist.exist({
                    id: parseInt(el.dom.id.split(splitBy)[1], 10)
                })) {
                    el.update(_l10n('mRemember_add'));
                    el.setStyle({
                        color: '#00a651'
                    });
                    el.set({
                        title: _l10n('mRemember_addTitle')
                    });
                }
            }
            
            
        });
    }
    
    // zjistí zda je položka v seznamu zapamatovaných
    rememberExist = {
        toRemove: {},
        exist: function(_input){
            itemExist = false;
            
            // zjisti zda objekt je již v poli pro zapamatování
            Ext.each(estateToRemember, function(obj){
            
                // pokud se id objektu zapamatovaného a nového shodují 
                if (obj.id == _input.id) {
                
                    // ulož jej por pozdější práci
                    rememberExist.toRemove = obj;
                    itemExist = true;
                }
            });
            //console.log(itemExist);
            return itemExist;
        }
    };
    
    rememberEstate = {
        setup: function(){
        
            // zkusíme vzít zapamatované z cookie
            estateToRemember = cookieProvider.get('estateToRemember');
            
            // cookie neexistuje zadefinujeme jej
            if (!estateToRemember || estateToRemember === '') {
            
                // seznam zapamatovaných jako prázdné pole
                cookieProvider.set('estateToRemember', []);
                estateToRemember = cookieProvider.get('estateToRemember');
                
                // panel má být po načtení otevřen automaticky default ne
                cookieProvider.set('estateToRememberOpen', 0);
                
                // pozice panelu default
                cookieProvider.set('estateToRememberPosition', [15, 15]);
            }
            
            //  pokud panel má být otevřen automaticky otevři jej
            cookieProvider.get('estateToRememberOpen') == 1 ? showRemember.show() : false;
            
            //console.log(estateToRemember);
        },
        addToRemember: function(_input){
            el = Ext.get(_input.el);
            
            // objekt odkazu který byl stisknut dále není potřeba
            delete _input.el;
            
            // položka je již nastavena k zapamatování pak ji odeber jinak přidej do pole            
            if (rememberExist.exist(_input)) {
                estateToRemember.remove(rememberExist.toRemove);
                markRemember({
                    select: 'a[id^=remember]',
                    cmd: 'existFalse'
                });
                markRemember({
                    select: 'a[id^=rememberOnMap]',
                    cmd: 'existFalse'
                });
            }
            else {
                estateToRemember.push(_input);
                markRemember({
                    select: 'a[id^=remember]',
                    cmd: 'existTrue'
                });
                markRemember({
                    select: 'a[id^=rememberOnMap]',
                    cmd: 'existTrue'
                });
            };
            
            // pole ulož do cookie
            cookieProvider.set('estateToRemember', estateToRemember);
            //console.log(cookieProvider.get('estateToRemember'));
            
            showRemember.update();
        }
    };
    return {
    
        // veřejně přistupný alias pro nastavení zapamatování
        rememberEstateAdd: rememberEstate.addToRemember,
        showRemember: showRemember.show,
        hideRemember: showRemember.hide,
        sendRemember: showRemember.send,
        markRemember: markRemember,
        init: function(){
        
            // nastav zapamatování nemovitosti
            rememberEstate.setup();
            
            markRemember({
                select: 'a[id^=remember]',
                cmd: 'existTrue'
            });
            
            //console.log('init ok');
        }
    };
};
