/* Copyright (c) 2009-2010 Eduardo Pereira Habkost. Todos os direitos reservados. */

var LANGUAGE="pt-BR";var map;var directions;function mapInitialize(){if(GBrowserIsCompatible()){map=new GMap2(eid("map"));map.addControl(new GLargeMapControl());map.addControl(new GMapTypeControl());map.addControl(new GScaleControl());map.enableScrollWheelZoom();map.enableContinuousZoom();directions=new GDirections(map,eid("route"));}else{window.alert("Infelizmente seu browser não é suportado pelo Google Maps, que é necessário para o Calculador.");eid("map").innerHTML='<p><strong>O seu browser não é <a href="http://maps.google.com.br/support/bin/answer.py?answer=16532&topic=14837">suportado pelo Google Maps</a>, que é necessário para o Calculador de Táxi</strong></p><p>Recomendo o uso do navegador <a href="http://www.getfirefox.com">Firefox</a>.</p>';panic("GBrowserIsCompatible");}}
function FareCalculator(cityName,moneyPrefix)
{var fareArgs={};this.cityName=function(){return cityName;}
this.calculate=function(meters,args)
{var km=meters/1000;return Math.ceil((args.startfare+km*args.perkm)/args.fraction)*args.fraction;}
this.showFareValue=function(type,meters)
{var fare_args=fareArgs[type];var fareline=eid("fare_"+type);var totalelm=eid("total_"+type);var fare=this.calculate(meters,fare_args);fareline.style.display="block";setElemText(totalelm,moneyPrefix+formatMoney(fare));trackEvent(cityName,'calculatedfare',type,meters,fare);}
this.showFareValues=function(meters)
{for(var ftype in fareArgs)
this.showFareValue(ftype,meters);}
this.addFareArgs=function(type,args)
{fareArgs[type]=args;}
this.setFareArgs=function(type,startfare,perkm,fraction)
{var o={startfare:startfare,perkm:perkm,fraction:fraction};this.addFareArgs(type,o);}
this.routesCalculated=function(directions)
{if(directions.getNumRoutes()!=1){panic("directions.getNumroutes is "+directions.getNumRoutes());return;}
var r=directions.getRoute(0)
var dst=r.getDistance();this.showFareValues(dst.meters);showResults(true);}
this.directionWaypoints=function(f,t){return[f,t];}
this.calcAndShow=function(f,t,callback)
{var that=this;directions.clear();var errorListener,loadListener;addOneTimeListeners(directions,{error:pr(function(){var st=directions.getStatus();var desc=geoStatusText(st.code)
var msg="Erro consultando rota.";if(desc)
msg=msg+" "+desc;setElemText(eid("errortitle"),"Erro");setElemText(eid("errormsg"),msg);setElemText(eid("errorinfo"),"Código do erro: ["+st.code+","+st.request+"]");showResults(false);callback('error',st);trackEvent(cityName,'error','directions',st.code,st.request);}),load:pr(function(){that.routesCalculated(directions);callback('load',null);})});hideResults();setStatus("Calculando trajeto...");directions.loadFromWaypoints(this.directionWaypoints(f,t),{locale:LANGUAGE});}};function MaiaFareCalculator(cityName,moneyPrefix)
{this.inheritFrom=FareCalculator;this.inheritFrom(cityName,moneyPrefix);this.calculate=function(meters,args)
{if(meters<args.startmeters)
return args.startfare;var extrameters=meters-args.startmeters;var extrakm=extrameters/1000;var extravalue=Math.ceil((extrakm*args.perkm)/args.fraction)*args.fraction;return args.startfare+extravalue;}
this.setFareArgs=function(type,startfare,startmeters,perkm,fraction)
{var o={startfare:startfare,startmeters:startmeters,perkm:perkm,fraction:fraction};this.addFareArgs(type,o);}
this.directionWaypoints=function(f,t){return[f,t,f];}
this.routesCalculated=function(directions)
{if(directions.getNumRoutes()!=2){panic("directions.getNumroutes is "+directions.getNumRoutes());return;}
var r1=directions.getRoute(0)
var r2=directions.getRoute(1);var dst1=r1.getDistance().meters;var dst2=r2.getDistance().meters;this.showFareValue('t3d',dst1);this.showFareValue('t3n',dst1);this.showFareValue('t5d',dst1+dst2);this.showFareValue('t5n',dst1+dst2);showResults(true);}};function setStatus(s)
{setElemText(eid("statusmsg"),s);eid("statusmsg").style.display="block";}
function clearStatus()
{eid("statusmsg").style.display="none";setElemText(eid("statusmsg"),"");}
function showResults(ok)
{clearStatus();if(ok){eid("results").style.display="block";eid("error").style.display="none";}else{eid("error").style.display="block";eid("results").style.display="none";}
eid("resultbox").style.display="block";}
function hideResults()
{directions.clear();eid("resultbox").style.display="none";}
function geoStatusText(code)
{switch(code){case G_GEO_SERVER_ERROR:return"Error no servidor";case G_GEO_UNKNOWN_ADDRESS:return"Endereço não encontrado";case G_GEO_UNAVAILABLE_ADDRESS:return"Endereço indisponível para consulta";case G_GEO_UNKNOWN_DIRECTIONS:return"O Google Maps não encontrou caminho entre os pontos";default:return null;}}