

Array.prototype.random = function() {
return this[Math.round(Math.random()*(this.length-1))];
}
Provider.prototype = new Object();
function Provider(id, longitude, latitude, name) {
this._id = id;
this._longitude = longitude;
this._latitude = latitude;
this._name = name;
}
Provider.prototype.getId = function() {
return this._id;
}
Provider.prototype.getLatitude = function() {
return this._latitude;
}
Provider.prototype.getLongitude = function() {
return this._longitude;
}
Provider.prototype.getName = function() {
return this._name;
}
Provider.prototype.setId = function(id) {
this._id = id;
}
Provider.prototype.setLatitude = function(value) {
this._latitude = value;
}
Provider.prototype.setLongitude = function(value) {
this._longitude = value;
}
Provider.prototype.setName = function(value) {
this._name = value;
}









XMLRPC._ajaxErrorHandler = function(text) { return true; }
page.m.map = null;
page.m.providers = []
page.m.MAX_LOGO_HEIGHT = 80; // limited by maximal provider info window height
page.m.MAX_DESCRIPTION_CHARS = 250;
page.m.addProvider = function(provider) {
page.m.providers.push(provider);
}
page.m.buildInfoWindowDom = function(provider) {
var div = document.createElement("div");
div.className = "provider_info_window";
var heading = document.createElement("h1");
heading.innerHTML = provider.name;
var logo = document.createElement("img");
logo.className = "logo";
logo.src = provider.logo;
var scale_x = page.m.MAX_LOGO_HEIGHT / provider.logo_width;
var scale_y = page.m.MAX_LOGO_HEIGHT / provider.logo_height;
if (scale_x > 1) { scale_x = 1; };
if (scale_y > 1) { scale_y = 1; };
var scale = scale_x > scale_y ? scale_y : scale_x;
logo.width = provider.logo_width * scale;
logo.height = provider.logo_height * scale;
var description = document.createElement("div");
description.className = "description";
description.innerHTML = provider.description.substr(0, page.m.MAX_DESCRIPTION_CHARS) + "&hellip;";
var moreInfo = document.createElement("a");
moreInfo.className = "moreinfo";
moreInfo.href = provider.link_view;
moreInfo.appendChild(document.createTextNode("Click here for more info"));
moreInfo.target = "blank";
div.appendChild(heading);
div.appendChild(logo);
div.appendChild(description);
div.appendChild(moreInfo);
return div;
}

page.c.addOnLoadHandler(function() {

if (GBrowserIsCompatible()) {
page.m.map = new GMap2($("large_map"));
page.m.map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5, 30)));
page.m.map.addControl(new GMapTypeControl());
page.m.map.addControl(new DragZoomControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5, 5)));
var icon = new GIcon();
icon.image = Links.image("map_marker.png");
icon.shadow = Links.image("map_marker_shadow.png");
icon.iconSize = new GSize(32, 32);
icon.shadowSize = new GSize(32, 32);
icon.iconAnchor = new GPoint(16, 28);
icon.infoWindowAnchor = new GPoint(16, 28);
var provider = page.m.providers.random();
if (provider) {
page.m.map.setCenter(new GLatLng(provider.getLatitude(), provider.getLongitude()), 13);
} else {
page.m.map.setCenter(new GLatLng(0, 0), 13);
};
if (page.m.providers.length > 0) {
var bounds = new GLatLngBounds;
page.m.providers.each(function(provider) {
var latlng = new GLatLng(provider.getLatitude(), provider.getLongitude());
var marker = new GMarker(latlng,
icon);
page.m.map.addOverlay(marker);
GEvent.addListener(marker, "click", function() {
XMLRPC.call(Links.xmlrpc(),
function(response) {
marker.openInfoWindow(page.m.buildInfoWindowDom(response.param));
}, null, null,
"provider.info", [provider.getId()]);
});
bounds.extend(latlng);
});  

page.m.map.setZoom(page.m.map.getBoundsZoomLevel(bounds));
page.m.map.setCenter(bounds.getCenter());
};
};
});


