// name    :  projasep.js 
//
// author  :  DEV2 - Environment Canada - CMDS - Dorval, Quebec
//
// purpose :  validate coordinates entered to make sure they are within
//            ASEP domain
// 
//
// appelee : Cette fonction est appellee par la validerCoordonnees (dans ValiderID.js)
//           seulement si le ID contient 10 ou 11 caracteres (soit la taille
//           attenue de une coordonnee lat/long
// usage   :
//


//
function ProjectionASEP ()
   {
   proj = new Object();
   
   proj.hemisphere = 'N';
   proj.north = true;
   proj.NI = 268.0;
   proj.NJ = 205.0;
   proj.pi = 79.90;
   proj.pj = 203.90;
   proj.d60 = 24000;
   proj.dgrw = 20.0;
   
   proj.rad2deg = 180.0/ Math.PI;
   proj.deg2rad = Math.PI / 180.0;
   proj.re = (1.0 + Math.sin( 60.0 * proj.deg2rad )) *  6.371e6 / proj.d60;
   proj.re2 = proj.re * proj.re;
   
   
   proj.toGrid = function (lat,lon) 
      {
      if (proj.north) 
         {
         lx = lon;
         ly = lat;
         } 
      else 
         {
         lx = -lon;
         ly = -lat;
         }
// alert(lat + lon );
   
      rlon = (lx + proj.dgrw) * proj.deg2rad;
// alert( "rlong:" + rlon );
      sinlat = Math.sin(ly * proj.deg2rad);
// alert( "sinlat:" + sinlat );
      r = proj.re * Math.sqrt( (1.0 - sinlat)/(1.0 + sinlat) );
// alert( "r:" + r );
      gp = new Object();
      gp.x = (r*Math.cos(rlon) + proj.pi);
      gp.y = (r*Math.sin(rlon) + proj.pj);
      return gp;
      }

   
   proj.insideDomain = function (coord) 
      {
      gp = proj.toGrid( coord.lat, coord.lon );
//alert( gp.x + " " + gp.y )
      if (gp.x < 1.0) return false;
      if (gp.y < 1.0) return false;
      if (gp.x > proj.NI) return false;
      if (gp.y > proj.NJ) return false;
      return true;
      }

   proj.parseLatLon = function( ll ) 
      {
      var a = ll.charAt(1) + ll.charAt(2);
      var b = ll.charAt(3) + ll.charAt(4);
      var coord = new Object();
      ns = ll.charAt(0);
      if (ns == 'S') 
         f = -1.0
      else
         f = 1.0;
      coord.lat = (b/60.0 - a*-1.0) * f;
      if (ll.length == 11)
         {
         a = ll.charAt(6) + ll.charAt(7) + ll.charAt(8);
         b = ll.charAt(9) + ll.charAt(10);
         }
      else
         {
         a = ll.charAt(6) + ll.charAt(7);
         b = ll.charAt(8) + ll.charAt(9);
         }

      ew = ll.charAt(5);
      if (ew == 'W') 
         f = -1.0
      else
         f = 1.0;
      coord.lon = (b/60.0 - a*-1.0) * f;
      return coord;
      }

   proj.validerLatLon = function( ll, langue )
      {
      coord = proj.parseLatLon( ll );
      ret = proj.insideDomain( coord );
      return ret;
      }

   return proj;
   }

// use this object instead of creating your own copy everytime
//
projASEP = new ProjectionASEP();

