Ext.override(Ext.form.RadioGroup, { getName: function(){ return this.items.first().name; }, getValue: function(){ var v; if (this.rendered) { this.items.each(function(item){ if (!item.getValue()) return true; v = item.getRawValue(); return false; }); } else { for (var k in this.items) { if (this.items[k].checked) { v = this.items[k].inputValue; break; } } } return v; }, setValue: function(v){ if (this.rendered){ this.items.each(function(item){ item.setValue(item.getRawValue() == v); }); } else { for (var k in this.items) { this.items[k].checked = this.items[k].inputValue == v; } } } }); var win; var calculatorPanel; function sendRequest(){ if(!win){ win = new Ext.Window({ width : 370, height : 290, closeAction :'hide', plain : true, title: 'Заявка за оферта', items: requestForm = new Ext.FormPanel({ frame:false, border: false, style: 'margin:10px;', items : [{xtype: 'label', id: 'request_info', html: 'Моля, въведете Вашите данни за контакт.
Така Вие ще изпратите към нас заявка за официална оферта с избраните параметри.

'}, {xtype: 'textfield', fieldLabel: 'Вашето име', name: 'namee', msgTarget: 'under', allowBlank: false, blankText: 'Въведете Вашето име', id: 'namee', width:190}, {xtype: 'textfield', fieldLabel: 'Фирма', name: 'company', id: 'company', width:190}, {xtype: 'textfield', fieldLabel: 'Телефон', name: 'tel', id: 'tel', width:190}, {xtype: 'textfield', fieldLabel: 'E-mail', name: 'mail', msgTarget: 'under', allowBlank: false, blankText: 'Въведете e-mail адрес', id: 'mail', width:190}] }), buttons: [{ text : 'Изпрати заявка за оферта', handler : function(){ if(requestForm.getForm().isValid() == true){ var n = Ext.getCmp('namee').getValue(); var c = Ext.getCmp('company').getValue(); var tl = Ext.getCmp('tel').getValue(); var e = Ext.getCmp('mail').getValue(); calculatorPanel.getForm().submit({url: './data/test.php', waitMsg: 'Моля, изчакайте...', waitTitle: 'Изпращане на запитване', params: {name: n, company: c, tel: tl, mail: e}, success: function(gridForm, action) { win.hide(); } }); } else { alert('Моля, попълнете задължителните полета!'); } } },{ text : 'Затвори', handler : function(){ win.hide(); } }] }); } win.show(); } Ext.onReady(function(){ Ext.QuickTips.init(); // turn on validation errors beside the field globally Ext.form.Field.prototype.msgTarget = 'side'; var bd = Ext.get('price_calculator'); var selected_media_type = 'all'; var selected_burn_state = 'no'; var selected_print_state = 'no'; var quantity_task = new Ext.util.DelayedTask(function(){ updateMedia(); updateLak(); updatePrintAndBurnLabels(); updatePackages(); }); Ext.override(Ext.form.Checkbox, { getResizeEl : function(){ return this.wrap; } }); Ext.override(Ext.form.ComboBox, { // private onViewClick : function(doFocus){ var index = this.view.getSelectedIndexes()[0]; var r = this.store.getAt(index); var sel = null; sel = r.get('selectable'); if(sel == 0){ return; } if(r){ this.onSelect(r, index); } if(doFocus !== false){ this.el.focus(); } }, onViewOver : function(e, t){ if(this.inKeyMode){ return; } var item = this.view.findItemFromChild(t); if(item){ var index = this.view.indexOf(item); var r = this.store.getAt(index); var sel = null; sel = r.get('selectable'); if(sel != 0){ this.select(index, false); } } } } ); function updateMedia(){ m_id.store.load({ params: {'media_type': selected_media_type, 'quantity': Ext.getCmp('quantity').getValue() } }); p_id.store.load({ params: {'media': '', 'quantity': Ext.getCmp('quantity').getValue() } }); } function updatePackages(){ p_id.store.load({ params: {'media': m_id.getValue(), 'quantity': Ext.getCmp('quantity').getValue() } }); } function updatePrintAndBurnLabels(){ if(m_id.getValue()){ if(q_id.getValue() >= 500 && m_id.getValue() != '0112'){ print_id.setValue('true'); print_id.disable(); burn_id.setValue('true'); burn_id.disable(); Ext.getCmp('print_info').setText('За количеството от '+q_id.getValue()+' бр. печатът е сито или офсет и е задължителен', false); Ext.getCmp('burn_info').setText('За количеството от '+q_id.getValue()+' бр. записът е матричен (CD-ROM/DVD-ROM) и е задължителен', false); } else { print_id.enable(); burn_id.enable(); Ext.getCmp('print_info').setText('За количеството от '+q_id.getValue()+' бр. печатът е мастилено-струен'); Ext.getCmp('burn_info').setText('За количеството от '+q_id.getValue()+' бр. записът е дупликация (CD-R/DVD-R)'); } } } function updateLak(){ if(selected_print_state == 'yes'){ if(q_id.getValue() >= 500 && m_id.getValue() != '0112'){ lak_id.setValue('false'); lak_id.disable(); Ext.getCmp('lak_info').setText('За количеството от '+q_id.getValue()+' бр. печатът е сито или офсет и лак не е необходим'); } else { lak_id.enable(); lak_id.reset(); Ext.getCmp('lak_info').setText('ПОДАРЪК - UV лакът запечатва мастилено-струйния печат и го предпазва от влага и замърсяване /препоръчително/'); } } else { lak_id.disable(); lak_id.reset(); Ext.getCmp('lak_info').setText(''); } } var media_store = new Ext.data.Store({ autoLoad: true, pruneModifiedRecords: true, proxy: new Ext.data.HttpProxy({url: './data/data.php?type=media'}), reader: new Ext.data.JsonReader({ root: 'data', id: 'id' }, ['id', 'name', 'price', 'image', 'shape', 'dimensions', 'media_type', 'capacity', 'selectable', 'quantity_message']), listeners:{'load':function(s,r,o){ found = false; for(var i=0; i < r.length; i++){ if(r[i].get('id') == m_id.getValue()){ if(r[i].get('selectable') == 1){ found = true; } } } if(found == false){ m_id.clearValue(); } } } }); var package_store = new Ext.data.Store({ autoLoad: true, pruneModifiedRecords: true, proxy: new Ext.data.HttpProxy({url: './data/data.php?type=packages'}), reader: new Ext.data.JsonReader({ root: 'data', id: 'id' }, ['id', 'name', 'price', 'package_options', 'description', 'selectable', 'quantity_message']), listeners:{'load':function(s,r,o){ found = false; for(var i=0; i < r.length; i++){ if(r[i].get('id') == p_id.getValue()){ if(r[i].get('selectable') == 1){ found = true; } } } if(found == false){ p_id.clearValue(); } } } }); calculatorPanel = new Ext.FormPanel({ labelWidth: 90, url:'./data/calculate.php', frame:false, title: 'Ценови Калкулатор', header: false, border: false, width: 596, listeners:{'render': function(c){ p_id = Ext.getCmp('packages_id'); ass_id = Ext.getCmp('assemble'); po_id = Ext.getCmp('package_options'); lak_id = Ext.getCmp('lak'); print_id = Ext.getCmp('print'); burn_id = Ext.getCmp('burn'); m_id = Ext.getCmp('media_id'); mt_id = Ext.getCmp('media_type'); q_id = Ext.getCmp('quantity'); burn_val_id = Ext.getCmp('burn_val'); } }, items: [{xtype: 'numberfield', fieldLabel: 'Количество', name: 'quantity', msgTarget: 'under', allowBlank: false, blankText: 'Въведете количество', id: 'quantity', enableKeyEvents: true, allowDecimals: false, maxValue: 300000, maxText: 'Максималното количество е {0}', minValue: 10, minText: 'Минималното количество е {0}', width:60, listeners:{ 'keypress': function(object, e){ quantity_task.delay(500); } }},{ xtype:'fieldset', cls: 'fieldset', checkboxToggle: true, title: 'Тиражиране', name: 'duplication_fieldset', autoHeight:true, defaults: {width: 210}, listeners:{'beforeexpand':function(p,a){ m_id.enable(); ass_id.enable(); }, 'beforecollapse':function(p,a){ m_id.disable(); m_id.reset(); burn_id.disable(); burn_id.reset(); print_id.disable(); print_id.reset(); lak_id.disable(); lak_id.reset(); mt_id.reset(); ass_id.disable(); ass_id.reset(); selected_burn_state = 'no'; selected_print_state = 'no'; } }, items :[{xtype: 'radiogroup', id: 'media_type', name: 'media_type', fieldLabel: 'Тип', width:450, disabled:false, columns: [60, 70, 300], items: [ {boxLabel: 'CD', name: 'media_type_val', listeners:{'check':function(r,c){ if(c){ selected_media_type = 'cd' updateMedia(); } } }}, {boxLabel: 'DVD', name: 'media_type_val', listeners:{'check':function(r,c){ if(c){ selected_media_type = 'dvd' updateMedia(); } } }}, {boxLabel: 'Покажи всички', name: 'media_type_val', checked: true, listeners:{'check':function(r,c){ if(c){ selected_media_type = 'all' updateMedia(); } } }}] }, {xtype: 'combo', id: 'media_id', name: 'media', fieldLabel: 'Носител', allowBlank: false, blankText: 'Трябва да посочите носител!
Ако не желаете тиражиране, отмаркирайте тикчето на позиция \"Тиражиране\"', msgTarget: 'under', tpl: '
' + 'x-combo-list-item-unsel' + ''+'">{name}
кат. номер: {id}

форма: {shape}
размери: {dimensions}
тип: {media_type}
капацитет: {capacity}
{quantity_message}
', store: media_store, displayField: 'name', valueField: 'id', hiddenName: 'media', mode: 'local', width: 450, maxHeight: 400, editable: false, emptyText: 'Изберете носител', triggerAction: 'all', listeners: { 'select' : function(cmb, rec, idx) { p_id.store.load({ params: {'media': m_id.getValue(), 'quantity': Ext.getCmp('quantity').getValue() } }); updatePrintAndBurnLabels(); } } }, {xtype: 'radiogroup', id: 'burn', name: 'burn', hiddenName: 'burn', fieldLabel: 'Запис', width:440, disabled:true, allowBlank: false, blankText: 'Трябва да посочите ДА или НЕ', msgTarget: 'under', columns: [45, 45, 350], items: [ {boxLabel: 'Да', name: 'burn_val', inputValue: true, listeners:{'check':function(r,c){ if(c == true){ selected_burn_state = 'yes'; } else { selected_burn_state = 'no'; } updateLak(); } }}, {boxLabel: 'Не', name: 'burn_val', inputValue: false}, {xtype: 'label', style:'width:350px;font-size:11px;', name: 'burn_info', id: 'burn_info', html: ''} ] }, {xtype: 'radiogroup', id: 'print', name: 'print', hiddenName: 'print', fieldLabel: 'Печат', width:440, disabled:true, allowBlank: false, blankText: 'Трябва да посочите ДА или НЕ', msgTarget: 'under', columns: [45, 45, 350], items: [ {boxLabel: 'Да', width: 35, name: 'print_val', inputValue: true, listeners:{'check':function(r,c){ if(c == true){ selected_print_state = 'yes'; } else { selected_print_state = 'no'; } updateLak(); } }}, {boxLabel: 'Не', width: 35, inputValue: false, name: 'print_val'}, {xtype: 'label', style:'width:350px;font-size:11px;', name: 'print_info', id: 'print_info', text: ''} ]}, {xtype: 'radiogroup', id: 'lak', name: 'lak', fieldLabel: 'UV лак', width:440, disabled:true, allowBlank: false, blankText: 'Трябва да посочите ДА или НЕ', msgTarget: 'under', columns: [45, 45, 350], items: [ {boxLabel: 'Да', name: 'lak_val', inputValue: true}, {boxLabel: 'Не', name: 'lak_val', inputValue: false}, {xtype: 'label', style:'width:350px;font-size:11px;', name: 'lak_info', id: 'lak_info', html: ''}]} ] },{ xtype:'fieldset', checkboxToggle: true, cls: 'fieldset', title: 'Окомплектоване', autoHeight:true, defaults: {width: 210}, listeners:{'beforeexpand':function(p,a){ p_id.enable(); ass_id.enable(); }, 'beforecollapse':function(p,a){ p_id.disable(); p_id.reset(); ass_id.disable(); ass_id.reset(); po_id.disable(); po_id.reset(); } }, items :[{ xtype: 'combo', id: 'packages_id', name: 'package', fieldLabel: 'Опаковка', store: package_store, displayField: 'name', valueField: 'id', hiddenName: 'package', mode: 'local', width: 450, maxHeight: 400, allowBlank: false, blankText: 'Трябва да посочите опаковка!
Ако не желаете опаковка, отмаркирайте тикчето на позиция \"Окомплектоване\"', msgTarget: 'under', tpl: '
' + 'x-combo-list-item-unsel' + ''+'">{name}
кат. номер: {id}

{description}
{quantity_message}
', editable: false, emptyText: 'Избери опаковка', triggerAction: 'all', listeners: { 'select' : function(cmb, rec, idx) { var index = package_store.find('id',p_id.getValue()); var record = package_store.getAt(index); var package_options = ""; package_options = ""+record.get('package_options'); po_id.reset(); for(i=0;i<=2;i++){ m = i+1; po_id.items.items[i].disable(); if(package_options.search('/|'+m+'|/') != -1){ po_id.items.items[i].enable(); } } if(record.get('id') == '0501' || record.get('id') == '0502'){ ass_id.setValue('true'); ass_id.disable(); } else { ass_id.reset(); if(!Ext.getCmp(duplication_fieldset).collapsed){ ass_id.enable(); } } } } },{ xtype: 'checkboxgroup', fieldLabel: 'Опции', width: 500, name: 'package_options', id: 'package_options', columns: 2, disabled: true, vertical: true, columns: [250, 250], items: [ {boxLabel: 'Вложка за DVD кутийка', name: 'package_opt1', inputValue: true}, {boxLabel: 'Предна вложка за CD кутийка 4+0', name: 'package_opt2', inputValue: true}, {boxLabel: 'Задна вложка за CD кутийка 4+0', name: 'package_opt3', inputValue: true} ] },{xtype: 'radiogroup', id: 'assemble', name: 'assemble', fieldLabel: 'Асемблиране:
(окомплектоване)', width:90, disabled:false, allowBlank: false, blankText: 'Трябва да посочите ДА или НЕ', msgTarget: 'under', items: [ {boxLabel: 'Да', name: 'assemble_val', inputValue: true}, {boxLabel: 'Не', name: 'assemble_val', inputValue: false}]} ] }, {layout:'column', border:false, width:596, items:[ {columnWidth:.5, layout:'form', border:false, style: 'background-image:url(./images/normal.jpg);margin-right:5px;', height: 60, items:[{xtype: 'label', id: 'norm_por', name: 'norm_por', html: 'Нормална поръчка

', style: 'margin-left:80px;'}, {xtype: 'label', id: 'srok', name: 'srok', html: 'Срок за изпълнение:
', style: 'margin-left:10px;'}, {xtype: 'label', id: 'price', html: 'Ед. цена:', style: 'margin-left:10px;'}] }, {columnWidth:.5, layout:'form', border:false, height: 60, style: 'background-image:url(./images/express.jpg);margin-left:5px;', items:[{xtype: 'label', id: 'exp_por', name: 'exp_por', html: 'Експресна поръчка

', style: 'margin-left:80px;'}, {xtype: 'label', id: 'srok_fast', html: 'Срок за изпълнение:
', style: 'margin-left:10px;'}, {xtype: 'label', id: 'price_fast', html: 'Ед. цена:', style: 'margin-left:10px;'}] } ]} ], buttons: [{ text: 'Изчисли', tooltip: 'Изчислява ориентировъчни цени и срокове
според избраните опции', type: 'submit', minWidth:150, listeners: { 'click' : function(o, e) { calculatorPanel.getForm().submit({ waitMsg: 'Моля, изчакайте...', waitTitle: 'Пресмятане', success: function(gridForm, action) { Ext.getCmp('srok').setText(action.result.data.srok,false); Ext.getCmp('price').setText(action.result.data.price,false); Ext.getCmp('srok_fast').setText(action.result.data.srok_fast,false); Ext.getCmp('price_fast').setText(action.result.data.price_fast,false); } }); } } },{ text: 'Нулирай', tooltip: 'Нулира избраните опции в първоначалния им статус', type: 'reset', listeners: { 'click' : function(o, e) { calculatorPanel.getForm().reset(); } } },{ text: 'Заявка за оферта', tooltip: 'Изпраща заявка за официална оферта', type: 'button', disabled: false, listeners: { 'click' : function(o, e) { sendRequest(); } } }] }); calculatorPanel.render(bd); });