iii.shareprice.apps.stock = new Class( {
	Implements: Events,
	initialize: function ( superclass ) {
		this.superclass = superclass;
	},
	inject: function ( data ) {
		data = data || {};
		switch( data.currency ) {
			case 'GBp' :
				data.currency = "£";
			break;
			case 'EUR' :
				data.currency = "€";
			break;
			case 'USD' :
				data.currency = "$";
			break;
		};
		if( data.performance < 0 )
			data.cls = 'calc-flop';
		else if( data.performance > 0 )
			data.cls = 'calc-top';
		else
			data.cls = 'calc-none';
		var values = [ 'performancepct', 'mid', 'low', 'high', 'bid', 'price', 'ask', 'open', 'close', 'performance', 'last', 'last_volume', 'last_money' ];
		values.each( function ( value ) {
			data[ value ] = $check( data[ value ] ) ? Number( data[ value ] ).toFixed( 2 ) : '0.00';
		} );
		return this.superclass.stocks.include( data );
	},
	data: function ( stock, fn ) {
		var self = this;
		symbol = stock;
		if( !symbol) {
			return;
		}
		var desc = "";
		stock = this.superclass.stocks.get( stock );
		if( stock ) {
			if( ( stock.get( 'engine-update' ) && $time() - stock.updateTime <= stock.get( 'engine-update' ) && stock.get( 'ask' ) ) || ( stock.get( 'engine-insert' ) && stock.get( 'ask' ) && $time() - stock.updateTime <= stock.get( 'engine-insert' )  )  ) {
				return fn( stock );
			} else 	if( $check( stock.get( 'descriptor' ).company ) )
				desc = "desc=1";
		} else {
			desc = "desc=1";
		}
		
		fn = $lambda( fn );
		this.superclass.request.send( {
			url: iii.shareprice.apps.config.get( 'serviceUrl' ) + 'service/json/securities/price/code/' + symbol + "?" + desc,
			success: function ( data ) {
				fn( self.inject( data ) );					
			}
		} );
	},
	datas: function ( arr, fn ) {
		if( $type( arr ) == 'string'  ) {
			return this.data( arr, fn );
		} else if( arr.length <= 1 ) {
			return this.data( arr[ 0 ], fn );
		}
		var ids  = [];
		var desc = "";
		var self = this;
		arr.each( function ( id ) {
			stock = self.superclass.stocks.get( id );
			if( stock ) {
				if( ( stock.get( 'engine-update' ) && $time() - stock.updateTime <= stock.get( 'engine-update' ) && stock.get( 'ask' ) ) || ( stock.get( 'engine-insert' ) && stock.get( 'ask' ) && $time() - stock.updateTime <= stock.get( 'engine-insert' )  )  ) {
					return fn( stock );
				} else {
					if( $check( stock.get( 'descriptor' ).company ) )
						desc = "desc=1";
					ids.include( id );
				}
			} else {
				desc = "desc=1";
				ids.include( id );
			}
		} );
		fn = fn || $lambda();
		var self = this;
		var idsstr = ids.join( ',' );
		this.superclass.request.send( {
			url: iii.shareprice.apps.config.get( 'serviceUrl' ) + 'service/json/securities/price/code/' + idsstr + "?" + desc,
			success: function ( data ) {
				ids.each( function ( id ) {
					fn( self.inject( data[ id ] ), id );
				} );
			}
		} );
	}
} );
