//google.load("maps", "2");
     var map;
     var geo;
     var x = 0;
     var y = 0;
     var zoomlevel;
     var last_element;
     var cur_data;
     var mapcache = [];
     var offset_x=0;
     var offset_y=0;
     var strout;
     var mycache;
     var reply;
     var plotted=0;
     var load_menu = 0;
//     document.write("<script type=\"text/javascript\" src=\"javascript/nardcore_config.js\"><\/script>");

     function plot_all() {
         for (var j = 0; stuff[j]; j++) {
             addr = stuff[j];
             for (var i = 0; typeof addr.data[i] == "object"; i++) {
                 zoomlevel = 4;
		 latlang2point_plot(addr.data[i]);
                 zoomlevel = 4;
             }
         }
	 plotted = 1;
     }
     function init_gmaps() {
         load_menu = 1;
         map = new GMap2(document.getElementById("map_canvas"));
         geo = new GClientGeocoder();
         map.setCenter(new GLatLng(parseFloat(x), parseFloat(y)), 4);
         geo.getLocations("Australia", latlang2point);
         map.addControl(new GSmallMapControl());
         map.addControl(new GMapTypeControl());
	 plot_all();
     }
	 
     function gotocollapse(mapaddress, zoom, elementid, stateid) {
         window.location = "#home";
	 var height = document.getElementById(elementid + '_table').offsetHeight; 
	 if (document.getElementById(elementid).style.height != "0px") {
	     document.getElementById(elementid).style.height="0px";
	     height = "0px";
	 }
         document.getElementById(elementid).style.height=height + "px"; 
         if (last_element != undefined) {
             if (last_element != elementid) {
                 document.getElementById(last_element).style.height="0px"; 
             }
         }
         last_element = elementid;
	 
         //gotoaddress_state(mapaddress, zoom);
     }
     function gotoaddress_state(mapaddress, zoom) {
         zoomlevel = zoom;
	 if (plotted == 0) {
	     map.clearOverlays();
	     plot_all();
	 }
         geo.getLocations(mapaddress, latlang2point);
     }
     function gotoaddress(mapaddress, zoom, j, i) {
         cur_data = stuff[j].data[i];
         zoomlevel = zoom;
	 show_maps();
         geo.getLocations(mapaddress, latlang2point_info);
     }
     function latlang2point(data) {
         if (!zoomlevel) {
             zoomlevel = 12;
         }
	 if (data && data.Status.code == 200) {
	     place = data.Placemark[0];
	     point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
             map.closeInfoWindow();
             map.setZoom(zoomlevel);
             map.panTo(point);
	 }
     }
     function latlang2point_info(data) {
         if (!zoomlevel) {
             zoomlevel = 12;
         }
	 plotted = 0;
	 map.clearOverlays();

	 if (data && data.Status.code == 200) {
	     place = data.Placemark[0];
	     point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
             map.setZoom(zoomlevel);
             map.panTo(point);
			 	 // Create our "tiny" marker icon
var tinyIcon = new GIcon();
tinyIcon.image = "http://www.spendless.com.au/images/generic/spendless_icon.png";
tinyIcon.shadow = "http://www.spendless.com.au/spendless/images/generic/spendless_shadow.png";
tinyIcon.iconSize = new GSize(13, 20);
tinyIcon.shadowSize = new GSize(25, 21);
tinyIcon.iconAnchor = new GPoint(7, 20);
tinyIcon.infoWindowAnchor = new GPoint(13, 20);

// Set up our GMarkerOptions object literal
markerOptions = { icon:tinyIcon };
         map.addOverlay(new GMarker(point, markerOptions));
             var infotext = cur_data.shop + "<br />" + cur_data.street + "<br />" + 
	                    cur_data.city + ", " + cur_data.state + "<br />" + cur_data.phone;
             map.openInfoWindowHtml(point, infotext);
	 }
     }
     function latlang2point_plot(data) {
         if (!zoomlevel) {
             zoomlevel = 12;
         }
	 point = new GLatLng(data.lat, data.lon);
	 // Create our "tiny" marker icon
var tinyIcon = new GIcon();
tinyIcon.image = "http://www.spendless.com.au/images/generic/spendless_icon.png";
tinyIcon.shadow = "http://www.spendless.com.au/images/generic/spendless_shadow.png";
tinyIcon.iconSize = new GSize(13, 20);
tinyIcon.shadowSize = new GSize(25, 21);
tinyIcon.iconAnchor = new GPoint(7, 20);
tinyIcon.infoWindowAnchor = new GPoint(5, 1);

// Set up our GMarkerOptions object literal
markerOptions = { icon:tinyIcon };
         map.addOverlay(new GMarker(point, markerOptions));
     }
     function gen_menu() {
         var last_text;
         var addr_text;
             document.write("<table border=\"0\">");
         for (var j = 0; stuff[j]; j++) {
             addr = stuff[j];
             document.write("<tr><td colspan=\"2\" class=\"menubar\" onMouseOver=\"this.style.cursor='pointer'\" onClick='gotocollapse(\"" + 
	                                 addr.data[0].state + ' ' + addr.data[0].country + "\", 4, \"" +
					                             addr.data[0].state + "\"," + j + ");'>");
document.write("<a class=\"state\" onClick='return false;'>" + addr.data[0].state + "</a></td></tr><tr><td>");
             document.write("<div id=\"" + addr.data[0].state + "\" style=\"overflow: hidden; height: 0px;\">");
             document.write("<table border=\"0\" id=\"" + addr.data[0].state + "_table\">");

             for (var i = 0; typeof addr.data[i] == "object"; i++) {
                 addr_text = addr.data[i].street + ' ' + addr.data[i].city + ' ' + 
                             addr.data[i].state + ' ' + addr.data[i].zip + ' ' + 
			     addr.data[i].country;
                 if (addr.data[i].label != last_text) {
                     if (i > 0) {
                         document.write("<tr><td colspan=\"2\">&nbsp;</td></tr>");
                     }
                     document.write("<tr><td colspan=\"2\" nowrap>");
		     document.write("<b>" + addr.data[i].label + "</b></td></tr>");
                 }
                 document.write("<tr>\n<td style=\"width:10px;\">&nbsp;</td><td class=\"address_text\" nowrap>\n");
                 document.write("<a href=\"#\" onClick='gotoaddress(\"" + 
                                addr.data[i].query + "\", 14, " + j + "," + 
				i + "); return false;'>" + addr.data[i].link_label + 
                                "</a>\n");
                 document.write("</td>\n</tr>\n");
                 last_text = addr.data[i].label;
             }
             document.write("</table></div></td></tr>");
         }
             document.write("</table>");
     }
     //google.setOnLoadCallback(init);


function get_store_from_postcode(postcode) {
  if( (postcode.length == 4) && (!isNaN(parseInt(postcode))) ){
    show_maps();
    cur_data = stuff[0].data[1];
    switch(postcode){
    case "5000":
	geo.getLatLng(postcode+", Adelaide, Australia",closest_store);
	break;
    default:
	geo.getLatLng(postcode+", Australia",closest_store);
    }
  }
}

function closest_store(pnt) {
    
    var distArray = new Array();
    
    for (var j = 0; stuff[j]; j++) {
      addr = stuff[j];
      for (var i = 0; typeof addr.data[i] == "object"; i++) {
        marker = new GLatLng(addr.data[i].lat, addr.data[i].lon);
        distArray.push([addr.data[i],marker,marker.distanceFrom(pnt)]);    
      }
    }
    
    var closest = distArray.sort(sortNumber)[0];

    cur_data = closest[0];
    zoomlevel = 14;
    
    if(closest[2] < 6500000){
      geo.getLocations(closest[1],latlang2point_info);
    }else{
      alert("Sorry, that postcode is invalid");
    }
}


function sortNumber(a,b){return a[2] - b[2];}
function to_rads(num){return num*(Math.PI/180);}

function show_maps(){
  document.getElementById('gmap-wrapper').style.visibility = "visible";
  document.getElementById('australia_links').style.display = "none";
}