/* hafas_standard_map_zoombywin.js */
/* built: 26.05.2004 */
/* last modified: 29.12.2004 by MB & MTH */
/* last modified: 11.01.2005 by MB */
/* original PTV functions */

   var mapleft, maptop, mapright, mapbottom;
   var scrollX, scrollY, click1X, click1Y, click2X, click2Y, geo1X, geo1Y, geo2X, geo2Y;
   var click1valid;
   var URLString;
   var currentCenterUrl;
   var currentStartUrl;
   var currentDestinationUrl;
   var CtrlNumb = 0;
   var optVal = 9;
   var difOffsetY = 0;
   var difOffsetX = 0;
   var switchX = "zoom";
   var switchY = "zoom";
   var URLExtraParameterZoomByWin = "";
   var gZoomByWinRunning = false;
   var clickBox;
   var zbwBox;

   function uninitHafasMap(){
     document.onmousedown = null;
     document.onmousemove = null;
     document.onmouseup = null;
     }

   function initHafasMap(){

      clickBox = document.getElementById("popUpClickAction");
      zbwBox = document.getElementById("popUpRect");

      document.onmousedown = startZbw;
      document.onmousemove = dragZbw;
      document.onmouseup = stopZbw;
      gZoomByWinRunning = false;
      }

   function cancelClick(who){

      // current position of popup (top left corner)
      var currentPosX = parseInt(clickBox.style.left);
      var currentPosY = parseInt(clickBox.style.top);

      // width & height
      var currentWidth = parseInt(clickBox.style.width);
      var currentHeight = parseInt(clickBox.style.height);

      // click on button cancel -> hide popup and marked Location
      if (who == "button") {
         clickBox.style.visibility = "hidden";
         zbwBox.style.visibility = "hidden";
         // set switch back to zoom
         switchX = "zoom";
         switchY = "zoom";
      }
      else if (who == "page") {
         // click anywhere but the popup -> same as cancel
         if (click1X < currentPosX || click1X > currentPosX+currentWidth || click1Y < currentPosY || click1Y > currentPosY+currentHeight) {
           // hide popup and marked location
           clickBox.style.visibility = "hidden";
           zbwBox.style.visibility = "hidden";
           // set switch back to zoom
           switchX = "zoom";
           switchY = "zoom";
         }
         // click within the popup, but no action element (radio,label,x)
         else {
            // do nothing
         }
      }
      gZoomByWinRunning = false;

   // end function cancel
   }


   function startZbw(evt){
     gZoomByWinRunning = true;

      GetImgPos("map")
      click1X = 0
      click1Y = 0
      click1valid = false

      if (ie5){
         click1X = window.event.clientX + scrollX
         click1Y = window.event.clientY + scrollY
         }
      else if (ns6){
         click1X = evt.pageX
         click1Y = evt.pageY
         }

      if (click1X >= mapleft && click1X <= mapright && click1Y >= maptop && click1Y <= mapbottom){
         zbwBox.style.top = click1Y+"px";
         zbwBox.style.left = click1X+"px";
         zbwBox.style.width = "0px";
         zbwBox.style.height = "0px";
         zbwBox.style.visibility = "visible";

         if ((ns6 || ie5) && !opx){
            zbwBox.style.background = "#999999";
            }

         if(clickBox && clickBox.style.visibility == "visible"){
            zbwBox.style.visibility = "hidden";
            }

         click1valid = true;
         CtrlNumb = 1;
         return false
         }
      else {
         return true;
         }
      }

   function dragZbw(evt){
      if(!clickBox || clickBox.style.visibility == "hidden"){
        /* first click was inside the map */
        if (click1valid == true && CtrlNumb == 1){
           if (ie5){
              offsetX = window.event.clientX + scrollX;
              offsetY = window.event.clientY + scrollY;
              }
           else if (ns6){
              offsetX = evt.pageX
              offsetY = evt.pageY
              }

           /* horizontal */
           /* mouse is over the map */
           if (offsetX >= mapleft && offsetX <= mapright){
              /* mouse moves right */
              if (offsetX >= click1X){
                 zbwBox.style.left = click1X+"px";
                 zbwBox.style.width = offsetX - click1X+"px";
                 }
              /* mouse moves left */
              else if (offsetX < click1X){
                 if (offsetX < 0){offsetX = 0;}
                 zbwBox.style.left = offsetX+"px";
                 zbwBox.style.width = click1X - offsetX+"px";
                 }
              }
           /* mouse is not over the map */
           else {
              /* mouse moves right */
              if (offsetX >= click1X){
                 zbwBox.style.left = click1X+"px";
                 zbwBox.style.width = mapright - click1X - 0+"px";
                 }
              /* mouse moves left */
              else if (offsetX < click1X){
                 zbwBox.style.left = mapleft+"px";
                 zbwBox.style.width = click1X - mapleft+"px";
                 }
              }
           /* vertical */
           /* mouse is over the map */
           if (offsetY >= maptop && offsetY <= mapbottom){
              /* mouse moves down */
              if (offsetY >= click1Y){
                 zbwBox.style.top = click1Y+"px";
                 zbwBox.style.height = offsetY - click1Y+"px";
                 }
              /* mouse moves up */
              else if (offsetY < click1Y){
                 zbwBox.style.top = offsetY+"px";
                 zbwBox.style.height = click1Y - offsetY+"px";
                 }
              }
           /* mouse is not over the map */
           else {
              /* mouse moves down */
              if (offsetY >= click1Y){
                 zbwBox.style.top = click1Y+"px";
                 zbwBox.style.height = mapbottom - click1Y+"px";
                 }
              /* mouse moves up */
              else if (offsetY < click1Y){
                 zbwBox.style.top = maptop+"px";
                 zbwBox.style.height = click1Y - maptop+"px";
                 }
              }
           return false
        }
        /* first click was outside the map */
        else {return true}
      }
    return false;
   }

   function stopZbw(evt){

     if (clickBox && clickBox.style.visibility == "visible"){
       cancelClick("page");
       }
     else{
       if (click1valid == true){
         CtrlNumb = 2;

         if (ie4 || ie5){
            click2X = window.event.clientX + scrollX;
            click2Y = window.event.clientY + scrollY;
            }
         else if (ns6){
            click2X = evt.pageX;
            click2Y = evt.pageY;
            }

         if (click2X >= mapleft && click2X <= mapright && click2Y >= maptop && click2Y <= mapbottom)
            {/* document.all.popUpRect.style.visibility = "hidden"; */}
         else {
            if (click2X < mapleft){click2X = mapleft}
            else if (click2X > mapright){click2X = mapright;}
            if (click2Y < maptop){click2Y = maptop}
            else if (click2Y > mapbottom){click2Y = mapbottom;}
            /* document.all.popUpRect.style.visibility = "hidden"; */
            }

         geo1X = click1X - mapleft;
         geo2X = click2X - mapleft;
         geo1Y = click1Y - maptop;
         geo2Y = click2Y - maptop;

         /* Set the minimum area for zbw or centering */
         if (geo1X > geo2X){
            if (geo1X - geo2X < 10){
               geo1X += 5; geo2X -= 5;
               switchX = "center";
               }
             else switchX = "zoom";
             }
         else {
            if (geo2X - geo1X < 10){
               geo2X += 5; geo1X -= 5;
               switchX = "center";
               }
             else switchX = "zoom";
             }

         if (geo1Y > geo2Y){
            if (geo1Y - geo2Y < 10){
               geo1Y += 5; geo2Y -= 5;
               switchY = "center";
               }
             else switchY = "zoom";
             }
         else {
            if (geo2Y - geo1Y < 10){
               geo2Y += 5; geo1Y -= 5;
               switchY = "center";
                }
             else switchY = "zoom";
             }

          /* Preformat coords for the GIS system (LL to UR) */
          var xll = Math.min(geo1X,geo2X);
          var yll = Math.max(geo1Y,geo2Y);
          var xur = Math.max(geo1X,geo2X);
          var yur = Math.min(geo1Y,geo2Y);


         if(switchX == "center" && switchY == "center"){

             if(bUseInputsForMapActions)
                 {
                 var mapFormAction = document.map_results_form.action;

                 var indexAnchor = mapFormAction.indexOf( "#" );

                 var mapFormActionFront = "";
                 var mapFormActionBack  = "";

                 if ( indexAnchor == -1 )
                     {
                      mapFormActionFront = mapFormActionFront;
                     }
                 else
                     {
                     mapFormActionFront = mapFormAction.substring( 0, indexAnchor );
                     mapFormActionBack =  mapFormAction.substring( indexAnchor );
                     }

                 mapFormAction = mapFormActionFront;

                 mapFormAction += "&performGis=1";
                 mapFormAction += "&REQMapClickPixelPosX="+geo1X;
                 mapFormAction += "&REQMapClickPixelPosY="+geo1Y;
                 mapFormAction += "&clickActionCheck=center";
                 mapFormAction += "&" + globalMap;

                 mapFormAction += mapFormActionBack;

                 document.map_results_form.setAttribute( "action", mapFormAction );

                 document.map_results_form.submit();
                 }
             else
                 {
                 if(document.getElementById("popUpClickActionCenter"))
                     {
                     currentCenterUrl = mapBaseURL + "performGis=1";

                     // jt 14.04.2008: enable look, when centering map;
                     currentCenterUrl += "&enablelook=yes";
                     currentCenterUrl += "&look_option=choosepoint";

                     currentCenterUrl += "&REQMapTask=MOVE_TO_CENTER";
                     currentCenterUrl += "&REQMapCenterCoordType=PIX";
                     currentCenterUrl += "&REQMapCenterX="+geo1X;
                     currentCenterUrl += "&REQMapCenterY="+geo1Y;
                     currentCenterUrl += "&clickActionCheck=center";
                     currentCenterUrl += "&" + globalMap;
                     }
                 else
                     {
                     URLString = mapBaseURL + "performGis=1";
                     URLString += "&REQMapTask=MOVE_TO_CENTER";
                     URLString += "&REQMapCenterCoordType=PIX";
                     URLString += "&REQMapCenterX="+geo1X;
                     URLString += "&REQMapCenterY="+geo1Y;
                     URLString += "&clickActionCheck=center";
                     URLString += "&" + globalMap;
                     URLRedirect();
                     }

                 if(document.getElementById("popUpClickActionStart"))
                     {
                     currentStartUrl = mapBaseURL + "performGis=1";
                     currentStartUrl += "&REQMapTask=MAPINPUT";
                     currentStartUrl += "&REQMapClickPixelPosX="+geo1X;
                     currentStartUrl += "&REQMapClickPixelPosY="+geo1Y;
                     currentStartUrl += "&REQMapClickAction=TAKE_AS_START0";
                     currentStartUrl += "&RemoveGlobalOptionGO_callMapFromPosition";
                     currentStartUrl += "&" + globalMap;
                     }

                 else if(document.getElementById("popUpClickActionDestination"))
                     {
                     currentDestinationUrl = mapBaseURL + "performGis=1";
                     currentDestinationUrl += "&REQMapTask=MAPINPUT";
                     currentDestinationUrl += "&REQMapClickPixelPosX="+geo1X;
                     currentDestinationUrl += "&REQMapClickPixelPosY="+geo1Y;
                     currentDestinationUrl += "&REQMapClickAction=TAKE_AS_DEST0";
                     currentDestinationUrl += "&RemoveGlobalOptionGO_callMapFromPosition";
                     currentDestinationUrl += "&" + globalMap;
                     }
                 if(clickBox)
                     {
                     clickBox.style.visibility = "visible";
                     clickBox.style.left = click1X+"px";
                     clickBox.style.top = click1Y+"px";
                     }
                 }
         }

         /* Check if zbw is enabled */
         else if(switchX == "zoom" || switchY == "zoom"){
            URLString = mapBaseURL + "performGis=1";
            URLString += "&REQMapTask=ZOOM";
            URLString += "&REQMapCornerCoordType=PIX";
            URLString += "&REQMapCornerLowerLeftX="+xll;
            URLString += "&REQMapCornerLowerLeftY="+yll;
            URLString += "&REQMapCornerUpperRightX="+xur;
            URLString += "&REQMapCornerUpperRightY="+yur;
            URLString += "&" + globalMap;
            URLRedirect();
            }
         /* Default do nothing ;-)*/
         else {
            CtrlNumb = 0;
            }
       }
     }
     gZoomByWinRunning = false;

   }

   function URLRedirect(){
      if (CtrlNumb == 2){
         /* there are two clicks and a new map can be shown */
         CtrlNumb = 0;
         //var newMapURL = mapBaseURL + "performGis=1" + URLString + "&" + globalMap;
         var newMapURL = URLString + URLExtraParameterZoomByWin;
         if( typeof gLiveMapLinkRegistration != 'undefined' )
           newMapURL += gLiveMapLinkRegistration.options;
         window.location.href=newMapURL;
         }
      gZoomByWinRunning = false;
      }

   function GetImgPos(img){
      mapleft = 0;
      maptop = 0;
      var imgRefX = document.images[img];
      var imgRefY = document.images[img];
      if (ie5) {
         scrollY = getBody().scrollTop;
         scrollX = getBody().scrollLeft;
         }
      while (imgRefX.offsetParent != null){
        mapleft += imgRefX.offsetLeft;
        imgRefX  = imgRefX.offsetParent;
        }
      while (imgRefY.offsetParent != null){
        maptop += imgRefY.offsetTop;
        imgRefY = imgRefY.offsetParent;
        }

      mapleft  += imgRefX.offsetLeft;
      maptop   += imgRefY.offsetTop;
      mapright  = mapwidth + mapleft;
      mapbottom = mapheight + maptop;

      }

   /*****************************************/
   /* Der IE hat 2 verschiedene Objekte     */
   /* für den strict und quirks Mode.       */
   /*****************************************/
   function getBody(){
      return (document.compatMode && document.compatMode == "CSS1Compat") ?
         document.documentElement : document.body || null;
      }

