// JScript File

//relies on jquery
    $(document).ready(function() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"), new GSize(320,464));
        map.enableScrollWheelZoom();
        map.enableContinuousZoom();
        map.disableDoubleClickZoom();
        map.setCenter(new GLatLng(16.03604,108.21114),13);
        map.addControl(new GSmallMapControl());
        window.setTimeout(setupOfficeMarkers, 0);
        $('#postcode').focus(function () {
             $(this).select();
        });

        var qs = new Querystring();
        var place = qs.get("Locate");
        if(place!=null){
            $('#postcode').attr('value',place);
            findPostCode();
        }
      }
    });
    $(document.body).unload(function() {
        if (GBrowserIsCompatible()) {
            GUnload();
        }
    });

var iconData = {
  'makro': { width: 54, height: 20 },
  'shadow-makro': { width: 65, height: 20 },
  'person': { width: 15, height: 30 },
  'shadow-person': { width: 31, height: 30 }
};

var officeLayer = [
      {
        'title': 'An Ph%FA',
        'name': 'An Ph&#250;',
        'icon': ['makro', 'shadow-makro'],
        'posn': [10.492528,106.435866],
        'address': 'An Ph&#250; - An Kh&#225;nh<br/>Qu&#7853;n 2<br/>Th&#224;nh ph&#7889; H&#7891; Ch&#237; Minh',
        'telephone': '(+848) 37406677',
        'fax': '(+848) 35190362',
        'id': '1098245'
      },
      {
        'title': 'B%ECnh Ph%FA',
        'name': 'B&#236;nh Ph&#250;',
        'icon': ['makro', 'shadow-makro'],
        'posn': [10.410734,106.37281],
        'address': 'Khu D&#226;n C&#432; B&#236;nh Ph&#250;<br>Ph&#432;&#7901;ng 11<br/>Qu&#7853;n 6<br/>Th&#224;nh ph&#7889; H&#7891; Ch&#237; Minh',
        'telephone': '(+848) 8769705',
        'fax': '(+848) 8769024',
        'id': '1098247'
      },
      {
        'title': 'Hi%u1EC7p Ph%FA',
        'name': 'Hi&#7879;p Ph&#250;',
        'icon': ['makro', 'shadow-makro'],
        'posn': [10.471228,106.384219],
        'address': 'T&#226;n Th&#7899;i Hi&#7879;p<br>Ph&#432;&#7901;ng T&#226;n Th&#7899;i Hi&#7879;p<br>Qu&#7853;n 12<br>Th&#224;nh ph&#7889; H&#7891; Ch&#237; Minh',
        'telephone': '(+848) 7172979',
        'fax': '(+848) 7172992',
        'id': '1098248'
      },
      {
        'title': 'Th%u0103ng Long',
        'name': 'Th&#259;ng Long',
        'icon': ['makro', 'shadow-makro'],
        'posn': [21.032403,105.820068],
        'address': '&#272;&#432;&#7901;ng Ph&#7841;m V&#259;n &#272;&#7891;ng<br>Huy&#7879;n C&#7893; Nhu&#7871;<br>Qu&#7853;n T&#7915; Li&#234;m<br>H&#224; N&#7897;i',
        'telephone': '(+844) 7551617',
        'fax': '(+844) 7551650',
        'id': '1098249'
      },
      {
        'title': 'Ho%E0ng Mai',
        'name': 'Ho&#224;ng Mai',
        'icon': ['makro', 'shadow-makro'],
        'posn': [20.97011566,105.8662158],
        'address': '126 &#272;&#432;&#7901;ng Tam Trinh<br>Ph&#432;&#7901;ng Y&#234;n S&#7903;<br>Qu&#7853;n Ho&#224;ng Mai<br>H&#224; N&#7897;i',
        'telephone': '(+844) 6453232',
        'fax': '(+844) 6543234',
        'id': '1098250'
      },
      {
        'title': 'H%u01B0ng L%u1EE3i',
        'name': 'H&#432;ng L&#7907;i',
        'icon': ['makro', 'shadow-makro'],
        'posn': [10.0318,105.784],
        'address': 'Qu&#7889;c L&#7897; 91B<br>Ph&#432;&#7901;ng H&#432;ng L&#7907;i<br>Qu&#7853;n Ninh Ki&#7873;u<br>Th&#224;nh ph&#7889; C&#7847;n Th&#417;',
        'telephone': '(+8471) 739973',
        'fax': '(+8471) 739983',
        'id': '1098243'
      },
      {
        'title': 'H%u1ED3ng B%E0ng',
        'name': 'H&#7891;ng B&#224;ng',
        'icon': ['makro', 'shadow-makro'],
        'posn': [20.87467,106.65219],
        'address': 'S&#7889; 2A &#272;&#432;&#7901;ng H&#7891;ng B&#224;ng<br>Ph&#432;&#7901;ng S&#7903; D&#7847;u<br>Qu&#7853;n H&#7891;ng B&#224;ng<br>Th&#224;nh ph&#7889; H&#7843;i Ph&#242;ng',
        'telephone': '(+8431) 528128',
        'fax': '(+8431) 528124',
        'id': '1098244'
      },
      {
        'title': '%u0110%E0 N%u1EB5ng',
        'name': '&#272;&#224; N&#7861;ng',
        'icon': ['makro', 'shadow-makro'],
        'posn': [16.03604,108.21114],
        'address': '&#272;&#432;&#7901;ng C&#225;ch M&#7841;ng Th&#225;ng T&#225;m&nbsp;<br>Ph&#432;&#7901;ng H&#242;a C&#432;&#7901;ng Nam<br>Qu&#7853;n H&#7843;i Ch&#226;u<br>Th&#224;nh ph&#7889; &#272;&#224; N&#7861;ng',
        'telephone': '(+84511) 644933',
        'fax': '(+84511) 644966',
        'id': '1098241'
      },
      {
        'title': 'Bi%EAn H%F2a',
        'name': 'Bi&#234;n H&#242;a',
        'icon': ['makro', 'shadow-makro'],
        'posn': [10.94731,106.817001],
        'address': '&#272;&#432;&#7901;ng Nguy&#7877;n &#193;i Qu&#7889;c<br/>Ph&#432;&#7901;ng Quang Vinh<br>Th&#224;nh ph&#7889; Bi&#234;n H&#242;a<br/>T&#7881;nh &#272;&#7891;ng Nai',
        'telephone': '+84 (061) 38 820 411',
        'fax': '+84 (061) 38 820 430',
        'id': '1100242'
      },
      {
        'title': 'Long Xuy%EAn',
        'name': 'Long Xuy&#234;n',
        'icon': ['makro', 'shadow-makro'],
        'posn': [10.38178,105.437599],
        'address': '414 &#272;&#432;&#7901;ng Tr&#7847;n H&#432;ng &#272;&#7841;o<br/>P. M&#7929; Ph&#432;&#7899;c<br>TP. Long Xuy&#234;n<br/>T&#7881;nh An Giang',
        'telephone': '+84 (076) 38 211 888',
        'fax': '+84 (076) 38 211 878',
        'id': '1106154'
      },
      {
        'title': 'Qui Nh%u01A1n',
        'name': 'Qui Nh&#417;n',
        'icon': ['makro', 'shadow-makro'],
        'posn': [13.766667,109.233333],
        'address': 'Qu&#7889;c l&#7897; 1D<br/>P.Gh&#7873;ng R&#225;ng<br>TP. Qui Nh&#417;n<br/>T&#7881;nh B&#236;nh &#272;&#7883;nh',
        'telephone': '+84 (056) 3 546 054',
        'fax': '+84 (056) 3 546 055',
        'id': '1106155'
      }
    ];

    var map;
    var userMarker;
    var icons = {};
    var allmarkers = [];
    var EARTH_RADIUS = 6367000;

    function getIcon(images) {
      var icon = null;
      if (images) {
        if (icons[images[0]]) {
          icon = icons[images[0]];
        } else {
          icon = new GIcon();
          if (images[0] == 'makro') prefix = '../../show/1098412/';
          else if (images[0] == 'person') prefix = '../../show/1098414/';
          icon.image = prefix + images[0] + '.png';
          var size = iconData[images[0]];
          icon.iconSize = new GSize(size.width, size.height);
          icon.iconAnchor = new GPoint(0, 20);
          if (images[0] == 'makro') prefix = '../../show/1098415/';
          else if (images[0] == 'person') prefix = '../../show/1098416/';
          icon.shadow = prefix + images[1] + '.png';
          size = iconData[images[1]];
          icon.shadowSize = new GSize(size.width, size.height);
          icons[images[0]] = icon;
        }
      }
      return icon;
    }

    function setupOfficeMarkers() {
      var points = [];
      allmarkers.length = 0;
      for (var j in officeLayer) {
          var place = officeLayer[j];
          var icon = getIcon(place['icon']);
          var title = unescape(place['title']);
          var name = place['name'];
          var posn = new GLatLng(place['posn'][0], place['posn'][1]);
          points[j] = posn;
          var address = place['address'];
          var telephone = place['telephone'];
          var fax = place['fax'];
          var link = place['id'];
          var marker = createMarker(posn,title,icon,address,telephone,fax,link,name); 
          map.addOverlay(marker);
          allmarkers.push(marker);
      }
      fitMap(points);
    }
  
    function createMarker(posn, title, icon, address, telephone, fax,link, name) {
      var marker = new GMarker(posn, {title: title, icon: icon, draggable:false });
      GEvent.addListener(marker,'click', function() {
        var myHtml =  '<b>' + name + '</b><br/>' + address + '<br/><b>&#272;i&#7879;n tho&#7841;i: </b>' + telephone + '<br/><b>Fax: </b>' + fax + '<br/><div align=\"right\"><a href=\"../../menu/' + link + '_l30/index.html\">Trang ch&#7911; c&#7911;a trung t&#226;m th&#432;&#417;ng m&#7841;i</a></div>';
        map.openInfoWindowHtml(posn, myHtml);
      });
      return marker;
    }


    function findPostCode(){
      var postcode = $('#postcode').attr('value')+',VN';
      var geocoder = new GClientGeocoder();
      geocoder.getLatLng(
        postcode,
        function(point) {
          if (!point) {
            alert(unescape('Kh%F4ng t%ECm th%u1EA5y \"') + $('#postcode').attr('value')+'"');
          } else {
            if(!userMarker){      
              //map.panTo(point);
              var picon = getIcon(['person', 'shadow-person'])
              userMarker = new GMarker(point, {title: 'You are here', icon: picon, draggable:false });
              map.addOverlay(userMarker);
            }else{
              userMarker.setLatLng(point);
              //map.panTo(point);
            }
            searchStores(point);
          }
        }
      );
    }
    
    function searchStores(point){
        var layer = officeLayer;
        var resultpoints = [];
        var i = 0;
        resultpoints[i] = point;
        i++;
        for (var j in layer) {
          var place = layer[j];
          var title = place['name'];
          var posn = new GLatLng(place['posn'][0], place['posn'][1]);
          place['distance'] = distance_between_points ( posn, point );
        }
        
        layer.sort(sortDistance);
        $('#search_results').hide();
        $('#search_results').empty();
        resultpoints[i] = new GLatLng(layer[0]['posn'][0], layer[0]['posn'][1]);
        i++;
        $('#search_results').append('<li><div class="placename"><a href="#" onclick=\"showInfo(\'' + layer[0]['name'] + '\');return false;\">' + layer[0]['name'] + '</a></div><div class=\"distance\"><a href="#" onclick=\"showInfo(\'' + layer[0]['name'] + '\');return false;\">' + (layer[0]['distance']/1000).toFixed(1) + ' km</a></div><div class="getDirections"><a target="_blank" href="http://maps.google.com/maps?f=d&saddr=' + $('#postcode').attr('value') + '&daddr='+ layer[0]['posn'][0] +','+ layer[0]['posn'][1] +'(Makro - ' + layer[0]['name'] + ')&hl=en"></a></div></li>');
        for (var j in layer) {
          var place = layer[j];
          if(j>0&&(place['distance']/1000)<30){
            resultpoints[i] = new GLatLng(place['posn'][0], place['posn'][1]);
            i++;
            $('#search_results').append('<li><div class="placename"><a href="#" onclick=\"showInfo(\'' + place['name'] + '\');return false;\">' + place['name'] + '</a></div><div class=\"distance\"><a href="#" onclick=\"showInfo(\'' + place['name'] + '\');return false;\">' + (place['distance']/1000).toFixed(1) + ' km</a></div><div class="getDirections"><a target="_blank" href="http://maps.google.co.uk/maps?f=d&saddr=' + $('#postcode').attr('value') + '&daddr='+ place['posn'][0] +','+ place['posn'][1] +'(Makro - ' + place['name'] + ')&hl=en"></a></div></li>');
          }
        }
        $('#search_results').fadeIn(1000);
        fitMap(resultpoints);
    }
    
    //http://blog.jeromeparadis.com/archive/2007/02/08/1468.aspx
    function fitMap(points) {
      var bounds = new GLatLngBounds();
      for (var i=0; i< points.length; i++) {
        bounds.extend(points[i]);
      }
      map.setZoom(map.getBoundsZoomLevel(bounds));
      map.setCenter(bounds.getCenter());
    }
    
    Math.deg2rad = function ( x ) {
      return x * (Math.PI / 180.0); 
    }

    // Calculates the distance (in metres) between 2 points. 
    function distance_between_points ( p1, p2 ) {
      var a = Math.deg2rad( 90 - p1.y);
      var b = Math.deg2rad( 90 - p2.y);
      var theta = Math.deg2rad( p2.x - p1.x);
      var c = Math.acos( Math.cos(a) * Math.cos(b) + Math.sin(a) * Math.sin(b) * Math.cos(theta));
      return c * EARTH_RADIUS; 
    }
    function sortDistance(a,b){
      return a['distance'] - b['distance'];
    }

    function showInfo(storeName){
        for(i in allmarkers){
            if(allmarkers[i].getTitle()==storeName){
                GEvent.trigger(allmarkers[i],'click');
                break;
            }
        }
    }

/* Client-side access to querystring name=value pairs
	Version 1.3
	28 May 2008
	
	License (Simplified BSD):
	http://adamv.com/dev/javascript/qslicense.txt
*/
function Querystring(qs) { // optionally pass a querystring to parse
	this.params = {};
	
	if (qs == null) qs = location.search.substring(1, location.search.length);
	if (qs.length == 0) return;

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&'); // parse out name/value pairs separated via &
	
// split out each name=value pair
	for (var i = 0; i < args.length; i++) {
		var pair = args[i].split('=');
		var name = decodeURIComponent(pair[0]);
		
		var value = (pair.length==2)
			? decodeURIComponent(pair[1])
			: name;
		
		this.params[name] = value;
	}
}

Querystring.prototype.get = function(key, default_) {
	var value = this.params[key];
	return (value != null) ? value : default_;
}

Querystring.prototype.contains = function(key) {
	var value = this.params[key];
	return (value != null);
}
