// builds upon infowin.js to make an array of info points


function gpsDataArrayBuilder(data,mapElement,mapObject){
    var self=this;
    this.getImage=function(dotdata){
	var key=self.imageType;
	var index=dotdata[key];
	// var imgArray=eval("self.Images."+key);
	var imgArray=self.Images[key];
	if (index>=imgArray.length){
	    index=imgArray.length - 1;
	}
	var imgName=imgArray[index];
 	// stupid ie lowest common denominator...
//   	if (imgName.substring(imgName.length-3, imgName.length) == "png"){
//   	    imgName =imgName.substring(0,imgName.length-3) + "gif";
//   	}
	//return self.imagePath+imgName;
	return imgName;
    };
    
    var keepidx=-1;
    var keep = new Array();
    var raw = data.rawdata;
    for(var i=0;i<raw.length;i++){
	var newUTM=new mapCoord(raw[i].lon,raw[i].lat);
	var radial=new coord(2,2);
	if(keepidx>=0){
	    radial=(keep[keepidx].UTM.utmCoord.difference(newUTM.utmCoord)).radial();
	    // hack to limit memory consumption.  
	    if(keepidx>2000){
		radial.y=0;
	    }
	}
	if(radial.y>1){
	    // keeping data
	    if(_debug){_debug.log("keeping point "+ i);}
	    var newdate=new Date(raw[i].utc);
	    var dwell;
	    if(keepidx>-1){
		dwell=new Date( newdate.getTime() - keep[keepidx].date.getTime() );
		raw[i].dwell=dwell;
	    }else{
		dwell=new Date(0);
	    }

	    //ifw=new tracerGPSWindow(raw[i],mapElement,mapObject);
	    // no that means every point has to have a complete data window created
	    var dotData=gpsDataParse(raw[i]);

	    var dotElement= new infoMarker(dotData.point,
					   mapElement,
					   mapObject,
					   self.getImage(dotData));
	    if(_debug){_debug.log("done creating dotElement in gpsDataArrayBuilder");}

	    //dotElement.changeImage(self.getImage(dotData));

	    var handler=new openshut(raw[i],mapElement,mapObject);

	    Event.observe(dotElement.getElement(), 
			  "click", 
			  handler.open,
			  false);

	    if(_debug){_debug.log("done setting Event Observe click handler in gpsDataArrayBuilder");}

	    // have to bind close to a close click somewhere

	    keep.push(raw[i]);
	    keepidx=keep.length-1;
	    keep[keepidx].UTM=newUTM;
	    keep[keepidx].date=newdate;
	    keep[keepidx].mapE=dotElement;
	    keep[keepidx].infoE=handler;

	    if(_debug){_debug.log("looping in gpsDataArrayBuilder");}

	}
    }
    raw=null;
    data=null;
    var wanted=true;
    this.open=function(){
	if(keep.length==0){return null;}
	wanted=true;
	var me=keep[0].mapE;
	me=me.getMapElement();
	var tl=me.getMapTL();
	if(_debug){_debug.log("infoarray refresh, map tl is "+tl);}
	var br=(keep[0].mapE.getMapElement()).getMapBR(tl);
	
	for(var i=0;i<keep.length;i++){
	    keep[i].mapE.show(tl,br);
	    keep[i].infoE.refresh(tl,br);
	}
    };
    this.refresh=function(){
	if(keep.length==0||!wanted){return null;}
	var me=keep[0].mapE;
	me=me.getMapElement();
	var tl=me.getMapTL();
	if(_debug){_debug.log("infoarray refresh, map tl is "+tl);}
	var br=(keep[0].mapE.getMapElement()).getMapBR(tl);
	
	for(var i=0;i<keep.length;i++){
	    keep[i].mapE.refresh(tl,br);
	    keep[i].infoE.refresh(tl,br);
	}
    };
    this.checkDisplayable=function(){
	if(keep.length==0 || !wanted){return null;}
	
	var me=keep[0].mapE;
	me=me.getMapElement();
	var tl=me.getMapTL();
	if(_debug){_debug.log("infoarray refresh, map tl is "+tl);}
	var br=(keep[0].mapE.getMapElement()).getMapBR(tl);
	
	for(var i=0;i<keep.length;i++){
	    keep[i].mapE.checkDisplayable(tl,br);
	    keep[i].infoE.refresh(tl,br);
	}
    };
    this.remove=function(){
	if(keep.length==0){return null;}
	for(var i=0;i<keep.length;i++){
	    keep[i].mapE.close();
	    keep[i].infoE.shut();
	}
	wanted=false;
    };

};


gpsDataArrayBuilder.prototype.imageTypes={'spd':'speed',
					  'fix':'GPS fix'};
gpsDataArrayBuilder.prototype.imageType='fix';
gpsDataArrayBuilder.prototype.Images={'fix':[null,"e30000.png","e3e200.png","00e300.png"],
				      'spd':["e30000.png","e30600.png","e30d00.png","e31400.png","e31b00.png","e32200.png","e32900.png","e33000.png","e33700.png","e33d00.png","e34400.png","e34b00.png","e35200.png","e35900.png","e36000.png","e36700.png","e36e00.png","e37400.png","e37b00.png","e38200.png","e38900.png","e39000.png","e39700.png","e39e00.png","e3a500.png","e3ab00.png","e3b200.png","e3b900.png","e3c000.png","e3c700.png","e3ce00.png","e3d500.png","e3dc00.png","e3e200.png","dce300.png","d5e300.png","cee300.png","c7e300.png","c0e300.png","b9e300.png","b2e300.png","abe300.png","a5e300.png","9ee300.png","97e300.png","90e300.png","89e300.png","82e300.png","7be300.png","74e300.png","6ee300.png","67e300.png","60e300.png","59e300.png","52e300.png","4be300.png","44e300.png","3de300.png","37e300.png","30e300.png","29e300.png","22e300.png","1be300.png","14e300.png","0de300.png","06e300.png","00e300.png"]
};

gpsDataArrayBuilder.prototype.imagePath="/tracer/images/speedballs/";