blob: 2a51c2539d63e386a42cbab3cc64c24d8ee70e2d [file] [log] [blame]
//
// javascript-mobile-desktop-geolocation
// https://github.com/estebanav/javascript-mobile-desktop-geolocation
//
// Copyright J. Esteban Acosta VillafaƱe
// Licensed under the MIT licenses.
//
// Based on Stan Wiechers > geo-location-javascript v0.4.8 > http://code.google.com/p/geo-location-javascript/
//
// Revision: $Rev: 01 $:
// Author: $Author: estebanav $:
// Date: $Date: 2012-09-07 23:03:53 -0300 (Fri, 07 Sep 2012) $:
function handleBlackBerryLocationTimeout(){if(bb.blackberryTimeoutId!=-1){bb.error({message:"Timeout error",code:3})}}function handleBlackBerryLocation(){clearTimeout(bb.blackberryTimeoutId);bb.blackberryTimeoutId=-1;if(bb.success&&bb.error){if(blackberry.location.latitude==0&&blackberry.location.longitude==0){bb.error({message:"Position unavailable",code:2})}else{var e=null;if(blackberry.location.timestamp){e=new Date(blackberry.location.timestamp)}bb.success({timestamp:e,coords:{latitude:blackberry.location.latitude,longitude:blackberry.location.longitude}})}bb.success=null;bb.error=null}}var bb={success:0,error:0,blackberryTimeoutId:-1};var geoPosition=function(){var e={};var t=null;var n="undefined";var i="http://freegeoip.net/json/?callback=JSONPCallback";e.getCurrentPosition=function(e,n,r){t.getCurrentPosition(e,n,r)};e.jsonp={callbackCounter:0,fetch:function(e,t){var n="JSONPCallback_"+this.callbackCounter++;window[n]=this.evalJSONP(t);e=e.replace("=JSONPCallback","="+n);var r=document.createElement("SCRIPT");r.src=e;document.getElementsByTagName("HEAD")[0].appendChild(r)},evalJSONP:function(e){return function(t){e(t)}}};e.confirmation=function(){return confirm("This Webpage wants to track your physical location.\nDo you allow it?")};e.init=function(){try{var s=typeof navigator.geolocation!=n;if(!s){if(!e.confirmation()){return false}}if(typeof geoPositionSimulator!=n&&geoPositionSimulator.length>0){t=geoPositionSimulator}else if(typeof bondi!=n&&typeof bondi.geolocation!=n){t=bondi.geolocation}else if(s){t=navigator.geolocation;e.getCurrentPosition=function(e,r,i){function s(t){var r;if(typeof t.latitude!=n){r={timestamp:t.timestamp,coords:{latitude:t.latitude,longitude:t.longitude}}}else{r=t}e(r)}t.getCurrentPosition(s,r,i)}}else if(typeof window.blackberry!=n&&blackberry.location.GPSSupported){if(typeof blackberry.location.setAidMode==n){return false}blackberry.location.setAidMode(2);e.getCurrentPosition=function(e,t,n){bb.success=e;bb.error=t;if(n["timeout"]){bb.blackberryTimeoutId=setTimeout("handleBlackBerryLocationTimeout()",n["timeout"])}else{bb.blackberryTimeoutId=setTimeout("handleBlackBerryLocationTimeout()",6e4)}blackberry.location.onLocationUpdate("handleBlackBerryLocation()");blackberry.location.refreshLocation()};t=blackberry.location}else if(typeof Mojo!=n&&typeof Mojo.Service.Request!="Mojo.Service.Request"){t=true;e.getCurrentPosition=function(e,t,n){parameters={};if(n){if(n.enableHighAccuracy&&n.enableHighAccuracy==true){parameters.accuracy=1}if(n.maximumAge){parameters.maximumAge=n.maximumAge}if(n.responseTime){if(n.responseTime<5){parameters.responseTime=1}else if(n.responseTime<20){parameters.responseTime=2}else{parameters.timeout=3}}}r=new Mojo.Service.Request("palm://com.palm.location",{method:"getCurrentPosition",parameters:parameters,onSuccess:function(t){e({timestamp:t.timestamp,coords:{latitude:t.latitude,longitude:t.longitude,heading:t.heading}})},onFailure:function(e){if(e.errorCode==1){t({code:3,message:"Timeout"})}else if(e.errorCode==2){t({code:2,message:"Position unavailable"})}else{t({code:0,message:"Unknown Error: webOS-code"+errorCode})}}})}}else if(typeof device!=n&&typeof device.getServiceObject!=n){t=device.getServiceObject("Service.Location","ILocation");e.getCurrentPosition=function(e,n,r){function i(t,r,i){if(r==4){n({message:"Position unavailable",code:2})}else{e({timestamp:null,coords:{latitude:i.ReturnValue.Latitude,longitude:i.ReturnValue.Longitude,altitude:i.ReturnValue.Altitude,heading:i.ReturnValue.Heading}})}}var s=new Object;s.LocationInformationClass="BasicLocationInformation";t.ILocation.GetLocation(s,i)}}else{e.getCurrentPosition=function(t,n,r){e.jsonp.fetch(i,function(e){t({timestamp:e.timestamp,coords:{latitude:e.latitude,longitude:e.longitude,heading:e.heading}})})};t=true}}catch(o){if(typeof console!=n)console.log(o);return false}return t!=null};return e}()