/* 
 * 
 * Comienza la parte para diseÃ±adores
 *
 *--------------------------------------------------------------------------*/

// TO DO. Â¿Hay forma de centralizar registro de GOOGLE_MAPS_API_KEY de todos los dominios?
    var GOOGLE_MAPS_API_KEY = 'ABQIAAAARuAUvt_sLlTiYWdPWkK-fhQh8NbjFETygUw2FMyPtKYkXWYtyRQ4i8mF4TVa9kA3P1w2R9qf6U7xbw';
    var MAP_MENU_ID = "google"; // NOTA: Hay que utilizar este id en XHTML
    var MAP_DIV_ID = 'map'; // NOTA: Hay que utilizar este id en XHTML
    var STREETVIEW_MENU_ID = "streetview"; // NOTA: hay que utilizar este id en XHTML
    var STREETVIEW_DIV_ID = 'view'; // NOTA: PodrÃ­a ser el mismo que MAP_MENU_ID. Hay que utilizar este id en XHTML
    var MAP_CENTER_LAT = 39.4800878845841;
    var MAP_CENTER_LNG = -0.377451181411743;
    var MAP_ZOOM = 17;
    var MAP_CONTROL_LEFT_TOP = "3d";// ("small", "large", "3d" or "")
    var MAP_CONTROL_RIGHT_TOP = 1;// (1, 2, 3 or 4) ----> 1:Map/Satellite/Earth, 2:Map/Satellite, 3:Map/Satellite/Terrain, 4:Map/Satellite/Hybrid
    var MAP_CONTROL_RIGHT_TOP_POSITION = "inside"; // ("inside", "outside")
    var MAP_CONTROL_RIGHT_BOTTOM = "hidden";// (true; "hidden" or false;) NOTA: sÃ³lo "hidden" estÃ¡ entre comillas.
    var MAP_CONTROL_LEFT_BOTTOM = 2;// (0, 1, 2, or 3) ----> 0: nada, 1:Scale/GoogleBar, 2:Scale, 3:GoogleBar
    var DEFAULT_MAP_TYPE = "map"; // ("map", "satellite", "hybrid", "terrain" or "earth")
    var ICON_LAT = 39.4800878845841;
    var ICON_LNG = -0.377451181411743;
    var STREETVIEW_LAT = 39.480188;
    var STREETVIEW_LNG = -0.377304;
    var STREETVIEW_YAW = 223.13248877982437;
    var STREETVIEW_PITCH = -4.718665692373651;
    var STREETVIEW_ZOOM = 0;
    var ADD_PEGMAN = true; // (true, false)

    var SHOWLABEL_LIST = {
        en: 'Show labels',
        es: 'Superponer callejero',
        ja: '地名を表示',
        de: 'Labels anzeigen',
        fr: 'Afficher les noms',
        ca: 'Sobreposa carrers'
    }

    // estos podrÃ­aq estar definido en JavaScript de menÃº asÃ­ que no hace falta.
    if (!lang) {
      var lang = ""
    }

    if (!suffix) {
      var suffix = ""
    }

    if (!suffixList) {
      var suffixList = {
        en: '',
        es: 'index.es.html',
        ja: 'index.ja.html',
        de: 'index.de.html',
        fr: 'index.fr.html',
        ca: 'index.ca.html'
      }
      getLanguage2();
    }
    // end

/* 
 * 
 * Termina la parte para diseÃ±adores
 *
 *--------------------------------------------------------------------------*/
    loadGoogleMapsJS ();
    var gmap, sView, mapTypeControlPosition, lastPegmanLocation;

    Event.observe(window, 'load', function() {
     gmap = new GMap2($(MAP_DIV_ID))
    });

    Event.observe(window, 'unload', function() {
      GUnload();
    });

    if (MAP_MENU_ID == STREETVIEW_MENU_ID) {
      Event.observe($(MAP_MENU_ID), 'click', function(event) {
        loadGmaps(MAP_CENTER_LAT, MAP_CENTER_LNG, MAP_ZOOM);
        loadGStreetview();
      });
    } else {
      Event.observe($(MAP_MENU_ID), 'click', function(event) {
//        loadGmaps(MAP_CENTER_LAT, MAP_CENTER_LNG, MAP_ZOOM);
        setTimeout("loadGmaps(MAP_CENTER_LAT, MAP_CENTER_LNG, MAP_ZOOM)",100);
      });
      if ($(STREETVIEW_MENU_ID)) {
         Event.observe($(STREETVIEW_MENU_ID), 'click', function(event) {
            loadGStreetview();
         });
      }
    }

    function getLanguage2() {
      var pageSuffix = location.href.gsub(/.*\//, '');
      for( var i in suffixList ) {
        if (pageSuffix ==  suffixList[i]) {
          lang = i;
          suffix = suffixList[i];
        }
      }
    }

    function loadGoogleMapsJS () {
      var googleMpasSrc = 'http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=' + GOOGLE_MAPS_API_KEY + '&amp;hl=' + lang
      document.write('<script src="' + googleMpasSrc + '" type="text/javascript"><' + '/script>');
    }

    function loadGmaps (mLat, mLng, mZoom) {
      gmap = new GMap2($(MAP_DIV_ID))
      if( !(gmap.isLoaded()) ){
        var latlng = new GLatLng(mLat, mLng);
        gmap.setCenter(latlng, mZoom);
        addControls();
        setMapmode();
        addIcon();
      }
    }

    function addControls () {
      if (MAP_CONTROL_RIGHT_TOP_POSITION == "inside") {
        mapTypeControlPosition = 7
      } else {
        mapTypeControlPosition = -19
      }
    
      if (MAP_CONTROL_LEFT_TOP == "small") {
        gmap.addControl(new GSmallMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(6, 7)));
      } else if (MAP_CONTROL_LEFT_TOP == "large") {
        gmap.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(6, 7)));
      } else if (MAP_CONTROL_LEFT_TOP == "3d") {
        changeSlider();
      }

      if (MAP_CONTROL_RIGHT_TOP == 1) {
          add3dmap();
          addHierarchicalMapTypeControl();
      } else if (MAP_CONTROL_RIGHT_TOP == 2) {
          addHierarchicalMapTypeControl();
      } else if (MAP_CONTROL_RIGHT_TOP == 3) {
          addHierarchicalMapTypeControl();
          addTerrainmap();
      } else if (MAP_CONTROL_RIGHT_TOP == 4) {
          gmap.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(6, mapTypeControlPosition)));
      }

      if (MAP_CONTROL_RIGHT_BOTTOM == true) {
        gmap.addControl(new GOverviewMapControl());
      } else if (MAP_CONTROL_RIGHT_BOTTOM == "hidden") {
        addHiddenOverviewMapControl();
      }

      if (MAP_CONTROL_LEFT_BOTTOM == 1) {
          gmap.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(5, 44)));
          gmap.enableGoogleBar();
      } else if (MAP_CONTROL_LEFT_BOTTOM == 2) {
          gmap.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(5, 44)));
      } else if (MAP_CONTROL_LEFT_BOTTOM == 3) {
          gmap.enableGoogleBar();
      }

      new GKeyboardHandler(gmap);
      gmap.enableContinuousZoom();
      gmap.enableScrollWheelZoom();
    }

    function addHiddenOverviewMapControl() {
      var OMap = new GOverviewMapControl(); 
      gmap.addControl(OMap);
      OMap.hide(true);
    }

    function addHierarchicalMapTypeControl() {
      var mapControl = new GHierarchicalMapTypeControl();
      var showLabel = SHOWLABEL_LIST[lang];
      mapControl.clearRelationships();
      mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, showLabel, true);
      gmap.addControl(mapControl, new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(6, mapTypeControlPosition)));
    }

    function add3dmap() {
      gmap.addMapType(G_SATELLITE_3D_MAP);
    }
    function addTerrainmap() {
      gmap.addMapType(G_PHYSICAL_MAP);
    }

    function changeSlider() {
      // http://gmaps-utility-library.googlecode.com/svn/trunk/extlargemapcontrol/1.0/
      eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('H 7(){4.Z=9;4.19="1J://2o.2f.20/1V/1O/1L/2x.2t"}7.8=13 3a();7.8.N=1l;7.8.1y=1l;7.8.1j=1l;7.8.1Z=1l;7.8.2O=H(a){7.8.N=a;6 k={};4.1Z=13 2w(a);6 y=2s.2p.3j();4.17=((y.1n("3d")!==-1)&&(y.1n("2e")===-1));4.2b=(y.1n(\'36\')!==-1);4.34=(y.1n("2e")!==-1);6 o=13 31();o.1g=4.19;6 b=a.2U();6 r=16(b.2N(),10);6 m=0;6 t=a.2B();2A(6 i=0;i<t.2v;i++){W(t[i].1G()>m){m=t[i].1G()}}7.8.1h=16(m,10);7.8.1e=4.Z;6 g=(1C+5)+(m-r+1)*4.Z+5;6 q=M.S("R");q.3.I="12";q.3.K=(g+4.Z+2)+"1b";q.3.Q="P";q.3.2c="0";q.3.2a="1z";q.3.35="F";k.26=q;7.8.1y=q;6 j=M.S("R");j.3.I="12";j.3.K="33";j.3.Q="P";W(4.17){j.3.1t="1s:1w.1v.1u(1g=\'"+4.19+"\')"}q.J(j);W(!4.17){6 e=o.11(1i);e.3.L="U";e.3.F="T";e.3.G="T";e.3.I="12";e.3.K="1B";j.J(e)}6 D=M.S("R");D.3.L="U";D.3.F="Y";D.3.G="T";D.3.I="1f";D.3.K="1f";D.3.1d="1o";D.3.Q="P";D.15="2C";q.J(D);6 h=D.11(18);h.3.F="T";h.3.G="Y";h.15="F";q.J(h);6 c=D.11(18);c.3.F="1K";c.3.G="Y";c.15="2z";q.J(c);6 B=D.11(18);B.3.F="Y";B.3.G="1K";B.15="2y";q.J(B);6 v=D.11(18);v.3.F="Y";v.3.G="Y";v.15="2u L";q.J(v);k.1I=D;k.1H=h;k.1F=c;k.1T=B;k.1E=v;6 w=M.S("R");w.3.L="U";w.3.F="2r";w.3.G="2q";w.3.I="1q";w.3.K=((m-r+1)*4.Z)+"1b";w.3.Q="P";w.3.1d="1o";q.J(w);k.1p=w;6 n=a.1x();6 p=M.S("R");p.3.L="U";p.3.F=0;p.3.G=((m-n)*4.Z+1)+"1b";p.3.I="1q";p.3.K="22";p.3.Q="P";p.3.1d="3i(1J://2o.2f.20/1V/1O/1L/3h.3g), 3e";w.J(p);k.2m=p;W(4.17){6 f=M.S("R");f.3.L="2l";f.3.F=0;f.3.G="-2k";f.3.I="1q";f.3.K="22";f.3.Q="P";f.3.1t="1s:1w.1v.1u(1g = \'"+4.19+"\')";p.J(f);k.2j=f}1A{6 d=o.11(1i);d.3.L="U";d.3.F="T";d.3.G="-2k";d.3.2a="1z";d.3.1c="T 1z";d.3.3c="T";d.3.2c="T";d.3.I="12";d.3.K="1B";p.J(d);k.2j=d}6 l=M.S("R");l.3.L="U";l.3.F=0;l.3.G=(1C+(m-r+1)*4.Z)+"1b";l.3.I="12";l.3.K="1m";l.3.Q="P";q.J(l);W(4.17){6 C=M.S("R");C.3.L="2l";C.3.F=0;C.3.G="-2h";C.3.I="12";C.3.K="1m";C.3.Q="P";C.3.1t="1s:1w.1v.1u(1g=\'"+4.19+"\')";l.J(C)}1A{6 A=o.11(1i);A.3.L="U";A.3.F="T";A.3.G="-2h";A.3.I="12";A.3.K="1B";l.J(A)}6 u=M.S("R");u.3.L="U";u.3.F="Y";u.3.G=(2g+(m-r+1)*4.Z)+"1b";u.3.I="1f";u.3.K="1m";u.3.1d="1o";u.3.Q="P";u.15="2n 39";q.J(u);k.2d=u;6 s=M.S("R");s.3.L="U";s.3.F="Y";s.3.G="38";s.3.I="1f";s.3.K="1m";s.3.1d="1o";s.3.Q="P";s.15="2n 37";q.J(s);k.1D=s;E.V(k.1I,"X",E.O(4,4.29));E.V(k.1H,"X",E.O(4,4.28));E.V(k.1F,"X",E.O(4,4.27));E.V(k.1T,"X",E.O(4,4.25));E.V(k.1E,"X",E.O(4,4.24));E.V(k.2d,"X",E.O(4,4.23));E.V(k.1D,"X",E.O(4,4.21));E.V(k.1p,"X",E.O(4,4.1P));E.32(a,"30",E.O(4,4.1r));6 z={26:k.1p};6 x=13 2Z(k.2m,z);E.V(x,"2Y",E.O(4,4.1X));7.8.1j=x;4.1r(a.1x(),a.1x());a.2X().J(q);14 q};7.8.29=H(){7.8.N.1k(0,1)};7.8.28=H(){7.8.N.1k(1,0)};7.8.27=H(){7.8.N.1k(-1,0)};7.8.25=H(){7.8.N.1k(0,-1)};7.8.23=H(){7.8.N.2W()};7.8.21=H(){7.8.N.2V()};7.8.1P=H(e){6 b=4.N;6 f=e.2T;6 c=4.1e;6 g=4.1h;6 h=4.1y;6 d=4.1U(h);f-=(d.y+2g);6 a=1S.1W(g-(f/c));a=a<0?0:a;b.1R(a)};7.8.1U=H(c){6 d=c;6 a={x:0,y:0};2S(d){a.x+=d.2R;a.y+=d.2Q;d=d.2P;W(d&&4.17){a.x+=(16(7.1a(d,"1Q","1c-F-I"),10)||0);a.y+=(16(7.1a(d,"1Y","1c-G-I"),10)||0)}}W(4.2b){6 b=M.2M("2L")[0];a.x+=2*(16(7.1a(b,"1Q","1c-F-I"),10)||0);a.y+=2*(16(7.1a(b,"1Y","1c-G-I"),10)||0)}14 a};7.1a=H(a,d,c){6 b=a;W(b.1N){14 b.1N[d]}1A W(2i.1M){6 e=2i.1M(b,"");14 e.2K(c)}};7.8.1X=H(e){6 d=4.1h;6 c=4.1j.G;6 b=4.1e;6 a=1S.1W(d-(c/b));a=a<0?0:a;4.N.1R(a)};7.8.24=H(){4.N.2J()};7.8.1r=H(a,c){6 d=4.1h;6 b=4.1e;4.1j.3b(13 2I(0,(d-c)*b))};7.8.2H=H(){14 13 2G(3f,13 2F(10,10))};7.8.2E=H(){14 1i};7.8.2D=H(){14 18};',62,206,'|||style|this||var|ExtLargeMapControl|prototype||||||||||||||||||||||||||||||||GEvent|left|top|function|width|appendChild|height|position|document|_map|callback|hidden|overflow|div|createElement|0px|absolute|addDomListener|if|click|20px|sliderStep||cloneNode|59px|new|return|title|parseInt|_is_ie|true|imgSrc|getElementStyle|px|border|cursor|_step|18px|src|_maxZoom|false|_slider|panDirection|null|23px|indexOf|pointer|slideBar|22px|_eventZoomEnd|progid|filter|AlphaImageLoader|Microsoft|DXImageTransform|getZoom|_container|none|else|458px|86|zoomInBtn|homeBtn|rightBtn|getMaximumResolution|leftBtn|topBtn|http|40px|mapfiles|getComputedStyle|currentStyle|en_ALL|_eventSlideBar|borderLeftWidth|setZoom|Math|bottomBtn|_getDomPosition|intl|floor|_eventSlideDragEnd|borderTopWidth|_keyboardhandler|com|_eventZoomIn|14px|_eventZoomOut|_eventHome|_eventBottom|container|_eventRight|_eventLeft|_eventTop|MozUserSelect|_is_gecko|padding|zoomOutBtn|opera|google|91|360px|window|zoomSlider|384px|relative|slideBarContainer|zoom|maps|userAgent|86px|19px|navigator|png|home|length|GKeyboardHandler|mapcontrols3d|bottom|right|for|getMapTypes|up|printable|selectable|GSize|GControlPosition|getDefaultPosition|GPoint|returnToSavedPosition|getPropertyValue|BODY|getElementsByTagName|getMinimumResolution|initialize|offsetParent|offsetTop|offsetLeft|while|clientY|getCurrentMapType|zoomIn|zoomOut|getContainer|dragend|GDraggableObject|zoomend|Image|addListener|62px|_is_opera|textAlign|gecko|in|65px|out|GControl|moveTo|margin|msie|default|G_ANCHOR_TOP_LEFT|cur|openhand|url|toLowerCase'.split('|'),0,{}))
      var extLargeMapControl = new ExtLargeMapControl();
      gmap.addControl(extLargeMapControl);
    }

    function setMapmode() {
      if (DEFAULT_MAP_TYPE == "map") {
          gmap.setMapType(G_NORMAL_MAP);
      } else if (DEFAULT_MAP_TYPE == "satellite") {
          gmap.setMapType(G_SATELLITE_MAP);
      } else if (DEFAULT_MAP_TYPE == "hybrid") {
          gmap.setMapType(G_HYBRID_MAP);
      } else if (DEFAULT_MAP_TYPE == "terrain") {
          gmap.setMapType(G_PHYSICAL_MAP);
      } else if (DEFAULT_MAP_TYPE == "earth") {
          gmap.setMapType(G_SATELLITE_3D_MAP);
      }
    }

    function addIcon() {
      var point = new GLatLng(ICON_LAT, ICON_LNG);
      gmap.addOverlay(new GMarker(point));
    }

    function loadGStreetview() {
      if(!(SViewisLoaded()) ) {
        sView = new GStreetviewPanorama($(STREETVIEW_DIV_ID));
        var sLatLng = new GLatLng(STREETVIEW_LAT, STREETVIEW_LNG);
        var sOptions = {yaw:STREETVIEW_YAW, pitch:STREETVIEW_PITCH, zoom:STREETVIEW_ZOOM};
        sView.setLocationAndPOV(sLatLng, sOptions);
        client = new GStreetviewClient();
        addPegman(sLatLng, STREETVIEW_YAW);
/*
        GEvent.addListener(sView, "yawchanged", turnPegman); // With localhost environment this function may fail.
        GEvent.addListener(marker, "dragstart", showStreetviewOverlay);
        GEvent.addListener(marker, "dragend", onDragEnd);
        GEvent.addListener(sView, "initialized", handleInitialization);
*/
//        GEvent.addListener(myPano, 'error', handleNoFlash);
      };
    }

    function SViewisLoaded() {
      if( !(lastPegmanLocation == undefined) ) {
        return true;
      } else {
        return false;
      }
    }

    function addPegman(sLatLng, sYaw){
      if (ADD_PEGMAN && gmap.isLoaded()) {
        var guyIcon = new GIcon(G_DEFAULT_ICON);
        guyIcon.image = "http://maps.google.com/intl/en_us/mapfiles/cb/man_arrow-0.png";
        guyIcon.transparent = "http://maps.google.com/intl/en_us/mapfiles/cb/man-pick.png";
        guyIcon.imageMap = [
              26,13, 30,14, 32,28, 27,28, 28,36, 18,35, 18,27, 16,26,
              16,20, 16,14, 19,13, 22,8
           ];
        guyIcon.iconSize = new GSize(49, 52);
        guyIcon.iconAnchor = new GPoint(25, 35);  // near base of guy's feet
        guyIcon.infoWindowAnchor = new GPoint(25, 5);  // top of guy's head
        marker = new GMarker(sLatLng, {icon: guyIcon, draggable: true});
        gmap.addOverlay(marker);
        lastPegmanLocation = sLatLng;
        addPegmanListeners();
      }
    }

    function addPegmanListeners() {
      GEvent.addListener(sView, "yawchanged", turnPegman); // With localhost environment this function may fail.
      GEvent.addListener(marker, "dragstart", showStreetviewOverlay);
      GEvent.addListener(marker, "dragend", onDragEnd);
      GEvent.addListener(sView, "initialized", handleInitialization);
    }

    function turnPegman(sYaw) {
      var GUY_NUM_ICONS = 16;
      var GUY_ANGULAR_RES = 360/GUY_NUM_ICONS;
      if (sYaw < 0) {
        sYaw += 360;
      }
      guyImageNum = Math.round(sYaw/GUY_ANGULAR_RES) % GUY_NUM_ICONS;
      guyImageUrl = "http://maps.google.com/intl/en_us/mapfiles/cb/man_arrow-" + guyImageNum + ".png";
      marker.setImage(guyImageUrl);
//      eraseShadow50();
    }

    function showStreetviewOverlay() {
      streetviewLayer = new GStreetviewOverlay();
      gmap.addOverlay(streetviewLayer);
    }

    function onDragEnd() {
      gmap.removeOverlay(streetviewLayer);
      var latlng = marker.getLatLng();
      if(sView) {
        client.getNearestPanorama(latlng, onResponse);
      }
    }

    function onResponse(response) {
      if(response.code != 200) {
        //TO DO: Internationalization of the message.
        alert('No Street View data is available') // PodrÃ­a investigar mÃ¡s con alert(response.code);
        marker.setLatLng(lastPegmanLocation);
      } else {
        var latlng = new GLatLng(response.Location.lat, response.Location.lng);
        moveSView(latlng);
        marker.setLatLng(latlng);
        gmap.panTo(latlng);
        lastPegmanLocation = latlng;
      }
    }

    function moveSView(newPoint) {
      sView.setLocationAndPOV(newPoint);
    }

    function handleInitialization(location) {
      var latlng = location.latlng;
      gmap.setCenter(latlng);
      marker.setLatLng(latlng);
    }
