Kelda.Info.CurrencyCalcGrid = Ext.extend(Ext.grid.EditorGridPanel,{
	
	initComponent : function() {
		this.calcCache = [];
		this.updateCurrencies = function(editObj) {
			
			pageTracker._trackEvent('Currencies','CalculatorInput',editObj.record.data.name);
			/*
			 * editObj = {
			 * 		grid:the grid
			 * 		record:record being edited
			 * 		field:field name being edited
			 * 		value: value after edit
			 * 		originalValue:value before edit
			 * 		row:grid row index
			 * 		column:grid column index
			 * }
			 */
			//alert(editObj.value+" "+editObj.originalValue);
			if(editObj.value == editObj.originalValue)return;
			
			currency = editObj.record.data.name;
		
			var ikr=0;
			if(currency=='ISK')
				ikr = editObj.value;
			else
				ikr = editObj.value * editObj.record.data.value;
			for(i=0; i < editObj.grid.getStore().getCount();i++) {
				rec = editObj.grid.getStore().getAt(i);
				if(rec.data.name=='GVT')continue;
				
				//if(rec.data.name == currency)continue;
				//editor = editObj.grid.getColumnModel().getCellEditor(editObj.column,editObj.row);
				//if(!editor)
				//alert('no editor');
				//editor.setValue(ikr/rec.data.sell);
				var res = ikr/rec.data.value;
				rec.set("calc",res);
				editObj.grid.calcCache[rec.data.name] = res; 
			}
		};
		var pctChange = function(value,meta,rec){
			var oldValue = rec.get('oldDeltaValue');
			//console.log('value is '+value+' oldvalue is '+oldValue);
			if(value==oldValue) {
				meta.css = '';
				meta.attr = '';
			}
			else if(value < oldValue) {
				meta.css = 'red-class';
				meta.attr = 'style="color:red"';
				
			}else if(value > oldValue) {
				meta.css = 'green-class';
				meta.attr = 'style="color:green"';
			}
	        if(value > 0){
	            return '<span style="color:green;">' + Kelda.Info.ValueRenderer(value,keldan_lang) + '&#37;</span>';
	        }else if(value < 0){
	            return '<span style="color:red;">&#45;' + Kelda.Info.ValueRenderer(Math.abs(value),keldan_lang) + '&#37;</span>';
	        }else if(isNaN(value))
	        	return '-';
	        else
	        	return Kelda.Info.ValueRenderer(value,keldan_lang)+"&#37;";
	    };
	    this.rowActions = keldanNewRowaction(32);
	    var tmpGrid = this;
	    this.clearCellTask = new Ext.util.DelayedTask(function() {
	    		var a = Ext.DomQuery.jsSelect(".x-grid3-td-currencyval");
	    		if(a.length < 1)
	    			return;
	    		for(i=0;i<a.length;i++) {
	    			var el = Ext.get(a[i]);
	    			el.removeClass('red-class');
	    			el.removeClass('green-class');
	    		}
	    	});
	    
		columns=[{
            id: 'currency', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('currency'),
            tooltip:keldan_lang_text('currencyshort'),
            dataIndex: 'name',
            width: 70,
            renderer: function(dataValue,metadata,record,rowIndex,colIndex,store) {
				
				return "<div id=\"currency-icon\"><p><img src=\"themes/keldanpremium/images/currencies/"
				+dataValue+".png\" align=\"absmiddle\"/> " +
						dataValue+"</p></div>";
						
						
			},
            sortable: true
        },{
            id: 'currencyname', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('name'),
            dataIndex: 'description',
            width: 120,
            renderer : function(val,p,rec) {
        		return keldan_lang_text(rec.data.name.substring(0,3));
        	},
            tooltip:keldan_lang_text('currencyfullname'),
            sortable: true,
            hidden:true//(keldan_screen=='s'?true:false)
        },{
        	id: 'currencyval', //x-grid3-td-currencyval
        	header: keldan_lang_text('value'),
        	tooltip:keldan_lang_text('value'),
        	dataIndex: 'value',
        	width: 65,
        	align:'right',
        	sortable:true,
        	renderer:function(value,meta,rec) {
        			
        			var oldValue = rec.get('oldValue');
        			//console.log('value is '+value+' oldvalue is '+oldValue);
        			if(value==oldValue) {
        				meta.css = '';
        				meta.attr = '';
        			}
        			else if(value < oldValue) {
        				meta.css = 'red-class';
        				meta.attr = 'style="color:red"';
        				
        			}else if(value > oldValue) {
        				meta.css = 'green-class';
        				meta.attr = 'style="color:green"';
        			}
        			if(rec.data.name=='JPY')
        				return  Kelda.Info.ValueRendererFour(value,keldan_lang);
        			else
        				return Kelda.Info.ValueRenderer(value,keldan_lang);
        }
        		
        },{
        	id : 'currencychange',
        	header : keldan_lang_text('change'), //delta &#916;
        	tooltip:keldan_lang_text('change in percentage'),
        	dataIndex : 'deltaValue',
        	width : 75,
        	align:'right',
        	renderer : pctChange, 
        	sortable:true
        },{
        	id : 'editCurrency',
        	header : keldan_lang_text('insert amount'),
        	tooltip: keldan_lang_text('insert amount and get values of other currencies'),
        	dataIndex:'calc',
        	width:100,
        	align:'right',
        	renderer:function(val) {
        		return Kelda.Info.ValueRenderer(val,keldan_lang);
        	},
        	editor:new Ext.form.NumberField({
    			allowBlank: true,
    			allowNegative: false,
    			maxValue: 1000000000,
    			decimalSeparator:(keldan_lang=='is'?',':'.'),
    			decimalPrecision:2,
    			enableKeyEvents:false,
    			onFocus:function() {
        			this.setValue('');
        		}
        	})
        },this.rowActions];
		var cgrid = this;
		var store = new Ext.data.JsonStore({
			id:'name',
			url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"connector/getCurrencyCalc",
        	root: 'response',
        	autoDestroy:true,
            //idProperty: 'feedId',
            fields: Ext.data.Record.create([
                     {name:'name',type:'string'},
                     {name:'description',type:'string'},      
                     {name:'value',type:'float'},
                     {name:'oldValue',mapping:'value'},
                     {name:'deltaValue',type:'float'},
                     {name:'calc',type:'float'},
                     {name:'marketOpen',type:'boolean'},
                     {name:'ricCode',type:'string'}
            ])
           
        });
		
		store.on('load',function(store,recs,opt){
			//this.body.unmask();
			
			this.loadMask.disable();
			var rec = null;
			if(this.calcCache) {
				for(i = 0; i < store.getTotalCount();i++) {
					rec = store.getAt(i);
					rec.set('calc',this.calcCache[rec.data.name]);
				}
				for(j=0;j<recs.length;j++) {
					var marketOpen = recs[j].data.marketOpen;
					if(!(marketOpen===undefined))break;
				}
				
				if(!rec)return;
				var marketOpen = rec.data.marketOpen;
				this.bubble(function(){
					if(this.header) {
						if(marketOpen) {
							this.header.removeClass('redlight');
							this.header.addClass('greenlight');
						}else {
							this.header.removeClass('greenlight');
							this.header.addClass('redlight');
						}
					}
				})
			}
			
			if(Ext.Msg.isVisible()) {
				keldan_store_count--;
				Ext.Msg.updateProgress((keldan_fixed_stcount-keldan_store_count)/keldan_fixed_stcount
						,keldan_fixed_stcount-keldan_store_count+(keldan_lang=='is' ? ' af ' : ' of ')+keldan_fixed_stcount);
				if(keldan_store_count==0) {
					Ext.Msg.hide();
					keldan_store_count=-1;
				}
			}
		},this);
		

		
		this.currencyTask = {
			run : function() {
				cgrid.loadMask.disable();
				Ext.Ajax.request({	
				 url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"connector/getCurrencyCalc",
				 success: function(response){
					var obj = Ext.decode(response.responseText);
					var data = obj.response;
					var rec;
					var inc = (60000/data.length) / 2;
					for(var i = 0; i < data.length; i++){
						rec = store.getById(data[i].name);
						if(rec){
							rec.data.oldValue = rec.get('value');
							rec.data.oldDeltaValue = rec.get('deltaValue');
							rec.set('marketOpen',data[i].marketOpen)
							//r.set('value', d[i].value);
							//r.set('deltaValue',d[i].deltaValue);
							var del = (Math.random() * 10000) % 7000; 
							(function(r,val,deltaVal) {
								r.set('value', val);
								r.set('deltaValue',deltaVal);
							}).defer(del,this,[rec,data[i].value,data[i].deltaValue]);
							(function(r,val,deltaVal) {
								r.set('oldValue',val);
								r.set('value',val);
								r.set('oldDeltaValue',deltaVal);
								r.set('deltaValue',deltaVal);
							}).defer(del+1000,this,[rec,data[i].value,data[i].deltaValue]);
							
							
							//set the rest of the store
							
						}else{
							rec = new store.recordType(data[i], data[i].name);
							store.add(rec);
						}
					}
					var marketOpen = rec.data.marketOpen;
					this.bubble(function(){
						if(this.header) {
							if(marketOpen) {
								this.header.removeClass('redlight');
								this.header.addClass('greenlight');
							}else {
								this.header.removeClass('greenlight');
								this.header.addClass('redlight');
							}
						}
					});
					//this.clearCellTask.delay(2000);
				 },
				 scope:cgrid
				});
				keldanCloseStoreMask();

			},
			interval : 60000
			
		};
		
		
		/*
		this.on("render",function(comp) {
			//this.body.mask('Hled inn gognum ...','x-mask-loading');
			if(this.getStore().lastOptions) {
				return;
			}else {
				Ext.TaskMgr.start(this.currencyTask);
				
			}
			//m.show();
		},this);
		*/
		this.on('show',function(comp) {
			Ext.TaskMgr.start(this.currencyTask);
		},this);
		this.on('hide',function(comp) {
			Ext.TaskMgr.stop(this.currencyTask);
		},this);
		this.on('destroy',function(){
			Ext.TaskMgr.stop(this.currencyTask);
		},this);
		Ext.apply(this,{
			id:'currencygrid_'+Math.random()*102,
			stateId:'currencygrid',
    		store : store,
    		plugins:[this.rowActions],
    		loadMask:{msg:keldan_lang_text('loading'),removeMask:true},
    	    columns:columns,
    	    //width:400,
    	    viewConfig: {
                forceFit:true,
                markDirty:false,
                scrollOffset:2,
                getRowClass : function(record, rowIndex, p, store){
					if ((parseInt(rowIndex) % 2) == 0)
						return 'odd-row';

				},
				columnsText:keldan_lang_text('columns'),
				sortAscText:keldan_lang_text('sort ascending'),
				sortDescText:keldan_lang_text('sort descending')
            },
            autoExpandColumn:'currencyname',
           title:keldan_lang_text('exchange rate')
    	});
    	
    	this.on('afteredit',this.updateCurrencies);
    	this.on('celldblclick',function(grid,rowIndex,columnIndex,event){
    		var row = grid.getStore().getAt(rowIndex);
    		if(row.data.name=='GVT'){
    			grid.stopEditing(true);
    			return;	
    		}
    		
    	});
    	this.on('cellclick',function(grid,rowIndex,columnIndex,event){
    		var row = grid.getStore().getAt(rowIndex);
    		if(row.data.name=='GVT'){
    			grid.stopEditing(true);
    			return;
    		}
    		this.fireEvent('celldblclick',grid,rowIndex,columnIndex,event);
    	});
    	Kelda.Info.CurrencyCalcGrid.superclass.initComponent.apply(this,arguments);
	},
	 stopPoll : function() {
		Ext.TaskMgr.stop(this.currencyTask);
	},
	startPoll : function() {
		Ext.TaskMgr.start(this.currencyTask);
	}
});
Ext.reg('CP_CalcGrid',Kelda.Info.CurrencyCalcGrid);
Ext.reg('CP_Child',Kelda.Info.CurrencyCalcGrid);
Kelda.Info.ISCBFXGrid = Ext.extend(Ext.grid.GridPanel,{
	
	initComponent : function() {
		
		var pctChange = function(val){
	        if(val > 0){
	            return '<span style="color:green;">' + Kelda.Info.ValueRenderer(val,keldan_lang) + '&#37;</span>';
	        }else if(val < 0){
	            return '<span style="color:red;">&#45;' + Kelda.Info.ValueRenderer(Math.abs(val),keldan_lang) + '&#37;</span>';
	        }else if(isNaN(val))
	        	return '-';
	        else
	        	return Kelda.Info.ValueRenderer(val,keldan_lang);
	    };
	    var tmpGrid = this;
		columns=[{
            id: 'currency', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('currency'),
            tooltip:keldan_lang_text('currencyshort'),
            dataIndex: 'name',
            width: 70,
            renderer: function(dataValue,metadata,record,rowIndex,colIndex,store) {
				dataValue=dataValue.substring(0,3);
				return "<div id=\"currency-icon\"><p><img src=\"themes/keldanpremium/images/currencies/"
				+dataValue+".png\" align=\"absmiddle\"/> " +
						dataValue+"</p></div>";
						
						
			},
            sortable: true
        },{
            id: 'currencyname', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('name'),
            dataIndex: 'fullName',
            width: 130,
            tooltip:keldan_lang_text('currencyfullname'),
            renderer : function(val,p,rec) {
        		return keldan_lang_text(rec.data.name.substring(0,3));
        	},
            sortable: true,
            hidden:true
        },{
        	id: 'currencyval',
        	header: keldan_lang_text('mid exchange rate'),
        	tooltip:keldan_lang_text('mid exchange rate'),
        	dataIndex: 'last',
        	width: 55,
        	align:'right',
        	sortable:true,
        	renderer:function(val) {
        		return Kelda.Info.ValueRenderer(val,keldan_lang);
        	}
        },{
        	id: 'currencybid',
        	header: keldan_lang_text('bid exchange rate'),
        	tooltip:keldan_lang_text('bid exchange rate'),
        	dataIndex: 'bid',
        	width: 55,
        	align:'right',
        	sortable:true,
        	renderer:function(val) {
        		return Kelda.Info.ValueRenderer(val,keldan_lang);
        	}
        },{
        	id: 'currencyask',
        	header: keldan_lang_text('ask exchange rate'),
        	tooltip:keldan_lang_text('ask exchange rate'),
        	dataIndex: 'ask',
        	width: 55,
        	align:'right',
        	sortable:true,
        	renderer:function(val) {
        		return Kelda.Info.ValueRenderer(val,keldan_lang);
        	}
        },{
            id: 'Updated', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('dateshort'),
            dataIndex: 'updated',
            tooltip:keldan_lang_text('date'),
            width: 60,
            hidden:false,
            renderer:Kelda.Info.DateRenderer(),
        	sortable: true
        }];
		var store = new Ext.data.JsonStore({
        	root: 'response',
        	autoDestroy:true,
            //idProperty: 'feedId',
            fields: Ext.data.Record.create([
                     {name:'name',type:'string'},
                     {name:'fullName',type:'string'},      
                     {name:'last',type:'float'},
                     {name:'bid',type:'float'},
                     { name:'ask',type:'float'},
                     {name:'updated',mapping:'lastUpdated',type: 'date', dateFormat: 'timestamp'},
                     {name:'marketOpen',type:'boolean'}
                     
            ]),
            proxy: new Ext.data.HttpProxy({
                //url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"feedconnect/getFeed"
            	url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"connector/getIscbFx"
            })
            
        });
		store.on('load',function(store,recs,opt){
			var rec = store.getAt(0);
			
			var marketOpen = rec.data.marketOpen;
			//console.log(marketOpen);
			this.bubble(function(){
				if(this.header) {
					if(marketOpen) {
						this.header.removeClass('redlight');
						this.header.addClass('greenlight');
					}else {
						this.header.removeClass('greenlight');
						this.header.addClass('redlight');
					}
				}
			});
			if(Ext.Msg.isVisible()) {
				keldan_store_count--;
				Ext.Msg.updateProgress((keldan_fixed_stcount-keldan_store_count)/keldan_fixed_stcount
						,keldan_fixed_stcount-keldan_store_count+(keldan_lang=='is' ? ' af ' : ' of ')+keldan_fixed_stcount);
				if(keldan_store_count==0) {
					Ext.Msg.hide();
					keldan_store_count=-1;
				}
			}
		},this);
		
		this.iscbfxTask = {
			run : function() {
				//console.log('relaod');
				//store.load({params:{feedName:'iscbfx'}});
				store.load();
			},
			interval : 3600000
		};
		/*
		this.on('render',function() {
			if(this.getStore().loadOptions) {
				return;
			}else {
				Ext.TaskMgr.start(this.iscbfxTask);
			}
		},this);
		*/
		this.on('show',function(){
			Ext.TaskMgr.start(this.iscbfxTask);
		},this);
		this.on('hide',function(){
			Ext.TaskMgr.stop(this.iscbfxTask);
		},this);
		this.on('destroy',function(){
			Ext.TaskMgr.stop(this.iscbfxTask);
		});
		Ext.apply(this,{
			id:'iscbfx_'+Math.random()*1023,
			stateId:'iscbfx',
    		store : store,
    	    columns:columns,
    	    //width:400,
    	    viewConfig: {
                forceFit:true,
                scrollOffset:2,
                getRowClass : function(record, rowIndex, p, store){
					if ((parseInt(rowIndex) % 2) == 0)
						return 'odd-row';

				},
				columnsText:keldan_lang_text('columns'),
				sortAscText:keldan_lang_text('sort ascending'),
				sortDescText:keldan_lang_text('sort descending')
            },
            autoExpandColumn:'currencyname',
            title:keldan_lang_text('central bank')
           
           
    	});
    	
    	
    	
    	
    	
    	Kelda.Info.ISCBFXGrid.superclass.initComponent.apply(this,arguments);
	},
	 stopPoll : function() {
		Ext.TaskMgr.stop(this.iscbfxTask);
	},
	startPoll : function() {
		Ext.TaskMgr.start(this.iscbfxTask);
	}
});
Ext.reg('ISCBFXGrid',Kelda.Info.ISCBFXGrid);

Kelda.Info.ISCGrid = Ext.extend(Ext.grid.GridPanel,{
	
	initComponent : function() {
		
		var pctChange = function(val){
	        if(val > 0){
	            return '<span style="color:green;">' + Kelda.Info.ValueRenderer(val,keldan_lang) + '&#37;</span>';
	        }else if(val < 0){
	            return '<span style="color:red;">&#45;' + Kelda.Info.ValueRenderer(Math.abs(val),keldan_lang) + '&#37;</span>';
	        }else if(isNaN(val))
	        	return '-';
	        else
	        	return Kelda.Info.ValueRenderer(val,keldan_lang);
	    };
	    var tmpGrid = this;
		columns=[{
            id: 'currency', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('currency'),
            tooltip:keldan_lang_text('currencyshort'),
            dataIndex: 'name',
            width: 70,
            renderer: function(dataValue,metadata,record,rowIndex,colIndex,store) {
				dataValue=dataValue.substring(0,3);
				return "<div id=\"currency-icon\"><p><img src=\"themes/keldanpremium/images/currencies/"
				+dataValue+".png\" align=\"absmiddle\"/> " +
						dataValue+"</p></div>";
						
						
			},
            sortable: true
        },{
            id: 'currencyname', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('name'),
            dataIndex: 'fullName',
            renderer : function(val,p,rec) {
        		return keldan_lang_text(rec.data.name.substring(0,3));
        	},
            width: 130,
            tooltip:keldan_lang_text('currencyfullname'),
            sortable: true,
            hidden:(keldan_screen=='s'?true:false)
        },{
        	id: 'currencybid',
        	header: keldan_lang_text('value'),
        	tooltip:keldan_lang_text('value'),
        	dataIndex: 'bid',
        	width: 55,
        	align:'right',
        	sortable:true,
        	renderer:function(val) {
        		return Kelda.Info.ValueRenderer(val,keldan_lang);
        	}
        },{
            id: 'Updated', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('dateshort'),
            dataIndex: 'updated',
            tooltip:keldan_lang_text('date'),
            width: 60,
            hidden:false,
            renderer:Kelda.Info.DateRenderer(),
        	sortable: true
        }];
		var store = new Ext.data.JsonStore({
        	root: 'response',
        	autoDestroy:true,
            //idProperty: 'feedId',
            fields: Ext.data.Record.create([
                     {name:'name',type:'string'},
                     {name:'fullName',type:'string'},      
                     {name:'last',type:'float'},
                     {name:'bid',type:'float'},
                     {name:'ask',type:'float'},
                     {name:'updated',mapping:'lastUpdated',type: 'date', dateFormat: 'timestamp'},
                     {name:'marketOpen',type:'boolean'}
                     
            ]),
            proxy: new Ext.data.HttpProxy({
                //url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"feedconnect/getFeed"
            	url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"connector/getIsc"
            })
            
        });
		store.on('load',function(store,recs,opt){
			var rec = store.getAt(0);
			var marketOpen = rec.data.marketOpen;
			this.bubble(function(){
				if(this.header) {
					if(marketOpen) {
						this.header.removeClass('redlight');
						this.header.addClass('greenlight');
					}else {
						this.header.removeClass('greenlight');
						this.header.addClass('redlight');
					}
				}
			});
			if(Ext.Msg.isVisible()) {
				keldan_store_count--;
				Ext.Msg.updateProgress((keldan_fixed_stcount-keldan_store_count)/keldan_fixed_stcount
						,keldan_fixed_stcount-keldan_store_count+(keldan_lang=='is' ? ' af ' : ' of ')+keldan_fixed_stcount);
				if(keldan_store_count==0) {
					Ext.Msg.hide();
					keldan_store_count=-1;
				}
			}
		},this);
		
		this.iscTask = {
			run : function() {
				//console.log('relaod');
				//store.load({params:{feedName:'isc'}});
				store.load();
			},
			interval : 3600000
		};
		/*
		this.on('render',function(){
			if(this.getStore().loadOptions) {
				return;
			}else {
				Ext.TaskMgr.start(this.iscTask)
			}
		},this);
		*/
		this.on('show',function() {
			Ext.TaskMgr.start(this.iscTask);
		},this);
		this.on('hide',function(){
			Ext.TaskMgr.stop(this.iscTask);
		});
		this.on('destroy',function(){
			Ext.TaskMgr.stop(this.iscTask);
		});
		Ext.apply(this,{
			id:'iscgrid_'+Math.random()*103,
			stateId:'iscgrid',
    		store : store,
    	    columns:columns,
    	    //width:400,
    	    viewConfig: {
                forceFit:true,
                scrollOffset:10,
                getRowClass : function(record, rowIndex, p, store){
					if ((parseInt(rowIndex) % 2) == 0)
						return 'odd-row';

				},
				columnsText:keldan_lang_text('columns'),
				sortAscText:keldan_lang_text('sort ascending'),
				sortDescText:keldan_lang_text('sort descending')
            },
            autoExpandColumn:'currencyname',
            title:keldan_lang_text('customs exchange rate')
           
           
    	});
    	
    	
    	
    	
    	
    	Kelda.Info.ISCGrid.superclass.initComponent.apply(this,arguments);
	},
	 stopPoll : function() {
		Ext.TaskMgr.stop(this.iscTask);
	},
	startPoll : function() {
		Ext.TaskMgr.start(this.iscTask);
	}
});
Ext.reg('ISCGrid',Kelda.Info.ISCGrid);

Kelda.Info.Valitor = Ext.extend(Ext.grid.GridPanel,{
	
	initComponent : function() {
		
		var pctChange = function(val){
	        if(val > 0){
	            return '<span style="color:green;">' + Kelda.Info.ValueRenderer(val,keldan_lang) + '&#37;</span>';
	        }else if(val < 0){
	            return '<span style="color:red;">&#45;' + Kelda.Info.ValueRenderer(Math.abs(val),keldan_lang) + '&#37;</span>';
	        }else if(isNaN(val))
	        	return '-';
	        else
	        	return Kelda.Info.ValueRenderer(val,keldan_lang);
	    };
	    var tmpGrid = this;
		columns=[{
            id: 'currency', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('currency'),
            tooltip:keldan_lang_text('currencyshort'),
            dataIndex: 'name',
            width: 70,
            renderer: function(dataValue,metadata,record,rowIndex,colIndex,store) {
				dataValue=dataValue.substring(0,3);
				return "<div id=\"currency-icon\"><p><img src=\"themes/keldanpremium/images/currencies/"
				+dataValue+".png\" align=\"absmiddle\"/> " +
						dataValue+"</p></div>";
						
						
			},
            sortable: true
        },{
            id: 'currencyname', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:keldan_lang_text('name'),
            dataIndex: 'fullName',
            width: 130,
            renderer : function(val,p,rec) {
        		return keldan_lang_text(rec.data.name.substring(0,3));
        	},
            tooltip:keldan_lang_text('currencyfullname'),
            sortable: true,
            hidden:(keldan_screen=='s'?true:false)
        },{
        	id: 'currencylast',
        	header: 'VISA',
        	tooltip:'VISA',
        	dataIndex: 'last',
        	width: 55,
        	align:'right',
        	sortable:true,
        	renderer:function(val) {
        		return Kelda.Info.ValueRenderer(val,keldan_lang);
        	}
        },{
            id: 'Updated', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('dateshort'),
            dataIndex: 'updated',
            tooltip:keldan_lang_text('date'),
            width: 60,
            hidden:false,
            renderer:Kelda.Info.DateRenderer(),
        	sortable: true
        }];
		var store = new Ext.data.JsonStore({
        	root: 'response',
            //idProperty: 'feedId',
        	autoDestroy:true,
            fields: Ext.data.Record.create([
                     {name:'name',type:'string'},
                     {name:'fullName',type:'string'},  
                     {name:'category',type:'string'},
                     {name:'last',type:'float'},
                     {name:'updated',mapping:'lastUpdated',type: 'date', dateFormat: 'timestamp'},
                     {name:'marketOpen',type:'boolean'}
            ]),
            proxy: new Ext.data.HttpProxy({
                //url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"feedconnect/getFeed"
            	url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"connector/getValitor"
            }),
            sortInfo:{field:'category',direction:'ASC'}
        });
		store.on('load',function(store,recs,opt){
			var rec = store.getAt(0);
			var marketOpen = rec.data.marketOpen;
			this.bubble(function(){
				if(this.header) {
					if(marketOpen) {
						this.header.removeClass('redlight');
						this.header.addClass('greenlight');
					}else {
						this.header.removeClass('greenlight');
						this.header.addClass('redlight');
					}
				}
			});
			if(Ext.Msg.isVisible()) {
				keldan_store_count--;
				Ext.Msg.updateProgress((keldan_fixed_stcount-keldan_store_count)/keldan_fixed_stcount
						,keldan_fixed_stcount-keldan_store_count+(keldan_lang=='is' ? ' af ' : ' of ')+keldan_fixed_stcount);
				if(keldan_store_count==0) {
					Ext.Msg.hide();
					keldan_store_count=-1;
				}
			}
		},this);
		
		this.valTask = {
			run : function() {
				//console.log('relaod');
				//store.load({params:{feedName:'valitor'}});
				store.load();
			},
			interval : 3600000 
		};
		/*
		this.on("render",function() {
			if(this.getStore().lastOptions) {
				return;
			}else {
				Ext.TaskMgr.start(this.valTask);
			}
			
		},this);
		*/
		this.on('show',function() {
			Ext.TaskMgr.start(this.valTask);
		});
		this.on('destroy',function(){
			Ext.TaskMgr.stop(this.valTask);
		});
		this.on('hide',function(){
			Ext.TaskMgr.stop(this.valTask);
		});
		this.on('close',function(){
			Ext.TaskMgr.stop(this.valTask);
		});
		Ext.apply(this,{
			id:'valitorgrid_'+Math.random()*108,
			stateId:'valitorgrid',
    		store : store,
    	    columns:columns,
    	    //width:400,
    	    viewConfig: {
                forceFit:true,
                scrollOffset:2,
                getRowClass : function(record, rowIndex, p, store){
					if ((parseInt(rowIndex) % 2) == 0)
						return 'odd-row';

				},
				columnsText:keldan_lang_text('columns'),
				sortAscText:keldan_lang_text('sort ascending'),
				sortDescText:keldan_lang_text('sort descending')
            },
            autoExpandColumn:'currencyname',
            title:keldan_lang_text('creditcards')
           
           
    	});
    	
    	
    	
    	
    	
    	Kelda.Info.Valitor.superclass.initComponent.apply(this,arguments);
	},
	 stopPoll : function() {
		Ext.TaskMgr.stop(this.valTask);
	},
	startPoll : function() {
		Ext.TaskMgr.start(this.valTask);
	}
});
Ext.reg('Valitor',Kelda.Info.Valitor);

Kelda.Info.FxMatrix = Ext.extend(Ext.grid.GridPanel,{
	
	initComponent : function() {
		this.zombieRecords = new Ext.util.MixedCollection();
		this.recordBelow = [];
		this.recordAbove = [];
		this.firstLoad = true;
	    var defaultRenderer = function(value,meta,rec,rIdx,cIdx,store) {
	    	//console.log(' Col index :'+cIdx+' Value '+val);
	    	oldValue = rec.data[rec.fields.itemAt(cIdx).name+'OLD'];
	    	//if(oldValue)
	    		//console.log('oldValue - new value : '+oldValue+'   '+value);
	    	if(value==oldValue) {
				meta.css = '';
				meta.attr = '';
			}
			else if(value < oldValue) {
				meta.css = 'red-class';
				meta.attr = 'style="color:red"';
				
			}else if(value > oldValue) {
				meta.css = 'green-class';
				meta.attr = 'style="color:green"';
			}
	    	if(value==0)
	    		return '-';
	    	else
	    		return Kelda.Info.ValueRenderer(value,keldan_lang);
	    		
    	};
	    
		var colModel= new Ext.grid.ColumnModel([{
            id: 'currency', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header: keldan_lang_text('currency'),
            tooltip:keldan_lang_text('currencyshort'),
            dataIndex: 'name',
            width: 50,
            renderer: function(dataValue,metadata,record,rowIndex,colIndex,store) {
				dataValue=dataValue.substring(0,3);
				return "<div id=\"currency-icon\"><p><img src=\"themes/keldanpremium/images/currencies/"
				+dataValue+".png\" align=\"absmiddle\"/> " +
						dataValue+"</p></div>";
						
						
			},
            sortable: true
        },{
            id: 'ISK', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'ISK',
            dataIndex: 'ISK',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'EUR', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'EUR',
            dataIndex: 'EUR',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'USD', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'USD',
            dataIndex: 'USD',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'GBP', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'GBP',
            dataIndex: 'GBP',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'DKK', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'DKK',
            dataIndex: 'DKK',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'SEK', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'SEK',
            dataIndex: 'SEK',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'NOK', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'NOK',
            dataIndex: 'NOK',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'JPY', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'JPY',
            dataIndex: 'JPY',
            renderer:defaultRenderer,
            width: 30,
            sortable: true
        },{
            id: 'CHF', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'CHF',
            dataIndex: 'CHF',
            renderer:defaultRenderer,
            width: 30,
            //hidden:(keldan_screen=='s'?true:false),
            sortable: true
        },{
            id: 'CAD', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
            header:'CAD',
            dataIndex: 'CAD',
            renderer:defaultRenderer,
            width: 30,
            //hidden:(keldan_screen=='s'?true:false),
            sortable: true
        }]);
		
		var store = new Ext.data.JsonStore({
        	root: 'response',
        	autoDestroy:true,
        	url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"connector/getFxMatrix",
            //idProperty: 'feedId',
            fields: Ext.data.Record.create([
                     {name:'name',type:'string'},
                     {name:'ISK',type:'float'},
                     {name:'EUR',type:'float'},
                     {name:'USD',type:'float'},
                     {name:'GBP',type:'float'},
                     {name:'DKK',type:'float'},
                     {name:'SEK',type:'float'},
                     {name:'NOK',type:'float'},
                     {name:'JPY',type:'float'},
                     {name:'CHF',type:'float'},
                     {name:'CAD',type:'float'},
                     {name:'ISKOLD',type:'float'},
                     {name:'EUROLD',type:'float'},
                     {name:'USDOLD',type:'float'},
                     {name:'GBPOLD',type:'float'},
                     {name:'DKKOLD',type:'float'},
                     {name:'SEKOLD',type:'float'},
                     {name:'NOKOLD',type:'float'},
                     {name:'JPYOLD',type:'float'},
                     {name:'CHFOLD',type:'float'},
                     {name:'CADOLD',type:'float'},
                     {name:'category',type:'string'},
                     {name:'marketOpen',type:'bool'}
            ])
            
            //sortInfo:{field:'category',direction:'ASC'}
        });
		
		colModel.on('hiddenchange',function(model,cIdx,hidden){
			if(cIdx==0)return;
			var row = this.getView().getRow(cIdx-1);
			if(hidden) {
				var header = model.getColumnHeader(cIdx);
				var rec = store.getAt(cIdx-1-this.recordAbove[cIdx-1]);
				if(!rec) return;
				if(header !== rec.data.name){
					return;
				}
				this.zombieRecords.add(cIdx-1,rec);
				store.remove(rec);
				for(i=0;i<cIdx-1;i++) {
					//console.log('index '+i+' has '+this.recordIndexes[i]);
					this.recordBelow[i] = this.recordBelow[i] + 1; 
				}
				for(j=cIdx;j<this.recordAbove.length;j++) {
					this.recordAbove[j] = this.recordAbove[j]+1;
				}
				
			}else {
				console.log('hidden false');
				var re = this.zombieRecords.get(cIdx-1);
				
				var delta = store.getTotalCount() - store.data.length;
				store.insert(cIdx-delta+this.recordBelow[cIdx-1],re);
			
				for(i=0;i<cIdx-1;i++) {
					this.recordBelow[i] = this.recordBelow[i] - 1; 
				}
				for(j=cIdx;j<this.recordAbove.length;j++) {
					this.recordAbove[j] = this.recordAbove[j] - 1;
				}
			}
			//this.getView().refresh(false);
		},this);
		var cgrid = this;
		this.fxMatrixTask = {
				run : function() {
					Ext.Ajax.request({	
					 url: window.location.protocol+"//"+window.location.hostname+"/"+basePath+"connector/getFxMatrix",
					 success: function(response){
						var obj = Ext.decode(response.responseText);
						var data = obj.response;
						var rec;
						for(var i = 0; i < data.length; i++){
							d = data[i];
							rec = store.getById(data[i].name);
							if(rec){
								var del = (Math.random() * 10000) % 7000;
								(function(rec,d) {
									rec.fields.eachKey(function(key,item){
										//copy values to oldvalues
										val = this.record.get(key);
										if(this.record.fields.containsKey(key+'OLD')) {
											this.record.data[key+'OLD']=val;
										}
										if(this.data[key]) {
											this.record.set(key,this.data[key]);
										}
										//console.log('setting marketopen to '+this.data['marketOpen']);
										this.record.set('marketOpen',this.data['marketOpen']);
									},{record:rec,data:d});
								}).defer(del,this,[rec,d]);
								
								(function(rec,d) {
									
									rec.fields.eachKey(function(key,item){
										
										//copy values to oldvalues
										val = this.record.get(key);
										this.record.set(key+'OLD',val);
										this.record.set(key,val);
									},{record:rec,data:d});
								}).defer(del+1500,this,[rec,d]);
								
								 /*
								(function(r,val,deltaVal) {
									r.set('value', val);
									r.set('deltaValue',deltaVal);
								}).defer(del,this,[rec,data[i].value,data[i].deltaValue]);
								(function(r,val,deltaVal) {
									r.set('oldValue',val);
									r.set('value',val);
									r.set('oldDeltaValue',deltaVal);
									r.set('deltaValue',deltaVal);
								}).defer(del+1000,this,[rec,data[i].value,data[i].deltaValue]);
								*/
								
								//set the rest of the store
								
							}else{
								rec = new store.recordType(data[i], data[i].name);
								store.add(rec);
							}
						}
						this.afterStoreLoad(store);
					
						
						//this.clearCellTask.delay(2000);
					 },
					 scope:cgrid
					});
					keldanCloseStoreMask();

				},
				interval : 30000
				
			};
		
		/*
		this.fxMatrixTask = {
			run : function() {
				//console.log('relaod');
				//store.load({params:{feedName:'fxMatrix'}});
				store.load();
			},
			interval : 20000//900000
		};
		*/
		
		/*
		this.on("render",function() {
			if(this.getStore().lastOptions) {
				return;
			}else {
				Ext.TaskMgr.start(this.fxMatrixTask);
			}
			
		},this);
		*/
		this.on('show',function(){
			Ext.TaskMgr.start(this.fxMatrixTask);
		});
		this.on('hide',function(){
			Ext.TaskMgr.stop(this.fxMatrixTask);
		});
		this.on('destroy',function(){
			Ext.TaskMgr.stop(this.fxMatrixTask);
		});
		this.on('close',function(){
			Ext.TaskMgr.stop(this.fxMatrixTask);
		});
		Ext.apply(this,{
			id:'fxmatrixgrid_'+Math.random()*106,
			stateId:'fxmatrix',
    		store : store,
    	    colModel:colModel,
    	    trackMouseOver:false,
    	    //width:400,
    	    viewConfig: {
                forceFit:true,
                scrollOffset:2,
                markDirty:false,
                getRowClass : function(record, rowIndex, p, store){
					if ((parseInt(rowIndex) % 2) == 0)
						return 'odd-row';
				},
				columnsText:keldan_lang_text('columns'),
				sortAscText:keldan_lang_text('sort ascending'),
				sortDescText:keldan_lang_text('sort descending')
            },
            autoExpandColumn:'currencyname',
            title:keldan_lang_text('fx')
           
          
    	});
		this.on('mouseover',function(e,t){
			e.stopEvent();
			var row,col;
			if( (row = this.getView().findRowIndex(t))!== false && (col=this.getView().findCellIndex(t))!==false) {
				if(col==0)return;
				//var htmlel = this.getView().getCell(row,col);
				var rec = this.getStore().getAt(row);
				
				//var recinv = this.getStore().getAt(col-1);
				var recinv = this.getStore().getAt(col-1-this.recordAbove[col-1]);
				var header = this.getColumnModel().getColumnHeader(col);
				var headerinv = this.getColumnModel().getColumnHeader(row+1);
				//var el1 = Ext.fly(htmlel);
				
				
				var headerCell = this.getView().getHeaderCell(col);
				//Ext.DomHelper.applyStyles(headerCell,{
				//	'background-color':'green'
				//});
				var rowCell = this.getView().getCell(row,0);
				//Ext.DomHelper.applyStyles(rowCell,{
				//	'background-color':'green',
				//	'color':'white'
				//});
				var htmlel = this.getView().getCell(row,col);
				/*
				var el1 = Ext.fly(htmlel);
				var b1 = el1.getBox();
				el1.setBox({x:b1.x-4,y:b1.y,width:b1.width+4,height:b1.height});
				*/
				Ext.DomHelper.applyStyles(htmlel,{
					'border':'black 1px solid',
					'background-color':'#71b1d8',
					'color':'white'
					
				});
				var pre ='';var exp = '';
				
				if(header != rec.data.name) {
					pre = '<pre><b>1 '+rec.data.name+' = '+Kelda.Info.ValueRendererFour(rec.data[header],keldan_lang)+' '+header+'</b></pre>'; 
					exp = '<pre><b>1 '+header+' = '+Kelda.Info.ValueRendererFour(recinv.data[headerinv],keldan_lang)+' '+rec.data.name+'</b></pre>';
				}else {
					pre = '<pre><b>1 '+rec.data.name+' = 1 '+header+'</b></pre>';
				}
				
				var tt1 = new Ext.ToolTip({
					target:htmlel,
					html:pre+exp,
					//cls:'fx-tooltip',
					//ctCls:'ct-fx-tooltip',
					showDelay:0,
					hideDelay:0,
					trackMouse:true,
					frame:true,
					dismissDelay:0
				});
				
				
				
				
				
				/*
				var b1 = el1.getBox();
				var newWidth1 = 0;//60 - b1.width;
				Ext.apply(el1,{
					origBox:b1
				});
				el1.setBox({x:b1.x,y:b1.y,width:b1.width+newWidth1,height:b1.height});
				el1.setStyle({
					'border':'red 1px solid',
					'background-color':'yellow'
				});
				var htmlels = this.getView().getCell(col-1,row+1);
				var el2 = Ext.fly(htmlels);
				var b2 = el2.getBox();
				el2.setStyle
				var newWidth2 = 0;//60 - b2.width;
				el2.setBox({x:b2.x,y:b2.y,width:b2.width+newWidth2,height:b2.height});
				el2.setStyle({
					'border':'red 1px solid',
					'background-color':'yellow'
				});
				*/
			}
		},this);
		this.on('mouseout',function(e,t){
			e.stopEvent();
			var row,col;
			if( (row = this.getView().findRowIndex(t))!== false && (col=this.getView().findCellIndex(t))!==false) {
				if(col==0)return;
				
				var headerCell = this.getView().getHeaderCell(col);
				/*
				Ext.DomHelper.applyStyles(headerCell,{
					'background-color':'transparent'
					
				});
				var rowCell = this.getView().getCell(row,0);
				Ext.DomHelper.applyStyles(rowCell,{
					'background-color':'transparent',
					'color':'black'
				});
				*/
				var htmlel = this.getView().getCell(row,col);
				Ext.DomHelper.applyStyles(htmlel,{
					'border':'none',
					'background-color':'transparent',
					'color':'black',
					'font-size' : '11px'
				});
				/*
				var htmlel = this.getView().getCell(row,col);
				var el1 = Ext.fly(htmlel);
				var b1 = el1.getBox();
				var newWidth1 = 0;//60 - b1.width;
				Ext.apply(el1,{
					origBox:b1
				});
				el1.setBox({x:b1.x,y:b1.y,width:b1.width-newWidth1,height:b1.height});
				el1.setStyle({
					'border':'none',
					'background-color':'transparent'
				});
				var htmlels = this.getView().getCell(col-1,row+1);
				var el2 = Ext.fly(htmlels);
				var b2 = el2.getBox();
				el2.setStyle
				var newWidth2 = 0;//60 - b2.width;
				el2.setBox({x:b2.x,y:b2.y,width:b2.width-newWidth2,height:b2.height});
				el2.setStyle({
					'border':'none',
					'background-color':'transparent'
				});
				*/
			}
		},this);
    	Kelda.Info.FxMatrix.superclass.initComponent.apply(this,arguments);
	},
	 stopPoll : function() {
		Ext.TaskMgr.stop(this.fxMatrixTask);
	},
	startPoll : function() {
		Ext.TaskMgr.start(this.fxMatrixTask);
	},
	afterStoreLoad : function(store) {
		
		marketOpen = store.getAt(0).data.marketOpen;
		this.bubble(function(){
			if(this.header) {
				if(marketOpen==true) {
					//console.log('opening market');
					this.header.removeClass('redlight');
					this.header.addClass('greenlight');
				}else {
					//console.log('closing market');
					this.header.removeClass('greenlight');
					this.header.addClass('redlight');
				}
			}
		});
		if(this.firstLoad) {
			for(i=0,j=store.getCount();i<j;i++) {
				this.recordBelow[i] = 0;
				this.recordAbove[i] = 0;
			}
			this.firstLoad=false;
		}
		for(i=0,ii=store.getCount();i<ii;i++) {
			if(this.zombieRecords.find(function(j){
				return store.getAt(i).data.name == j.data.name;
			})){
				store.removeAt(i);
			}
		}
	}
});
Ext.reg('FxMatrix',Kelda.Info.FxMatrix);

Kelda.Info.CurrencyPortlet = Ext.extend(Ext.Panel,{
	initComponent: function() {
	this.on('render',function(){
		var w = 0;
		
		Ext.apply(this,{
			preferredWinSize : {
				width:400,
				height:305
			}
		});
		
		
	},this);
	
	Kelda.Info.CurrencyPortlet.superclass.initComponent.apply(this,arguments);
	},
	layout:'fit',
	iconCls:'redlight',
	plugins: [Ext.ux.PortletPlugin],
    closeable: true,
    maximizable:false,
    collapsible:true,
    resizeable:false,
    settings: false,
    nohelp: true,
    version:1.0002,
    width:400,
    height:(Ext.isChrome||Ext.isSafari||Ext.isIE?356:346)
});
Ext.reg('CP',Kelda.Info.CurrencyPortlet);

/*
Kelda.Info.CurrencyTab = Ext.extend(Ext.TabPanel,{
	title:'Currency Tabs',
	plugins: [Ext.ux.PortletPlugin],
    closeable: true,
    maximizable:true,
    resizeable:false,
    settings: false,
    width:400,
    height:310,
    activeTab:0
});
Ext.reg('CurrencyPortlet',Kelda.Info.CurrencyTab);
*/