// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

//function load() {
//      if (GBrowserIsCompatible()) {
//        var map = new GMap2(document.getElementById("map"));
//        map.addControl(new GSmallMapControl());
//		map.addControl(new GMapTypeControl());
//		map.setCenter(new GLatLng(53.337184, -6.261692), 15);
//		var point = map.getCenter();
//		function createMarker(point) {
//			var marker = new GMarker(map.getCenter());
//			GEvent.addListener(marker, "click", function() {
//			marker.openInfoWindowHtml("International Corporate Centre, <br/>92-93 St. Stephen's Green, <br/>Dublin 2, Ireland");
//		});
//		return marker;
//		}
//		map.addOverlay(createMarker(point));
//		}
//    }

var businesses = [
{name: 'International Corporate Centre',
street: "92-93 St. Stephen's Green",
city: "Dublin 2",
state: 'Ireland',
zip: '',
country: '',
phone: '(+353) 1 4283300',
lat: 53.337184, lng: -6.261692},
{name: 'International Corporate Centre',
street: '15 Harcourt Street',
city: 'Dublin 2',
state: 'Ireland',
zip: '',
country: '',
phone: '(+353) 1 4283300',
lat: 53.336588, lng: -6.263269}];

/**
 * The map object, null until script loads in.
 * @type {GMap2}
 */
var map = null;  

/**
 * The bounds of the markers once loaded in.
 * @type {GLatLngBounds}
 */
var bounds = null;

/**
 * The marker with currently opened info window.
 * @type {GMarker}
 */
var currentMarker = null;

/**
 * The dom element that the map is loaded into
 * @type {Element}
 */
var mapDiv = null;

/**
 * The dom element that everything is a child of.
 * @type {Element}
 */
var containerDiv = null;

/**
 * Position of mouse click (clientX) on map div when in static mode.
 * @type {Number}
 */
var clickedX = 0;

/**
 * Position of mouse click (clientY) on map div when in static mode.
 * @type {Number}
 */
var clickedY = 0;

/**
 * Indicates whether we've created a script tag with Maps API yet
 * @type {Boolean}
 */
var isLoaded = false;


/**
 * Called after script is asynchronously loaded in.
 * Creates the GMap2, GMarker objects and performs actions according to 
 * what the user did to trigger the map load (search, zoom, click etc).
 */
function loadMap() {
  if (GBrowserIsCompatible()) {
    mapDiv.style.background = '#fff';
    mapDiv.style.cursor = '';
    map = new GMap2(mapDiv, {logoPassive: true});
    bounds = new GLatLngBounds();
    for (var i = 0; i < businesses.length; i++) {
      bounds.extend(new GLatLng(businesses[i].lat, businesses[i].lng));
    }
    var latSpan = bounds.toSpan().lat();
    map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
				
				map.addControl(new GSmallMapControl());
				map.addControl(new GMapTypeControl());
				
    // The static map server gives markers more space when calculating
    // bounds and zoom level, so sometimes the API will give a higher
    // zoom level than was used by the static map server.
    // The .98 value is just a guess right now, may need tweaking.
    var newBounds = map.getBounds();
    var newLatSpan = newBounds.toSpan().lat();
    if (latSpan/newLatSpan > .10) { map.zoomOut(); }

    for (var i = 0; i < businesses.length; i++) {
      var marker = createMarker(i);
      var latlng = marker.getLatLng();
      var pixel = map.fromLatLngToDivPixel(latlng);
      if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
        //GEvent.trigger(marker, 'click');
      }
      map.addOverlay(marker);
    }
  }
}

/**
 * Zooms to the viewport that fits all the markers.
 */
function zoomToAll() {
  map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
}

/**
 * Creates a marker for the given business.
 * @param {Number} ind
 * @return {GMarker}
 */
function createMarker(ind) {
  var business = businesses[ind];
  var marker = new GMarker(new GLatLng(business.lat, business.lng));
  GEvent.addListener(marker, 'click', function() {
    marker.html = ['<b>', business.name, '</b><br/>', 
                 business.street, '<br/> ', business.city, '<br/>', 
                 business.state, '<br/>', business.zip, '<br/>',
                 business.phone, '<br/><br/>', 'Get directions: ', 
                 '<a target="_blank" ',
                 'href="http://maps.google.com/maps?saddr=&daddr=',
                 formatAddressForMaps(business), '">to here</a> - ', 
                 '<a target="_blank" ',
                 'href="http://maps.google.com/maps?saddr=',
                 formatAddressForMaps(business), '&daddr=', '"> from here <br> ',
                 '<a href="javascript:zoomToAll()">View all locations</a>'].join('');
    currentMarker = marker;
    marker.openInfoWindowHtml(marker.html);
  });
  return marker;
}

/**
 * Formats business info into a URL-friendly version for maps url.
 * @param {Object} business
 * @return {String}
 */
function formatAddressForMaps(business) {
  var address = business.street + ' ' + business.city + ' ' + business.state + ' ' + business.zip;
  return escape(address.replace(' ', '+'));
}

/**
 * Convenience function for creating an element and assigning an id to it.
 * @param {String} elementType
 * @param {String} id
 * @return {Element} 
 */
function _cel(elementType, id) {
  var element = document.createElement(elementType);
  element.id = id;
  return element;
}

/**
 * Loads in the Maps API script. This is called after some sort of user interaction.
 * The script loads asynchronously and calls loadMap once it's in.
 */
function loadScript() {
  if (!isLoaded) {
    isLoaded = true;
    var div = document.createElement('div');
    div.className = 'message';
    div.innerHTML = 'Loading...';
    div.style.left = (420/2 - 53) + 'px';
    div.style.top = 420/2 + 'px'; 
    mapDiv.appendChild(div);
    var script = document.createElement('script');
    script.type = 'text/javascript';
// LIVE \\
//    script.src = 'http://maps.google.com/maps?file=api&v=2.x' + '&async=2&callback=loadMap&key=ABQIAAAA_FGo_4m8s_e3ItDOoi4VSxQDUst3L-I23__uy6oShqLCx3Vb5hQOlrJ7C5vdfEsQwjJiKhSnt-SWwA';
/////\\\\\
// DEV \\\
    script.src = 'http://maps.google.com/maps?file=api&v=2.x' + '&async=2&callback=loadMap&key=ABQIAAAA_FGo_4m8s_e3ItDOoi4VSxQsg__5rpfUeylJ4LkTgONIvgRAjxQWBeiNZBVnZbqCmGP3-XaNxCJ_fQ';
/////\\\\\
				document.body.appendChild(script);
  }
}

/**
 * Sets up the gadget by setting CSS and click events.
 */
function loadMapGadget() {
  containerDiv = document.getElementById('container');
  mapDiv = document.getElementById('map1');

  mapDiv.onclick = function (e) {
    clickedX = (window.event && window.event.offsetX) || e.clientX;
    clickedY = (window.event && window.event.offsetY) || e.clientY;
    loadScript(); 
  };

  mapDiv.style.cursor = 'pointer';

  var urlString = ['http://maps.google.com/staticmap?markers='];
  var markerString = [];
  for (var i = 0; i < businesses.length; i++) {
    markerString.push(businesses[i].lat + ',' + businesses[i].lng + ',red');
  }
  urlString.push(markerString.join('|'));
  urlString.push('&size=363x356');
		urlString.push('&key=ABQIAAAA_FGo_4m8s_e3ItDOoi4VSxQsg__5rpfUeylJ4LkTgONIvgRAjxQWBeiNZBVnZbqCmGP3-XaNxCJ_fQ');
//  urlString.push('&key=ABQIAAAA_FGo_4m8s_e3ItDOoi4VSxQDUst3L-I23__uy6oShqLCx3Vb5hQOlrJ7C5vdfEsQwjJiKhSnt-SWwA');
  mapDiv.style.background = 'url(\'' + urlString.join('') + '\')';

}

/***********************************************
* Dynamic Ajax Content- ï¿½ Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/

var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
var bustcacheparameter=""

function ajaxpage(url, containerid){
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
} 
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
if (bustcachevar) //if bust caching of external page
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)
}

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}

function loadobjs(){
	if (!document.getElementById)
	return
	for (i=0; i<arguments.length; i++){
		var file=arguments[i]
		var fileref=""
		if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
			if (file.indexOf(".js")!=-1){ //If object is a js file
				fileref=document.createElement('script')
				fileref.setAttribute("type","text/javascript");
				fileref.setAttribute("src", file);
			}
			else if (file.indexOf(".css")!=-1){ //If object is a css file
				fileref=document.createElement("link")
				fileref.setAttribute("rel", "stylesheet");
				fileref.setAttribute("type", "text/css");
				fileref.setAttribute("href", file);
			}
		}
		if (fileref!=""){
			document.getElementsByTagName("head").item(0).appendChild(fileref)
			loadedobjects+=file+" " //Remember this object as being already added to page
		}
	}
}