123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- if (typeof navigator.geolocation == "undefined" || navigator.geolocation.shim ) { (function(){
- (function() {
-
- if (window.google && google.gears) {
- return;
- }
- var factory = null;
-
- if (typeof GearsFactory != 'undefined') {
- factory = new GearsFactory();
- } else {
-
- try {
- factory = new ActiveXObject('Gears.Factory');
-
- if (factory.getBuildInfo().indexOf('ie_mobile') != -1) {
- factory.privateSetGlobalObject(this);
- }
- } catch (e) {
-
- if ((typeof navigator.mimeTypes != 'undefined') && navigator.mimeTypes["application/x-googlegears"]) {
- factory = document.createElement("object");
- factory.style.display = "none";
- factory.width = 0;
- factory.height = 0;
- factory.type = "application/x-googlegears";
- document.documentElement.appendChild(factory);
- }
- }
- }
-
-
- if (!factory) {
- return;
- }
-
-
-
-
-
- if (!window.google) {
- google = {};
- }
- if (!google.gears) {
- google.gears = {factory: factory};
- }
- })();
- var GearsGeoLocation = (function() {
-
- var geo = google.gears.factory.create('beta.geolocation');
-
- var wrapSuccess = function(callback, self) {
- return function(position) {
- callback(position);
- self.lastPosition = position;
- };
- };
-
-
- return {
- shim: true,
-
- type: "Gears",
-
- lastPosition: null,
-
- getCurrentPosition: function(successCallback, errorCallback, options) {
- var self = this;
- var sc = wrapSuccess(successCallback, self);
- geo.getCurrentPosition(sc, errorCallback, options);
- },
-
- watchPosition: function(successCallback, errorCallback, options) {
- geo.watchPosition(successCallback, errorCallback, options);
- },
-
- clearWatch: function(watchId) {
- geo.clearWatch(watchId);
- },
-
- getPermission: function(siteName, imageUrl, extraMessage) {
- geo.getPermission(siteName, imageUrl, extraMessage);
- }
- };
- });
- var AjaxGeoLocation = (function() {
-
- var loading = false;
- var loadGoogleLoader = function() {
- if (!hasGoogleLoader() && !loading) {
- loading = true;
- var s = document.createElement('script');
- s.src = (document.location.protocol == "https:"?"https://":"http://") + 'www.google.com/jsapi?callback=_google_loader_apiLoaded';
- s.type = "text/javascript";
- document.getElementsByTagName('body')[0].appendChild(s);
- }
- };
-
- var queue = [];
- var addLocationQueue = function(callback) {
- queue.push(callback);
- };
-
- var runLocationQueue = function() {
- if (hasGoogleLoader()) {
- while (queue.length > 0) {
- var call = queue.pop();
- call();
- }
- }
- };
-
- window['_google_loader_apiLoaded'] = function() {
- runLocationQueue();
- };
-
- var hasGoogleLoader = function() {
- return (window['google'] && google['loader']);
- };
-
- var checkGoogleLoader = function(callback) {
- if (hasGoogleLoader()) { return true; }
- addLocationQueue(callback);
-
- loadGoogleLoader();
-
- return false;
- };
-
- loadGoogleLoader();
-
-
- return {
- shim: true,
-
- type: "ClientLocation",
-
- lastPosition: null,
-
- getCurrentPosition: function(successCallback, errorCallback, options) {
- var self = this;
- if (!checkGoogleLoader(function() {
- self.getCurrentPosition(successCallback, errorCallback, options);
- })) { return; }
-
- if (google.loader.ClientLocation) {
- var cl = google.loader.ClientLocation;
-
- var position = {
- coords: {
- latitude: cl.latitude,
- longitude: cl.longitude,
- altitude: null,
- accuracy: 43000,
- altitudeAccuracy: null,
- heading: null,
- speed: null
- },
-
- address: {
- city: cl.address.city,
- country: cl.address.country,
- country_code: cl.address.country_code,
- region: cl.address.region
- },
- timestamp: new Date()
- };
- successCallback(position);
-
- this.lastPosition = position;
- } else if (errorCallback === "function") {
- errorCallback({ code: 3, message: "Using the Google ClientLocation API and it is not able to calculate a location."});
- }
- },
-
- watchPosition: function(successCallback, errorCallback, options) {
- this.getCurrentPosition(successCallback, errorCallback, options);
-
- var self = this;
- var watchId = setInterval(function() {
- self.getCurrentPosition(successCallback, errorCallback, options);
- }, 10000);
-
- return watchId;
- },
-
- clearWatch: function(watchId) {
- clearInterval(watchId);
- },
-
- getPermission: function(siteName, imageUrl, extraMessage) {
-
- return true;
- }
- };
- });
- navigator.geolocation = (window.google && google.gears) ? GearsGeoLocation() : AjaxGeoLocation();
- })();
- }
|