;(function(){var VERSION='1.1.0';var NORTH='N';var SOUTH='S';var EAST='E';var WEST='W';var DD_FORMAT_REGEX=/^([+-]?\d{1,3})(.\d+)?$/;var DMS_FORMAT_REGEX=/^[NSEW]?\s*([+-]?\d{1,3})°?\s*(?:(\d{1,2}(?:\.\d+)?)[′'`]?\s*(?:(\d{1,2}(?:\.\d+)?)["″]?\s*)?)?\s*[NSEW]?$/;function magellan(){var args=arguments;var instance=function(){var coordinate=this.coordinate={};if(args.length>=3){coordinate.degrees=parseInt(args[0]);coordinate.minutes=parseInt(args[1]);coordinate.seconds=parseFloat(args[2]);var isPositive=coordinate.degrees>=0} else if(args.length>=1&&typeof args[0]=='string'){var matches;if((matches=args[0].match(DD_FORMAT_REGEX))!=null){coordinate.degrees=parseInt(matches[1]);var decimal=parseFloat(matches[2])||0.0;coordinate.minutes=parseInt(decimal*60);coordinate.seconds=parseFloat(((decimal*60)-coordinate.minutes)*60);}else if((matches=args[0].match(DMS_FORMAT_REGEX))!=null){coordinate.degrees=parseInt(matches[1]);coordinate.minutes=parseFloat(matches[2]||0.0);coordinate.seconds=parseFloat(matches[3]||0.0);var fractional_minutes=coordinate.minutes%1;if(fractional_minutes){coordinate.minutes=coordinate.minutes-fractional_minutes;coordinate.seconds=parseFloat((fractional_minutes*60).toFixed(6));}}} else if(args.length>=1&&typeof args[0]=='number'){coordinate.degrees=parseInt(args[0]);var decimal=Math.abs(parseFloat(args[0])-coordinate.degrees);coordinate.minutes=parseInt(decimal*60);var x=((decimal*60)-coordinate.minutes)*60;if(x<59.99995){coordinate.seconds=parseFloat((x).toFixed(4));} coordinate.seconds=parseFloat((x).toFixed(4));if(coordinate.seconds==60){coordinate.seconds=0;coordinate.minutes+=1;if(coordinate.minutes==60){coordinate.minutes=0;coordinate.degrees+=1;}} var isPositive=args[0]>=0;} if(typeof args[args.length-1]==='string'){var direction=args[args.length-1].toUpperCase().match(/[NSEW]/);if(direction){coordinate.direction=direction[0];var isPositive=(direction==NORTH||direction==EAST)}else{if(coordinate.degrees!==0){var isPositive=coordinate.degrees>=0;}else{if(coordinate.minutes!==0){var isPositive=coordinate.minutes>=0;}else{if(coordinate.seconds!==0){var isPositive=coordinate.seconds>=0;}else{isPositive=true;}}}}} this.toDD=function(){var decimal=coordinate.minutes/60+coordinate.seconds/3600;var formatted;if(coordinate.degrees>=0)formatted=(coordinate.degrees+decimal);else formatted=(coordinate.degrees-decimal);formatted=formatted.toFixed(6);if(coordinate.direction&&(coordinate.direction==SOUTH||coordinate.direction==WEST)&&decimal>0)formatted='-'+formatted;else if(!coordinate.direction&&isPositive===false&&decimal>0)formatted='-'+formatted;return formatted;};this.toDM=function(seperator){var minutes=coordinate.minutes+(coordinate.seconds/60);var components=[Math.abs(coordinate.degrees)+'°',minutes.toFixed(4)+'\'',(coordinate.direction?coordinate.direction:'')];return typeof seperator==='string'?components.join(seperator):components.join('');};this.toDMS=function(seperator){var components=[Math.abs(coordinate.degrees)+'°',coordinate.minutes+'\'',coordinate.seconds.toFixed(4)+'"',(coordinate.direction?coordinate.direction:'')];return typeof seperator==='string'?components.join(seperator):components.join('');};this.latitude=function(){if(coordinate&&Math.abs(coordinate.degrees)<=90&&(Math.abs(coordinate.degrees)!=90||(coordinate.minutes==0&&coordinate.seconds==0.0))&&(coordinate.minutes<60&&coordinate.seconds<60)&&(!coordinate.direction||coordinate.direction==NORTH||coordinate.direction==SOUTH)){if(!coordinate.direction){coordinate.direction=isPositive?NORTH:SOUTH;coordinate.degrees=Math.abs(coordinate.degrees);} return this;} return null;};this.longitude=function(){if(coordinate&&Math.abs(coordinate.degrees)<=180&&(Math.abs(coordinate.degrees)!=180||(coordinate.minutes==0&&coordinate.seconds==0.0))&&(coordinate.minutes<60&&coordinate.seconds<60)&&(!coordinate.direction||coordinate.direction==EAST||coordinate.direction==WEST)){if(!coordinate.direction){coordinate.direction=isPositive?EAST:WEST;coordinate.degrees=Math.abs(coordinate.degrees);} return this;} return null;};this.equals=function(other){return coordinate&&other.coordinate&&coordinate.degrees==other.coordinate.degrees&&coordinate.minutes==other.coordinate.minutes&&coordinate.seconds==other.coordinate.seconds&&coordinate.direction==other.coordinate.direction;};};magellan.version=VERSION;return new instance();} if(typeof define==='function'&&define.amd){define('magellan',function(){return magellan;});}else if(typeof require==='function'&&typeof exports==='object'&&typeof module==='object'){module.exports=magellan;}else{window.magellan=magellan;}})();