﻿//google.load("maps", "2.x");  
// Call this function when the page has been loaded  
var map = null;        
var geocoder = null;
var baseIconSingle = null;
var baseIconGroup = null;
//var heroMarker = null;
//var searchMarker = null;
var mgr = null;
//var mgrTen = null;
//var heroSaved = false;
//var tenNewestMarkers = [];
//var tenNewestMarkersContent = [];
var bounds;
var showLocationWhere = null;
var showLocationPage = null;
var showLocationSetBounds = null;
var showLocationFired = false;
var pageSetCountryCode = "PL";
var lastLat = null;
var lastLng = null;
var dup = 0.0001;
var showInfo = false;

function init(singlePin) {    
    if (!GBrowserIsCompatible()) 
    { 
        alert("Sorry, the Google Maps API is not compatible with this browser");
        return;
    }
    map = new GMap2(document.getElementById("map")); 
    map.addControl(new GLargeMapControl());
    if(singlePin)
    {
        map.setCenter(new GLatLng(querySt("lat"),querySt("lng")), 15); 
    }
    else
    {
        map.setCenter(new GLatLng(52.079506,18.665771), 6);    
        map.addControl(new GMapTypeControl()); 
        map.addControl(new GOverviewMapControl()); 
    }
    geocoder = new GClientGeocoder(); 
    
    if(pageSetCountryCode != null) geocoder.setBaseCountryCode(pageSetCountryCode);                

    var mgrOptions = {maxZoom:15, trackMarkers:true };
    mgr = new MarkerManager(map);
                
    baseIconSingle = new GIcon();
    baseIconSingle.shadow = "shadow.png";
    baseIconSingle.iconSize = new GSize(24, 31);
    baseIconSingle.shadowSize = new GSize(40, 31);
    baseIconSingle.iconAnchor = new GPoint(12, 15);
    baseIconSingle.infoWindowAnchor = new GPoint(12, 15);
    
    baseIconGroup = new GIcon();
    baseIconGroup.shadow = "shadow.png";
    baseIconGroup.iconSize = new GSize(48, 62);
    baseIconGroup.shadowSize = new GSize(40, 31);
    baseIconGroup.iconAnchor = new GPoint(12, 15);
    baseIconGroup.infoWindowAnchor = new GPoint(12, 15);
    
    if(!singlePin)
    {
        var info = "<div style='width:240px;' class='mapInfo'><img src='cashback_logo.jpg' width='75' height='47' /><h2>Ładowanie danych</h2>";
        info += "<p>proszę czekać</p></div>";
        map.openInfoWindowHtml(map.getCenter(), info);
    }
    
    SetMarkers(null, 1);     
    
            
}  

function initialize() 
{    
    init(false);
}

var markerPoint;
var markerInfo;
function initializeSinglePin() {    
    showInfo = true;
    init(true); 
}

function CreateMarker(pinImg, boolGroupIcon, point, info, imp)
{
    function importanceOrder (marker,b) {
        return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000;
      }
    if (boolGroupIcon == true)  
    {
    var markerIcon = new GIcon(baseIconGroup);
    }
    if (boolGroupIcon != true)  
    {
    var markerIcon = new GIcon(baseIconSingle);
    }
    
    markerIcon.image = pinImg;
    markerOptions = { icon:markerIcon };
    if(imp > 0) markerOptions = { icon:markerIcon, zIndexProcess:importanceOrder};    
    var marker = new GMarker(point, markerOptions);
    if(imp > 0) marker.importance = imp;
    GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(info); map.setCenter(point); });
    if(showInfo)
    {
        markerPoint = point;
        markerInfo = info;
    }
    return marker;
}

function createTabbedMarker(point,htmls,labels) {
        //if (htmls.length > 1) document.getElementById("infoMsg").innerHTML += "****<br/>" + labels + "****<br/>";
        var markerIcon = new GIcon(baseIcon);
        markerIcon.image = "pin.png";
        markerOptions = { icon:markerIcon }; 
        var marker = new GMarker(point, markerOptions);
        GEvent.addListener(marker, "click", function() {
          // adjust the width so that the info window is large enough for this many tabs
          if (htmls.length > 2) {
            htmls[0] = '<div style="width:'+htmls.length*88+'px">' + htmls[0] + '</div>';
          }
          var tabs = [];
          for (var i=0; i<htmls.length; i++) {
            tabs.push(new GInfoWindowTab(labels + (i + 1),htmls[i]));
          }
          marker.openInfoWindowTabsHtml(tabs);
        });
        return marker;
      }
      
function setImportance (marker,b) 
{
   return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000;
}


function SetMarkers(searchStr, page, setBounds)
{
    
    GDownloadUrl("googleOutlets.aspx?i=" + querySt("id"), function(data, responseCode) {  
        var xml = GXml.parse(data);  
        var outlets = xml.documentElement.getElementsByTagName("Outlet");         
        var batch = [];
        var i = 0;
        var tabContent = "";
        var tabTitle = "";
        var buildPin = true;
        var point;
        for (i = 0; i < outlets.length; i++) {   
            //get values
            var outletNode = outlets[i];
            var outletCount = outletNode.getElementsByTagName("outletCount")[0].firstChild.nodeValue;    
            var Address = outletNode.getElementsByTagName("address")[0].firstChild.nodeValue;
            var Outlet = outletNode.getElementsByTagName("outlet")[0].firstChild.nodeValue;
            var lat = outletNode.getElementsByTagName("lat")[0].firstChild.nodeValue;    
            var lng = outletNode.getElementsByTagName("lng")[0].firstChild.nodeValue;
            
            var pinImg = "pin.png";
            var point = new GLatLng(lat, lng);
            var info = "<div class='mapInfo'><img src='cashback_logo.jpg' width='75' height='47' /><h2>" + Outlet + "</h2>" + Address + "</div>";
            var isGroup = false;
            if(outletCount > 1)
            {
                isGroup = true;
                //set pin
                pinImg = "pin1.png";
//                info = "<div class='mapInfo'><img src='cashback_logo.jpg' width='75' height='47' /><h2>" + Address + "</h2>" + Outlet.replace(/¬item¬/g,'<br /><br />') + "</div>";         
                info = "<div class='mapInfo'><img src='cashback_logo.jpg' width='75' height='47' /><h2>" + Outlet.replace(/¬item¬/g,'<br /><br />') + "</h2>" + Address + "</div>";                       
            }
            batch.push(CreateMarker(pinImg, isGroup, point, info));
            
            
        }
        
        if(batch.length>0)
        {
            mgr.addMarkers(batch, 10);
            mgr.refresh();
        }
        map.closeInfoWindow();
        if(showInfo)
        {
              map.openInfoWindowHtml(markerPoint, markerInfo);
        }
    }
    
    )
}

function getContent(n)
{
    if(n.firstChild != null) return n.firstChild.nodeValue;
    n.nodeValue;
}

// addAddressToMap() is called when the geocoder returns an
// answer.  It adds a marker to the map with an open info window
// showing the nicely formatted version of the address and the country code.
function addAddressToMap(response) 
{          
  if (!response || response.Status.code != 200) {
    map.openInfoWindow(map.getCenter(), document.createTextNode("Sorry, we were unable to geocode that address"));
  } else {
    place = response.Placemark[0];
    var level = 8 + place.AddressDetails.Accuracy;
    if(level > 16) level = 16;
    point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
    map.setCenter(point, level);
    }
}

// showLocation() is called when you click on the Search button
// in the form.  It geocodes the address entered into the form
// and adds a marker to the map at that location.
function showLocation(page, map, setBounds) {        
    var address = document.getElementById("txtSearch").value;
    if(map && trim10(address) != "") geocoder.getLocations(address, addAddressToMap);
}

function trim10 (str) {
	var whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
	for (var i = 0; i < str.length; i++) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(i);
			break;
		}
	}
	for (i = str.length - 1; i >= 0; i--) {
		if (whitespace.indexOf(str.charAt(i)) === -1) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}


// findLocation() is used to enter the sample addresses into the form.
function findLocation(address) {
  document.forms[0].q.value = address;
  showLocation(1, true, true);
}


function URLEncode (clearString) {
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}

function querySt(ji) 
{
    hu = window.location.search.substring(1);
    gy = hu.split("&");
    for (i=0;i<gy.length;i++) 
    {
        ft = gy[i].split("=");
        if (ft[0] == ji) 
        {
            return ft[1];
        }
    }
}

