//geo-location-javascript v0.4.8 * http://code.google.com/p/geo-location-javascript/ * Copyright (c) 2009 Stan Wiechers * Licensed under the MIT licenses.
var bb_success;var bb_error;var bb_blackberryTimeout_id=-1;function handleBlackBerryLocationTimeout(){if(bb_blackberryTimeout_id!=-1){bb_error({message:"Timeout error",code:3})}}function handleBlackBerryLocation(){clearTimeout(bb_blackberryTimeout_id);bb_blackberryTimeout_id=-1;if(bb_success&&bb_error){if(blackberry.location.latitude==0&&blackberry.location.longitude==0){bb_error({message:"Position unavailable",code:2})}else{var timestamp=null;if(blackberry.location.timestamp){timestamp=new Date(blackberry.location.timestamp)}bb_success({timestamp:timestamp,coords:{latitude:blackberry.location.latitude,longitude:blackberry.location.longitude}})}bb_success=null;bb_error=null}}var geo_position_js=function(){var pub={};var provider=null;var u="undefined";pub.showMap=function(latitude,longitude){if(typeof(blackberry)!=u){blackberry.launch.newMap({"latitude":latitude*100000,"longitude":-longitude*100000})}else{window.location="http://maps.google.com/maps?q=loc:"+latitude+","+longitude}};pub.getCurrentPosition=function(success,error,opts){provider.getCurrentPosition(success, error,opts)};pub.init=function(){try{if(typeof(geo_position_js_simulator)!=u){provider=geo_position_js_simulator}else if(typeof(bondi)!=u&&typeof(bondi.geolocation)!=u){provider=bondi.geolocation}else if(typeof(navigator.geolocation)!=u){provider=navigator.geolocation;pub.getCurrentPosition=function(success,error,opts){function _success(p){if(typeof(p.latitude)!=u){success({timestamp:p.timestamp,coords:{latitude:p.latitude,longitude:p.longitude}})}else{success(p)}}provider.getCurrentPosition(_success,error,opts)}}else if(typeof(window.blackberry)!=u&&blackberry.location.GPSSupported){if(typeof(blackberry.location.setAidMode)==u){return false}blackberry.location.setAidMode(2);pub.getCurrentPosition=function(success,error,opts){bb_success=success;bb_error=error;if(opts['timeout']){bb_blackberryTimeout_id=setTimeout("handleBlackBerryLocationTimeout()",opts['timeout'])}else{bb_blackberryTimeout_id=setTimeout("handleBlackBerryLocationTimeout()",60000)}blackberry.location.onLocationUpdate("handleBlackBerryLocation()");blackberry.location.refreshLocation()};provider=blackberry.location}else if(typeof(window.google)!="undefined"&&typeof(google.gears)!="undefined"){provider=google.gears.factory.create('beta.geolocation');pub.getCurrentPosition=function(successCallback,errorCallback,options){function _successCallback(p){if(typeof(p.latitude)!="undefined"){successCallback({timestamp:p.timestamp,coords:{latitude:p.latitude,longitude:p.longitude}})}else{successCallback(p)}}provider.getCurrentPosition(_successCallback,errorCallback,options)}}else if(typeof(Mojo)!=u&&typeof(Mojo.Service.Request)!="Mojo.Service.Request"){provider=true;pub.getCurrentPosition=function(success,error,opts){parameters={};if(opts){if(opts.enableHighAccuracy&&opts.enableHighAccuracy==true){parameters.accuracy=1}if(opts.maximumAge){parameters.maximumAge=opts.maximumAge}if(opts.responseTime){if(opts.responseTime<5){parameters.responseTime=1}else if(opts.responseTime<20){parameters.responseTime=2}else{parameters.timeout=3}}}r=new Mojo.Service.Request('palm://com.palm.location',{method:"getCurrentPosition",parameters:parameters,onSuccess:function(p){success({timestamp:p.timestamp,coords:{latitude:p.latitude,longitude:p.longitude,heading:p.heading}})},onFailure:function(e){if(e.errorCode==1){error({code:3,message:"Timeout"})}else if(e.errorCode==2){error({code:2,message:"Position unavailable"})}else{error({code:0,message:"Unknown Error: webOS-code"+errorCode})}}})}}else if(typeof(device)!=u&&typeof(device.getServiceObject)!=u){provider=device.getServiceObject("Service.Location","ILocation");pub.getCurrentPosition=function(success,error,opts){function callback(transId,eventCode,result){if(eventCode==4){error({message:"Position unavailable",code:2})}else{success({timestamp:null,coords:{latitude:result.ReturnValue.Latitude,longitude:result.ReturnValue.Longitude,altitude:result.ReturnValue.Altitude,heading:result.ReturnValue.Heading}})}}var criteria=new Object();criteria.LocationInformationClass="BasicLocationInformation";provider.ILocation.GetLocation(criteria,callback)}}}catch(e){if(typeof(console)!=u){console.log(e)}return false}return provider!=null};return pub;}();
