var catalogpanel, cartpanel, Viewer;
var catalogstore;
var formfilled = false;
var Contactwindow, articleview, Contactform;
var lockaction = false;
if (typeof designmode != 'undefined' && designmode == true) {
    Ext.namespace('epo.designer');
}
else {
    designmode = false;
}
var tplfunctions = {
    formatPrice: function (price, up) {
        if (!price) return '-';
        price = price.split('.');
        price[1] = price[1].substr(0, 2);
        price = price.join(',');
        if (up == 1) {
            price = 'ab ' + price;
        }
        return price;
    },
    strCut: function (string, length, addon) {
        if (!string) return '';
        if (string.length > length) return string.substr(0, length) + (addon || '');
        else return string;
    },
    newcol: function (position, itemwidth, cols) {
        if (position % cols == 1 && itemwidth * cols < catalogpanel.getInnerWidth()) {
            return 'clear: left;';
        }
        else if (Ext.isIE && position % cols == 0 && itemwidth * cols < catalogpanel.getInnerWidth()) {
            return 'display:block;overflow:none;';
        }
        else {
            return '';
        }
    }
};
if (typeof articletpl == 'undefined' || articletpl == '') {
    articletpl = '<table><tpl for=".">' + '<tpl if="(xindex % 4 == 1)"><tr></tpl>' + '<td><div class="article" id="{article_id}"><p>{article_name}</p><img src="{image}" alt="&nbsp;" style="width: 100px;height: 100px;"><img src="gfx/inspire/32x32/actions/edit_add.png" onclick="request();"></div></td>' + '<tpl if="(xindex % 4==0)"></tr></tpl>' + '</tpl></table>';
}
if (typeof detailtpl == 'undefined' || detailtpl == '') {
    detailtpl = '<div class="article" id="{article_id}"><p>{description}</p><img src="{image}" alt="" style="width: 100px;height: 100px;"></div>';
}
if (typeof articleview == 'undefined') {
    articleview = {};
}
if (typeof catalog == 'undefined') {
    catalog = {};
}
if (typeof toolbar == 'undefined') {
    toolbar = '';
}
if (typeof cartpanel == 'undefined') {
    cartpanel = {};
}
if (typeof cartcols == 'undefined') {
    cartcols = {};
}
if (typeof view == 'undefined') {
    view = {};
}
if (typeof detail == 'undefined') {
    detail = {};
}
if (typeof contact == 'undefined') {
    contact = {};
}
if (typeof contactform == 'undefined') {
    contactform = {};
}
Ext.namespace('epo.data');
epo.data.cbstore = Ext.extend(Ext.data.JsonStore, {
    constructor: function (config) {
        if (typeof config == 'undefined') {
            config = {};
        }
        config.url = 'ajax.php';
        config.baseParams = {
            phpfunction: 'get_property'
        };
        config.id = config.property + "_id";
        config.baseParams.property = config.property;
        this.fields.push(config.id);
        epo.data.cbstore.superclass.constructor.call(this, config);
    },
    listeners: {
        beforeload: function (store, options) {
            var row = cartpanel.getSelectionModel().getSelected();
            if (!options.params) {
                options.params = {
                    article_id: row.data.article_id
                };
            }
            else {
                options.params.article_id = row.data.article_id;
            }
        }
    },
    root: 'data',
    fields: ['name']
});
Ext.namespace('epo.form');
epo.form.gridcb = Ext.extend(Ext.form.ComboBox, {
    valueField: 'name',
    displayField: 'name',
    triggerAction: 'all',
    forceSelection: true,
    listeners: {
        focus: function (el) {
            el.store.reload();
        },
        select: function (cb, row) {
            cartpanel.getSelectionModel().getSelected().set(cb.idField, row.data[cb.idField]);
        }
    }
});
epo.form.contactform = Ext.extend(Ext.form.FormPanel, {
    constructor: function (config) {
        if (typeof config == 'undefined') {
            config = {};
        }
        if (!config.items) {
            config.items = [{
                xtype: 'fieldset',
                title: "Ihre Daten",
                autoHeight: true,
                defaults: {
                    width: 180
                },
                defaultType: 'textfield',
                items: [{
                    fieldLabel: "Firmenname",
                    name: "company_name",
                    value: config.values ? config.values.company_name : '',
                    allowBlank: false
                },
                {
                    xtype: 'combo',
                    fieldLabel: "Anrede",
                    name: "gender",
                    value: config.values ? config.values.gender : 'Herr',
                    store: [
                        ['m', 'Herr'],
                        ['w', 'Frau']],
                    triggerAction: 'all',
                    allowBlank: false,
                    forceSelection: true
                },
                {
                    fieldLabel: "Vorname",
                    name: "first_name",
                    value: config.values ? config.values.first_name : '',
                    allowBlank: false
                },
                {
                    fieldLabel: "Nachname",
                    name: "last_name",
                    value: config.values ? config.values.last_name : '',
                    allowBlank: false
                },
                {
                    fieldLabel: 'StraÃŸe',
                    name: 'street',
                    value: config.values ? config.values.street : '',
                    allowBlank: false
                },
                {
                    fieldLabel: 'PLZ',
                    name: 'post_code',
                    value: config.values ? config.values.post_code : '',
                    allowBlank: false
                },
                {
                    fieldLabel: 'Ort',
                    name: 'city',
                    value: config.values ? config.values.city : ''
                },
                {
                    xtype: 'combo',
                    fieldLabel: 'Land',
                    name: 'country',
                    hiddenName: 'language_id_country',
                    store: [
                        [1, 'Deutschland'],
                        [3, 'Nederlands'],
                        [2, 'Great Britain'],
                        [37, 'France'],
                        [4, 'Belgien'],
						[100, 'Oesterreich'],
						[88, 'Schweiz']],
                    value: config.values ? config.values.language_id_country : '1',
                    triggerAction: 'all',
                    allowBlank: false
                },
                {
                    fieldLabel: 'Telefon',
                    name: 'phone',
                    value: config.values ? config.values.phone : '',
                    allowBlank: false
                },{
                    fieldLabel: 'eMail',
                    name: 'email',
                    value: config.values ? config.values.email : '',
                    allowBlank: false,
                    vtype: 'email'
                }]
            },
            {
                xtype: 'fieldset',
                title: 'Sonstiges',
                autoHeight: true,
                defaults: {
                    width: 180
                },
                defaultType: 'textfield',
                items: [{
                    fieldLabel: 'Anmerkung',
                    name: 'usercomment',
                    xtype: 'textarea',
                    allowBlank: true
                }]
            }];
        }
        config.url = 'ajax.php';
        config.baseParams = {
            phpfunction: 'catalog_submit'
        };
        epo.form.contactform.superclass.constructor.call(this, config);
        Contactform = this;
    },
    layout: 'form',
    minSize: 280,
    labelWidth: 70,
    bodyStyle: 'padding:5px 5px 0',
    width: 400,
    defaults: {
        width: 290
    },
    frame: true,
    stateful: true,
    stateId: 'customer',
    stateEvents: ['click', 'hide'],
    listeners: {
        beforeaction: function (form) {
            Ext.state.Manager.set('customerdata', form.getValues());
        }
    },
    buttons: [{
        text: 'Anfrage Absenden',
        handler: function () {
            if (!Contactform.getForm().isValid()) {
                Ext.MessageBox.alert('Fehler', 'Bitte f&uuml;llen Sie alle rot markierten Pflichtfelder aus, da eine Bearbeitung sonst nicht m&ouml;glich ist.');
                return;
            }
            var positions = new Array();
            Ext.MessageBox.alert('Bitte warten', 'Ihre Anfrage wird an uns gesendet');
            cartpanel.getStore().each(function (item) {
                positions.push(item.data);
            });
            Contactform.getForm().submit({
                params: {
                    positions: Ext.util.JSON.encode(positions)
                },
                success: function () {
                    formfilled = true;
                    cartpanel.getStore().each(function (item) {
                        this.remove(item);
                    },
                    cartpanel.getStore());
                    Ext.state.Manager.clear('cartdata');
                    Ext.MessageBox.alert('Anfrage gesendet', 'Vielen Dank f&uuml;r Ihre Anfrage.');
                }
            });
            Contactwindow.hide();
            cartpanel.collapse();
        }
    },
    {
        text: 'Abbrechen',
        handler: function () {
            Contactwindow.hide();
        }
    }]
});
Ext.reg('epocontactform', epo.form.contactform);
Ext.namespace('epo.elements');
epo.elements.search = Ext.extend(Ext.app.SearchField, {
    constructor: function (config) {
        if (!config) {
            config = {};
        }
        this.store = catalogstore;
        config.value = query;
        if (this.value || (config && config.value)) {
            config.hideTrigger1 = false;
            config.hasSearch = true;
        }
        epo.elements.search.superclass.constructor.call(this, config);
        if (designmode) {
            epo.designer.searchObj = this;
        }
    },
    value: query,
    width: 180
});
Ext.reg('eposearch', epo.elements.search);
epo.elements.priceslider = Ext.extend(Ext.ux.DoubleSlider, {
    constructor: function (config) {
        this.store = catalogstore;
        epo.elements.priceslider.superclass.constructor.call(this, config);
        if (designmode) {
            epo.designer.sliderObj = this;
        }
    },
    width: 250,
    value: {
        left: 0,
        right: 100
    },
    increment: 1,
    minValue: 0,
    maxValue: 100,
    listeners: {
        change: function (ps, newval) {
            if (! (newval.right < ps.maxValue)) {
                ps.store.baseParams.pricetop = null;
                var displayright = '>' + ps.maxValue
            }
            else {
                ps.store.baseParams.pricetop = newval.right;
                var displayright = newval.right;
            }
            ps.store.baseParams.pricebottom = newval.left;
            ps.store.reload({
                params: {
                    start: 0
                }
            });
            Ext.get("slideval").update(newval.left + " -  " + displayright + " EUR");
        }
    }
});
Ext.reg('epoprice', epo.elements.priceslider);
epo.elements.categories = Ext.extend(Ext.form.ComboBox, {
    constructor: function (config) {
        if (!config) {
            config = {};
        }
        epo.elements.categories.superclass.constructor.call(this, config);
        if (designmode) {
            epo.designer.categoryObj = this;
        }
    },
    store: new Ext.data.JsonStore({
        url: 'ajax.php',
        baseParams: {
            phpfunction: 'get_categories',
            sid: sid
        },
        root: 'data',
        id: 'article_class_id',
        autoLoad: true,
        displayField: 'description',
        fields: ['article_class_id', 'name', 'description', 'articles', 'article_class_id_parent']
    }),
    triggerAction: 'all',
    value: categorytext,
    width: 260,
    listWidth: 260,
    tpl: '<tpl for="."><div class="x-combo-list-item" ><tpl if="values.article_class_id_parent">&nbsp;&nbsp;</tpl>' + '<tpl if="!values.article_class_id_parent"><b></tpl>{description}' + '<tpl if="!values.article_class_id_parent"></b></tpl> <span style="font-size:10px;">({articles} Produkte)</span></div></tpl>',
    listeners: {
        select: function (cb, rec) {
        	catalogstore.baseParams.category = rec.data.article_class_id;
        	cb.setValue(rec.data.description);
         	Ext.MessageBox.show({
        	title: 'Bitte warten',
            msg: '<div style="width:100%;text-align:center;"><img src="templates/catalog/img/splashscreen.gif"><br />Die Kategorie '+rec.data.description+' wird geladen..</div>',
            progressText: 'Initialisierung...',
            width:300,
            progress:true,
            closable:false
            });
	       var f = function(v){
            	return function(){
                if(v == 12){
                    Ext.MessageBox.hide();
                }else
                {
                    var i = v/11;
                    Ext.MessageBox.updateProgress(i, Math.round(100*i)+'% fertig');
                }
           };
       };
       for(var i = 1; i < 13; i++){
           setTimeout(f(i), i*200);
       }
            
            cb.setValue(rec.data.description);
            catalogstore.reload({
                params: {
                    start: 0
                }
            });
        }
    }
});
Ext.reg('epocategories', epo.elements.categories);
epo.elements.pager = Ext.extend(Ext.PagingToolbar, {
    constructor: function (config) {
        config.store = catalogstore;
        epo.elements.catalogpanel.superclass.constructor.call(this, config);
        if (designmode) {
            epo.designer.quantity = this.quantity;
        }
    },
    pageSize: quantity,
    displayInfo: true,
    displayMsg: '<span style="font-style:10px;">{2} Artikel in unserem Shop. Artikel {0} - {1} wird angezeigt.',
    emptyMsg: "Es wurde leider kein Artikel gefunden der Ihrer Suche entspricht.</span>"
});
Ext.reg('epopager', epo.elements.pager);
epo.elements.doublebar = Ext.extend(Ext.BoxComponent, {
    constructor: function (config) {
        epo.elements.doublebar.superclass.constructor.call(this, config);
        if (config.items[0].pager) {
            this.tb1 = new epo.elements.pager(config.items[0]);
        }
        else {
            this.tb1 = new Ext.Toolbar(config.items[0]);
        }
        if (config.items[1] && config.items[1].pager) {
            this.tb2 = new epo.elements.pager(config.items[1]);
        }
        else {
            this.tb2 = new Ext.Toolbar(config.items[1]);
        }
    },
    onRender: function (ct, position) {
        this.el = ct;
        this.tb1.render(ct, position);
        this.tb2.render(ct, position);
    },
    afterRender: function () {}
});
Ext.reg('epodoubletbar', epo.elements.pager);
epo.elements.articleview = Ext.extend(Ext.DataView, {
    constructor: function (config) {
        config.tpl = new Ext.XTemplate(articletpl, tplfunctions);
        config.tpl = config.tpl.compile();
        config.store = catalogstore;
        this.tiptpl = new Ext.XTemplate(detailtpl, tplfunctions);
        this.tiptpl = this.tiptpl.compile();
        epo.elements.articleview.superclass.constructor.call(this, config);
        articleview = this;
    },
    autoHeight: false,
    multiSelect: true,
    overClass: 'x-view-over',
    itemSelector: '.article',
    emptyText: '<div class="nofound"><span style="color:darkred">Es wurden kein Artikel gefunden der Ihrer Suchanfrage entspricht</span><br><br><b>Was Sie tun k&ouml;nnen:</b><br><br><ul><li>W&auml;hlen Sie aus dem Menu \"Alle Kategorien\" aus und suchen Sie erneut.</li><li>Verk&uuml;rzen Sie das Suchwort</li><li>Suchen Sie direkt in der Kategorie. Klicken Sie hierf&uuml;r auf eine Kategorie die Ihrem Suchwort am n&auml;chsten kommt.</li></ul></div>',
    listeners: {
        resize: function (dv) {
            dv.refresh();
        },
        selectionchange: function (dv, nodes) {
            var selection = dv.getSelectedRecords();
            if (dv.selaction == 'showtip' && nodes) {
                dv.intip = true;
                maxsize = Viewer.getSize();
                Ext.each(selection, function (item) {
                    var detailset = Ext.apply({
                        id: 'window' + item.data.article_id,
                        title: item.data.article_name,
                        html: dv.tiptpl.apply(item.data),
                        width: 300,
                        maxWidth: maxsize.width,
                        autoScroll: true,
                        constrain: true,
                        listeners: {
                            close: function () {
                                articleview.intip = false;
                            }
                        }
                    },
                    detail || {});
                    if (detailset.width > maxsize.width) {
                        detailset.width = maxsize.width;
                    }
                    var tip = new Ext.Window(detailset);
                    tip.show(nodes[0]);
                    if (Ext.isIE6) {
                        tip.setWidth(detail.width || 300);
                    }
                });
            }
            else if (dv.selaction == 'request' && !dv.doubleaction) {
                var selectionsave = [];
                Ext.each(selection, function (item) {
                    var index = this.find("article_id", item.data.article_id);
                    if (item.data && index < 0) {
                        item.set("quantity", 1);
                        this.add(item);
                    }
                    else {
                        var rec = this.getAt(index);
                        rec.set("quantity", (rec.get("quantity") || 0) + 1);
                    }
                },
                cartpanel.getStore());
                cartpanel.expand();
                cartpanel.getStore().each(function (item) {
                    selectionsave.push(item.data);
                })
                Ext.state.Manager.set('cartdata', selectionsave);
                dv.refresh();
                if (!nodes) {
                    dv.doubleaction = true;
                    setTimeout(function () {
                        dv.doubleaction = false
                    },
                    100);
                }
            }
        }
    }
});
Ext.reg('epoarticleview', epo.elements.articleview);
epo.elements.catalogpanel = Ext.extend(Ext.Panel, {
    constructor: function (config) {
        epo.elements.catalogpanel.superclass.constructor.call(this, config);
    },
    id: 'article-view',
    frame: false,
    collapsible: false,
    layout: 'fit',
    region: 'center',
    minSize: 300,
    autoScroll: true,
    items: {
        xtype: 'epoarticleview'
    }
});
Ext.reg('epocatalog', epo.elements.catalogpanel);
epo.elements.cartpanel = Ext.extend(Ext.grid.EditorGridPanel, {
    constructor: function (config) {
        config.buttons = [{
            text: 'Hilfe',
            handler: function(){
            Ext.MessageBox.buttonText.ok = "Schlie&szlig;en";
       		Ext.MessageBox.show({
           	title: '<div><img src="http://kunden.epromooffice.com/gfx/16x16/apps/info.png"> Hilfe zum Anfragesystem</div>',
           	closable:false,
           	modal:false,
           	width:450,
           	msg: '<div style="height:300px;overflow:scroll;background-color:white;border: 1px dotted grey;"><table style="padding:10px 10px 10px 10px;font-family:tahoma;font-size:9pt;color:#3f3f3f; " ><tr><td><b>Erste Schritte und Hilfe zu unserem Online-Katalogsystem.</b><br><br><p>Mit unserem Online-Katalogsystem kÃ¶nnen Sie bequem nach Produktideen und Artikeln der verschiedensten Hersteller suchen und sofort bei uns anfragen.<br><br>Das System ist einfach zu bedienen und merkt sich Ihre einmalig eingegebenen Kontaktdaten, so dass Sie schnell und bequem Ihre Anfrage durchfÃ¼hren kÃ¶nnen. Die einzelnen MenÃ¼punkte sind in diesem Dokument beschrieben. Wir wÃ¼nschen Ihnen viel SpaÃŸ.</p><br><br><h1 id="1">Kategorieauswahl</h1>Mit Klick auf das Pulldown-MenÃ¼ Kategorien erhalten Sie alle Produkte unseres Anfragesystems nach Kategorien sortiert aufgelistet. Durch Klick auf eine Kategorie kÃ¶nnen Sie die darin befindlichen Artikel ansehen. Die Anzahl der Artikel in einer Kategorie wird rechts neben dem Kategorienamen in Klammern aufgefÃ¼hrt.<br><br>HINWEIS: Sie kÃ¶nnen eine Suche innerhalb einer Kategorie durchfÃ¼hren. WÃ¤hlen Sie hierfÃ¼r die entsprechende Kategorie im Pulldown-MenÃ¼ aus und geben Sie den gewÃ¼nschten Suchebegriff links im Textfeld â€žSucheâ€œ ein. Wollen Sie Ã¼ber den ganzen Katalog suchen, wÃ¤hlen Sie im Pulldown-MenÃ¼ â€žAlle Kategorienâ€œ aus. <br><br><h1 id="2">BlÃ¤ttern im Katalog</h1>Mit den Pfeiltasten â€žvorâ€œ und â€žzurÃ¼ckâ€œ kÃ¶nnen Sie durch die einzelnen Seiten des Kataloges blÃ¤ttern bzw. an den Anfang oder das Ende springen. Mit dem Button â€žAktualisierenâ€œ links neben der â€žSucheâ€œ aktualisieren Sie Ihre Ansicht <br><br><h1 id="2">Suchefunktion:</h1>Mit der Suchefunktion kÃ¶nnen Sie schnell nach Produkten suchen. Geben Sie z.B. Kugelschreiber ein, werden Ihnen alle Kugelschreiberprodukte der verschiedensten Hersteller angezeigt.<br><br> HINWEIS: Bitte achten Sie auf die genaue Schreibweise eines Wortes. Eine fehlerhafte Schreibweise kann zu einer Null-Treffer-Anzeige fÃ¼hren. Die GroÃŸ- und Kleinschreibung spielt keine Rolle. Sie kÃ¶nnen auf die Eingabe von Artikeln (der, die, das) verzichten. Die Suchbegriffe mÃ¼ssen auch nicht vollstÃ¤ndig eingegeben werden. <br><br><h1 id="3">Preisregler</h1>Mit dem Preisregler kÃ¶nnen sie sowohl den Minimal- als auch den Maximalbetrag fÃ¼r ein Produkt angeben und dadurch eine Preisspanne festlegen. In der Preispanne werden Ihnen dann nur die Artikel angezeigt, die Ihren Preiskriterien entsprechen. NatÃ¼rlich kÃ¶nnen Sie den Preisregler mit der Suche und Kategorie kombinieren.<br><br><h1 id="3">Anfragekorb</h1>Der Anfragekorb wird beim DurchblÃ¤ttern des Kataloges ausgeblendet. Sobald Sie einen Artikel in den Anfragekorb legen, Ã¶ffnet er sich. Sie kÃ¶nnen den Anfragekorb aber auch unten rechts per Klick auf den Doppelpfeil manuell einblenden. Im Anfragekorb finden Sie alle Artikel, die Sie per Mausklick in den Anfragekorb gelegt haben. Sie haben einige MÃ¶glichkeiten, um Modifikationen an Ihrer Anfrage vorzunehmen.<br><br><h1 id="4">Menge Ã¤ndern</h1>ZunÃ¤chst wird von jedem angefragten Artikel ein Exemplar in den Anfragekorb Ã¼bernommen. Wenn Sie die Anfragemenge Ã¤ndern mÃ¶chten, klicken Sie einfach doppelt auf die Menge und Ã¤ndern diese ab.<br><br><h1 id="5">Bedruckung</h1>Wenn Sie einen Artikel in den Anfragekorb gelegt haben, kÃ¶nnen Sie durch Doppelklick auf das Feld Bedruckung eine Veredelungsart im Pulldown-MenÃ¼ auswÃ¤hlen. Diese wird mit Ihrer Anfrage, unabhÃ¤ngig davon, ob diese Veredelung mÃ¶glich ist oder nicht, an den Shopinhaber Ã¼bermittelt.<br><br><h1 id="6">Artikel lÃ¶schen</h1>Wenn Sie einen Artikel wieder aus dem Anfragekorb entfernen mÃ¶chten, klicken Sie auf den Artikel mit der linken Maus Taste und entfernen Sie ihn mit dem Button LÃ¶schen unten rechts.<br><br><h1 id="3">Anfrage absenden</h1>Nachdem Sie im Anfragekorb auf â€žAnfragenâ€? geklickt haben, gelangen Sie zum Formular Absenden. Bitte fÃ¼llen sie alle Pflichtfelder aus, damit Ihre Anfrage gesendet werden kann. Sie erhalten an die von Ihnen angegebene eMail-Adresse eine Kopie Ihrer Anfrage.<br><br><h1 id="7">FAQ</h1>Kann ich mehrere Artikel in den Anfragekorb legen und als eine Anfrage abschicken?Ja. Man kann bequem im Katalog Artikel auswÃ¤hlen und per Klick nacheinander in den Anfragekorb legen. Die Artikel werden im Anfragekorb gesammelt und kÃ¶nnen am Ende zusammen als Anfrage verschickt werden.<br><br><a title="powered by ePromoOffice Â© - Software fÃ¼r den Werbemittelhandel" href="http://www.epromooffice.com/"><img border="0" align="absmiddle" src="http://www.epromooffice.com/banner/powered_by_epromooffice.gif"/></a><br>ePromoOffice - Software- und Internetl&ouml;sungen f&uuml;r die Werbemittelbranche<br><a href="http://www.epromooffice.com" target="_blank">http://www.ePromoOffice.com</a><br>Stand: 01.09.09</td></tr></table></div>',
           	buttons: Ext.MessageBox.OK
       });
    }
        },
        {
            text: 'LÃ¶schen',
            handler: epo.elements.cartpanel.prototype.removeitems
        },
        {
            text: 'Anfragen',
            handler: epo.elements.cartpanel.prototype.request
        }];
        var cmconfig = [{
            header: 'Menge',
            dataIndex: 'quantity',
            editor: new Ext.form.NumberField({
                allowNegative: false,
                maxValue: 100000,
                align: 'right',
                value: 1
            }),
            width: 60
        },
        {
            header: 'Produkt',
            dataIndex: 'article_name',
            width: 200
        },
        {
            header: 'Beschreibung',
            dataIndex: 'description',
            width: 500
        },
        {
            header: 'Bedruckung',
            dataIndex: 'printtype',
            editor: new Ext.form.ComboBox({
                typeAhead: true,
                triggerAction: 'all',
                transform: 'printtypelist',
                lazyRender: true
            }),
            width: 100
        }];
        Ext.each(cmconfig, function (item, index) {
            if (Ext.type(cartcols[item.dataIndex]) == 'object') item = Ext.apply(item, cartcols[item.dataIndex]);
        });
        config.cm = new Ext.grid.ColumnModel(cmconfig);
        config.collapsible = true;
        epo.elements.cartpanel.superclass.constructor.call(this, config);
        cartpanel = this;
        try {
            if (config.data) {
                var recordtype = new Ext.data.Record.create([{
                    name: 'Menge',
                    mapping: 'quantity'
                },
                {
                    name: 'ArtNr',
                    mapping: 'article_id'
                },
                {
                    name: 'Name',
                    mapping: 'article_name'
                },
                {
                    name: 'Beschreibung',
                    mapping: 'description'
                },
                {
                    name: 'Bild',
                    mapping: 'image'
                }]);
                var store = this.getStore();
                Ext.each(config.data, function (item) {
                    try {
                        if (item && item.article_id && item.article_name && item.description && item.quantity) {
                            var rec = new recordtype(item);
                            if (rec.id) {
                                store.add(rec);
                            }
                        }
                    }
                    catch(e) {
                        return;
                    }
                });
            }
        }
        catch(e) {
            return;
        }
    },
    removeitems: function () {
        Ext.each(cartpanel.getSelectionModel().getSelections(), function (item) {
            this.remove(item);
        },
        cartpanel.getStore());
        var selectionsave = [];
        cartpanel.getStore().each(function (item) {
            selectionsave.push(item.data);
        })
        Ext.state.Manager.set('cartdata', selectionsave);
    },
    request: function () {
        Contactwindow.show();
    },
    id: 'cart-view',
    frame: true,
    collapsed: true,
    collapsible: true,
    title: 'Anfrage',
    region: 'south',
    height: 250,
    autoScroll: true,
    clicksToEdit: 1,
    viewConfig: {
        autoFill: true,
        forceFit: true
    },
    stripeRows: true,
    sm: new Ext.grid.RowSelectionModel({}),
    store: new Ext.data.Store({
        reader: new Ext.data.ArrayReader({
            root: "data"
        },
        new Ext.data.Record.create([{
            name: 'Menge',
            mapping: 'quantity'
        },
        {
            name: 'ArtNr',
            mapping: 'article_id'
        },
        {
            name: 'Name',
            mapping: 'article_name'
        },
        {
            name: 'Beschreibung',
            mapping: 'description'
        },
        {
            name: 'Bild',
            mapping: 'image'
        },
        {
            name: 'Farbe',
            mapping: 'color'
        },
        {
            name: 'Farbe',
            mapping: 'color_id'
        },
        {
            name: 'Druckart',
            mapping: 'printtype'
        },
        {
            name: 'Druckart',
            mapping: 'printtype_id'
        },
        {
            name: 'GrÃ¶ÃŸe',
            mapping: 'size'
        },
        {
            name: 'GrÃ¶ÃŸe',
            mapping: 'size_id'
        }])),
        storeId: 'cartstore',
        listeners: {
            datachanged: function (store) {
                try {
                    var selectionsave = [];
                    store.each(function (item) {
                        selectionsave.push(item.data);
                    })
                    Ext.state.Manager.set('cartdata', selectionsave);
                } catch(e) {
                    return;
                }
            }
        }
    })
});
Ext.reg('epocartpanel', epo.elements.cartpanel);
Ext.namespace('epo.windows');
epo.windows.contactwindow = Ext.extend(Ext.Window, {
    constructor: function (config) {
        this.items = Contactform;
        if (config && config.items) {
            config.items.push(Contactform);
        }
        epo.windows.contactwindow.superclass.constructor.call(this, config);
        Contactwindow = this;
    },
    title: 'Ihre Anfrage',
    constrain: true,
    closeAction: 'hide',
    width: 325
});
function request() {
    articleview.selaction = 'request';
    if (articleview.intip) {
        lockaction = true;
        setTimeout(function () {
            lockaction = false;
            articleview.selaction = '';
        },
        400);
        articleview.fireEvent("selectionchange", articleview);
    }
    else {
        setTimeout(function () {
            lockaction = false;
            articleview.selaction = '';
        },
        300);
    }
}
function showtip() {
    if (!lockaction) articleview.selaction = 'showtip';
    else articleview.selaction = 'request';
    setTimeout(function () {
        lockaction = false;
        articleview.selaction = '';
    },
    500);
}
function closewin(id) {
    Ext.WindowMgr.get('window' + id).close();
}
function search(text) {
    catalogstore.baseParams.query = text;
    catalogstore.reload({
        params: {
            start: 0
        }
    });
}
Ext.onReady(function () {
	
		Ext.MessageBox.show({
	        title: 'Bitte warten',
	        msg: '<div style="width:100%;text-align:center;"><img src="templates/catalog/img/splashscreen.gif"><br />Der Katalog wird geladen...</div>',
	        progressText: 'Initialisierung...',
	        width:300,
	        progress:true,
	        closable:false
       });

       // this hideous block creates the bogus progress
       var f = function(v){
            return function(){
                if(v == 12){
                    Ext.MessageBox.hide();
                }else{
                    var i = v/11;
                    Ext.MessageBox.updateProgress(i, Math.round(100*i)+'% fertig');
                }
           };
       };
       for(var i = 1; i < 13; i++){
           setTimeout(f(i), i*400);
       }
	
    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
    catalogstore = new Ext.data.JsonStore({
        url: 'ajax.php',
        baseParams: {
            phpfunction: 'get_catalog',
            query: query,
            category: category,
            limit: quantity,
            sid: sid
        },
        root: 'data',
        totalProperty: 'rows',
        listeners: {
            loadexception: function () {
                this.removeAll();
            }
        },
        fields: ['article_id', 'article_name', 'image', 'thumb', 'description', 'article_class', 'color', 'printtype', 'size', 'article_name2', 'base_price', 'weight', 'zoll', 'ean_code', 'code', 'code_own', 'remarks', 'price_up', 'supplier', 'price_units']
    });
    if (designmode) {
        catalogstore.on('beforeload', function (cs, loadobj) {
            epo.designer.load = loadobj;
            epo.designer.baseParams = cs.baseParams;
        });
    }
    catalogstore.load({
        params: {
            start: 0
        }
    });
    articleview = new epo.elements.articleview(articleview || {});
    if (Ext.isIE) {
        if (articleview.style) articleview.style += 'overflow: hidden;';
        else articleview.style = 'overflow: hidden;';
    }
    catalog = Ext.apply({
        id: 'article-view',
        frame: false,
        collapsible: false,
        region: 'center',
        autoScroll: true,
        items: articleview
    },
    catalog);
    if (typeof toolbar != 'undefined') {
        if (toolbar.pager) {
            catalog.tbar = new epo.elements.pager(toolbar);
        }
        else if (toolbar.xtype == 'epodoubletbar') {
            catalog.tbar = new epo.elements.doublebar(toolbar);
        }
        else {
            catalog.tbar = new Ext.Toolbar(toolbar);
        }
    }
    if (typeof bottombar != 'undefined') {
        if (bottombar.pager) {
            catalog.bbar = new epo.elements.pager(bottombar);
        }
        else if (toolbar.xtype == 'epodoubletbar') {
            catalog.bbar = new epo.elements.doublebar(toolbar);
        }
        else {
            catalog.bbar = new Ext.Toolbar(bottombar);
        }
    }
    catalogpanel = new Ext.Panel(catalog);
    cartpanel = Ext.apply({
        xtype: 'epocartpanel'
    },
    cartpanel);
    try {
        cartpanel.data = Ext.state.Manager.get('cartdata');
    } catch(e) {}
    view = Ext.apply({
        layout: 'border',
        frame: true,
        listeners: {
            resize: function () {
                if (articleview && articleview.rendered) {
                    articleview.refresh();
                }
            },
            afterlayout: function () {
                if (articleview && articleview.rendered) {
                    articleview.refresh();
                }
            }
        },
        items: [catalogpanel, cartpanel]
    },
    view);
    Viewer = new Ext.Viewport(view);
    contactform.values = Ext.state.Manager.get('customerdata');
    Contactform = new epo.form.contactform(contactform || {});
    Contactwindow = new epo.windows.contactwindow(contact || {});
    Ext.QuickTips.init();
    Ext.apply(Ext.QuickTips.getQuickTip(), {
        width: 320,
        height: 320,
        trackMouse: true
    });
},
window);
