/* Источник данных для списка вендоров */
function BuildVendors() {  // global common_url, vendorid_var, COMPANY_VAR
    
    var RowToolTips = {};
    
	var autoRefreshTimer = 9; // в секундах
	var refresh_tick = autoRefreshTimer;
	//var bla_var = document.getElementById('id_bla_var').value;
//	var bla_var = "Примечание:расчет цены выполнен с 5% скидкой<br>для заказов с этого сайта. Читайте подробнее о<br>ценообразовани такси на странице <a href=''>цены такси Киева</a>";
	var bla_var = "Примечание:расчет цены выполнен со скидкой<br> для заказов с этого сайта. Читайте подробнее <br>о ценообразовани такси на странице <a href='http://www.edinoe-taxi.com/sayt/samoe-deshevoe-taksi-kieva-2.html'>цены такси Киева</a>";
	var dsVendors = new Ext.data.JsonStore({
	    url: common_url + 'action.php',
		baseParams: {
		    action: 'const_getvendors',
		    vendorid: vendorid_var
		},
		root: 'vendors',
		totalProperty: 'totalCount',
		id: 'id',
		fields: ['id', 'name', 'phone', 'price', 'prim'],
		remoteSort: true,
		autoLoad: false
	});
	dsVendors.setDefaultSort('id', 'asc');
	
	dsVendors.load({
		params: {
			start: 0,
			limit: 30
		},
		callback: function(){
		    
		    var selectRecords = function(){
		        var ids;
		        try {
		            var url = Ext.urlDecode(window.location.search.substr(1));
		            if (url.checkcompany) {
                        var ids = url.checkcompany.split(',');
                    }
		        } catch (e) {}
		        if (ids) {
		            
		            var id, recordIndex, records = [];
		            for (var i=0; i<ids.length;i++) {
		                id = ids[i];

		                recordIndex = gridVendors.store.findBy(function(record){return record.get('id') == id;})
		                if (recordIndex != -1) {
		                    records.push(gridVendors.store.getAt(recordIndex));
		                }
		            }
		            gridVendors.selModel.selectRecords(records);
		            
		        } else {
		            gridVendors.selModel.selectAll();
		        }
		    };
		    
		    (function(){
    		    if (gridVendors.rendered) {
    		        selectRecords();
    		    } else {
    		        gridVendors.on('render', function(){
    		            selectRecords();
    		        });
    		    }
    		    
    		    gridVendors.getView().on('refresh', function(){
	                gridVendors.store.each(function(record, index){
            	        var prim = record.get('prim');
            	        if (prim) {
                            var row = gridVendors.getView().getRow(index);
                            new Ext.ToolTip({
                                target: row,
                                html: prim
                            });
            	        }
                    });
	            });
	            
		    }).defer(100);
		}
	});
	
	var progressBar = new Ext.ProgressBar({
	    hidden: true,
	    width: 150
	});
	var priceRenderer = function(value) {
	    if (value == '-') {
	        return value;
	    } else if (value) {
	        return value+' грн';
	    } else {
	        return '';
	    }
	};
	
	gridVendors = new Ext.grid.GridPanel({
		autoHeight: true,
		autoWidth: true,
		hidden: COMPANY_VAR != 1,
		title: 'Выбор такси',
		store: dsVendors,
		style: 'margin:6px',
		stripeRows: true,
   		frame: true,
   		startCalculate: function() {
			premessage_id = -1;
			progressBar.show();
			progressBar.updateText('Идет расчет...');
			if (submit.fireEvent('click', submit, 1) === false) {
			    progressBar.reset(true);
			}
		},
		//cm: cmVendors,
		tbar: [
			new Ext.TabsButton({
				id: 'start_calc_prices_button',
				text: 'Рассчитать',
				handler: function(){
				    gridVendors.startCalculate();
				}
			}),
			new Ext.TabsButton({
				id: 'stop_calc_prices_button',
				text: 'Стоп',
				disabled: true,
				handler: function() {
					stop_price = true;
					Ext.getCmp('start_calc_prices_button').enable();
					Ext.getCmp('stop_calc_prices_button').disable();
				}
			}),
			progressBar
		],
		trackMouseOver: false,
		animCollapse: false,
		sm: sm = new Ext.grid.CheckboxSelectionModel(),
		cm: cmVendors = new Ext.grid.ColumnModel([
				sm,
				/*{id: 'id', header: "ID", dataIndex: 'id', width: 20, sortable: true},*/
				{id: 'name', header: "Название", dataIndex: 'name', width: 40, sortable: true},
				/*{id: 'phone', header: "Телефон", dataIndex: 'phone', width: 70, sortable: false},*/
				{id: 'price', header: "Цена", dataIndex: 'price', width: 20, sortable: false, renderer: priceRenderer},
				{id: 'prim', header: "Примечание", dataIndex: 'prim', width: 40, sortable: false}
		]),
		bbar: tb_buttons2 = new Ext.Toolbar({
			hidden: false,
			items: [new Ext.Toolbar.TextItem({
				css: 'display: none;',
				text: bla_var
			})]
		}),

		viewConfig: {
			forceFit: true,
			enableRowBody: true,
			showPreview: true
		}
	});
	
	gridVendors.getList = function() {
	    var ignored_vendors = [];
	    try {
    	    var sm = gridVendors.selModel;
    	    gridVendors.store.each(function(record){
    	        if (!sm.isSelected(record)) {
    	            ignored_vendors.push(record.get('id'));
    	        }
    	    });
    	    
	    } catch (e) {
	        if (console && console.log) {
	            console.log(e);
	        }
	    }
	    return ignored_vendors.toString();
	    
		/*if ((COMPANY_VAR == 1) && (gridVendors.selModel.getSelections().length != 0)) {
		    var ignored_vendors_data=gridVendors.selModel.getSelections();
		    var ignored_vendors=new Array();
		    for(i=0; i<ignored_vendors_data.length; i++) {
				ignored_vendors[i]=ignored_vendors_data[i].data.id;
			}
			ignored_vendors+='';
		} else ignored_vendors='';
		
		return ignored_vendors;*/
	};
	
	var waitTime = 30; // Максимальное время расчета
	var time = 0;

	gridVendors.startCheckPrices = function() {
	    gridVendors.store.each(function(record){
	        record.set('price', '');
	        record.set('prim', '');
	    });
	    gridVendors.selModel.clearSelections();
	    
	    //start timer
	    time = 0;
	    gridVendors.CheckPrices();
	};
	gridVendors.CheckPrices = function() {

		if (premessage_id) {

			if (refresh_tick>=9) refresh_tick=9;

			progressBar.show();
			progressBar.updateProgress(time/waitTime, 'Идёт расчет (' + time + ')');

			if (refresh_tick == 0 || stop_price) {
			    
				gridVendors.store.reload({params: {premessage_id: premessage_id}});
				refresh_tick =9;
			}

			--refresh_tick;
            ++time;
		}
		
		if (!stop_price) {
		    setTimeout(gridVendors.CheckPrices, 1000);
		} else {
		    progressBar.reset(true);
		    Ext.getCmp('start_calc_prices_button').enable();
			Ext.getCmp('stop_calc_prices_button').disable();
		}
		if (time >= waitTime) {
            stop_price = true;
        }
        // останавливаемся, если все записи подсчитаны
        var stop = true;
        // выделяем записи, для которых подсчитана цена
        var recordsToSelect = [];
        gridVendors.store.each(function(record, index){
            
	        if (!record.get('price')) {
	            stop = false;
	        } else {
	            recordsToSelect.push(record);
	        }
	    });
	    if (recordsToSelect.length > 0) {
	        gridVendors.selModel.selectRecords(recordsToSelect);
	    }
	}

}