/*
   Viewer configuration
   (c) 2005-2006 Keith Wannamaker
   Do no use without permission
   keith@wannamaker.org
*/

function ViewConfig(latitude, longitude, scalex, scaley, xorigin, yorigin, officialname, sectionalname) {

  this.params = {
    'mp'            : new MercatorProjection(scalex, scaley, xorigin, yorigin),
    'latitude'      : parseFloat(latitude),
    'longitude'     : parseFloat(longitude),
    'estimatedlatitude' : parseFloat(latitude),
    'estimatedlongitude' : parseFloat(longitude),
    'officialname'  : officialname,
    'sectionalname' : sectionalname,
    
    'lastContextLatitude' : 0,
    'lastContextLongitude' : 0,
    'lastContextLeft' : 0,
    'lastContextTop' : 0
  };
  
  this.params.mp.recompute();

  this.setOfficialName = function(officialname) {
    this.params.officialname = officialname;
    document.getElementById("airportname").innerHTML = officialname;
    window.status = officialname;
  }
  
  this.setSectionalName = function(sectionalname) {
    this.params.sectionalname = sectionalname;
    document.getElementById("sectionalname").innerHTML = sectionalname;
  }

  this.setOfficialName(officialname);
  this.setSectionalName(sectionalname);
  
  this.setLatitudeLongitude = function(latitude, longitude) {
    this.params.latitude = latitude;
    this.params.longitude = longitude;
    this.params.estimatedlatitude = latitude;
    this.params.estimatedlongitude = longitude;
  }
  
  this.updateEstimatedLocation = function(xoffset, yoffset) {
    var xy  = this.params.mp.GeoToXY(this.params.estimatedlatitude, this.params.estimatedlongitude);
    var geo = this.params.mp.XYToGeo(xy[0] + xoffset, xy[1] + yoffset);
    this.params.estimatedlatitude = parseFloat(geo[0]);
    this.params.estimatedlongitude = parseFloat(geo[1]);
  }
  
  this.getGeo = function(x, y, width, height, zoom) {
    //figure it out relative to center
    var xoffset = (x - width/2) * zoom;
    var yoffset = (y - height/2) * zoom;
    var xy = this.params.mp.GeoToXY(this.params.estimatedlatitude, this.params.estimatedlongitude);
    return this.params.mp.XYToGeo(xy[0] + xoffset, xy[1] + yoffset);
  }
  
  this.resetToEstimate = function() {
    this.params.latitude = this.params.estimatedlatitude;
    this.params.longitude = this.params.estimatedlongitude;
  }
    
  this.setFromXML = function(doc) {
    if (doc.getElementsByTagName("latitude").length > 0) {
      this.setLatitudeLongitude(parseFloat(doc.getElementsByTagName("latitude").item(0).firstChild.data),
                                parseFloat(doc.getElementsByTagName("longitude").item(0).firstChild.data));
      this.setOfficialName(doc.getElementsByTagName("officialname").item(0).firstChild.data);
      //found something - ok to remove menu
      hideContextMenu();
    }
    if (doc.getElementsByTagName("scalex").length > 0) {
      this.params.mp.updateProjection(
                       parseFloat(doc.getElementsByTagName("scalex").item(0).firstChild.data),
                       parseFloat(doc.getElementsByTagName("scaley").item(0).firstChild.data),
                       parseFloat(doc.getElementsByTagName("xorigin").item(0).firstChild.data),
                       parseFloat(doc.getElementsByTagName("yorigin").item(0).firstChild.data));
      this.setSectionalName(doc.getElementsByTagName("sectionalname").item(0).firstChild.data);
    }
    update();
  }
}
  






