
var datex   = 'Unable to contact server.';
var datep   = '';
var message = 'Ontario gas price in cents per liter:\n\n';

var ont     = '91.9';  // average price in Ont
var ca      = '91.9';  // user saved Cdn price

var ny      = '2.58';  // average price in NY
var us      = '2.58';  // user saved US price

var savmode = 0;
var animode = 0;
var liters = 0;
var ccost = 0;
var toll = 3.75;
var usx = '1.05';
var uusx = 1.05;
var uscost = 0;
var cardfee = 3.0;
var travelcost = 0.96;

var iPhone = ( navigator.userAgent.toLowerCase().search("ipod") > -1 ) ||
             ( navigator.userAgent.toLowerCase().search("iphone") > -1 );

window.onload = function () 
    {
    if (typeof(localStorage) != 'undefined')
        {
//        localStorage.removeItem('ca');
//        localStorage.removeItem('usx');
//        localStorage.removeItem('uusx');
//        localStorage.removeItem('datex');
//        localStorage.removeItem('datep');
//        localStorage.removeItem('ont');
//        localStorage.removeItem('liters');
//        localStorage.removeItem('ny');
//        localStorage.removeItem('toll');
//        localStorage.removeItem('cardfee');
//        localStorage.removeItem('travelcost');

        if ( localStorage.ca ) 
           {
           $('cappg').value = localStorage.ca;
           ca = 1*localStorage.ca;
           }
        if ( localStorage.usx )  
           {
           $('usx').value = localStorage.usx;
           usx = localStorage.usx;
           }
        if ( localStorage.uusx )  
           {
           $('usx').value = localStorage.uusx;
           }
        if ( localStorage.datex )  datex = localStorage.datex;
        if ( localStorage.datep)  datep = localStorage.datep;
        if ( localStorage.ont )  ont = 1*localStorage.ont;
        if ( localStorage.ny)  ny = 1*localStorage.ny;
        if ( localStorage.us)  us = 1*localStorage.us;
        if ( localStorage.liters )  liters = 1*localStorage.liters;
        if ( localStorage.toll)  toll = 1*localStorage.toll;
        if ( localStorage.cardfee )  cardfee = 1*localStorage.cardfee;
        if ( localStorage.travelcost )  travelcost = 1*localStorage.travelcost;
        }
    else
        {
        $('cappg').value = ca;
        $('usx').value = usx;
        }
    if ( navigator.onLine )
        {
        $("online").innerHTML = 'Online';
        ajax();
        }
    else
        {
        $("online").innerHTML = 'Offline';
        $('ad').innerHTML = '<center><a href="http://mwebapp.com/eb"><img style="margin:0" src="eb.png"></a></center>';
        if ( liters == 0 ) // offline and no localStorage...
           {
           liters = 30;
           usx = uusx;
           $('usx').value = uusx;
           $('cappg').value = ca;
           }
        }
    calus(0);
    setTimeout('window.scrollTo(0, 1)', 200 );
    setTimeout('window.scrollTo(0, 1)', 2500 );
    window.applicationCache.addEventListener("updateready", updateCache, false);
    };

function updateCache()
    {
    window.applicationCache.swapCache();
    }

function setusx()
    {
    if ( confirm ('1 US Dollar in Loonies.\n\n'+usx+'\n\n'+ datex) )
       {
       $('usx').value = usx;
       uusx = usx;
       $('cappg').value = ca;
       calus(1);
       resetsav();
       instacalc();
       }
    }
function changeusx()
    {
    $('cappg').value = ca;
    calus(1);
    resetsav();
    instacalc();
    }
function setca()
    {
    if ( confirm( message+datep+'\n\n'+ont ) )
       {
       $('cappg').value = ont;
       ca = ont;
       resetsav();
       calus(1);
       instacalc();
       }
    }
function calca(set)
    {
    uusx = $('usx').value;
    us = $('usppg').value;
    $('usppg').value = (us*1).toFixed(3);
    var price = ( uusx * us * 0.264172052);

    if ( price < 1.0 )  
       {
       $('cappg').value = ( price * 100).toFixed(1);
       message = 'Ontario gas price in cents per liter:\n\n';
       }
    else   
       {
       $('cappg').value = price.toFixed(2);
       message = 'Ontario gas price in dollars per liter:\n\n';
       }
    setTimeout('window.scrollTo(0, 1)', 100 );
    if ( set )
       {
       us = $('usppg').value;
       if (typeof(localStorage) != 'undefined')
          localStorage.us = us;
       }
    }
function setus()
    {
    if ( confirm('NY gas price in dollars per gallon:\n\n' +datep+ '\n\n'+ ny) )
       {
       $('usppg').value = ny;
       us = ny;
       calca(1);
       instacalc();
       }
    }
function changeus()
    {
    resetsav();
    calca(1);
    instacalc();
    }
function changeca()
    {
    resetsav();
    calus(1);
    instacalc();
    }
function calus(set)
    {
    uusx = $('usx').value;
    if ( $('cappg').value > 500) $('cappg').value = $('cappg').value / 10;

    var price = ( (1/uusx) * $('cappg').value / 0.264172052);
    if ( price > 100 ) $('usppg').value = (price/100).toFixed(3);
    else $('usppg').value = (price*1.0).toFixed(3);

    message = 'Ontario gas price in dollars per liter:\n\n';
    if ( $('cappg').value > 20 )
       {
       $('cappg').value = ($('cappg').value * 1.0 ).toFixed(1);
       message = 'Ontario gas price in cents per liter:\n\n';
       }
    if ( $('cappg').value < 25.0 )
       {
       $('cappg').value = ($('cappg').value * 100 ).toFixed(1);
       message = 'Ontario gas price in cents per liter:\n\n';
       }
    setTimeout('window.scrollTo(0, 1)', 100 );
    if ( set )
       {
       ca = $('cappg').value;
       if (typeof(localStorage) != 'undefined')
          localStorage.ca = ca;
       }
    }
function ajax()
   {
   var getusx = new XMLHttpRequest();
   getusx.open("POST", "http://mwebapp.com/bordergas/cad.php?usx", true);
   getusx.send();
   getusx.onreadystatechange = function() 
      {
      if( getusx.readyState == 4 )
         { 
         if ( getusx.status == 200 )
             {
             $('usx').style.opacity = 0.0;
             usx = xml('usx', getusx.responseText);
             datex = xml('datex', getusx.responseText);
             datep = xml('datep', getusx.responseText);
             ont = xml('ont', getusx.responseText);
             ca = ont;
             ny = xml('ny', getusx.responseText); 
             us = ny;
             if (typeof(localStorage) != 'undefined')
                {
                localStorage.usx = usx;
                localStorage.datex = datex;
                localStorage.datep = datep;
                localStorage.ont   = ont;
                localStorage.ny    = ny;
                }
             setTimeout('animate()', 500 );
             }
         else
             {
             console.log('server error: '+getusx.readyState+'-'+getusx.status+'-'+getusx.responseText);
             }
         }
      }
   setTimeout('window.scrollTo(0, 1)', 200 );
   }

function animate()
   {
   animode++;
   if ( animode == 1 )
      {
      $('usx').value = usx;
      $('usx').style.opacity = 1.0;
      $('cappg').style.opacity = 0.0;
      bubble(110,100,30,200,'Average Ontario Price',true,false);
      }
   if ( animode == 2 )
      {
      $('cappg').value = ont;
      calus(0);
      $('cappg').style.opacity = 1.0;
      setTimeout('animate()', 2500 );
      return;
      }
   if ( animode == 3 )
      {
      bubble(180,100,30,200,'Average New York Price',true,false);
      $('usppg').style.opacity = 0.0;
      }
   if ( animode == 4 )
      {
      $('usppg').value = ny;
      calca(0);
      $('usppg').style.opacity = 1.0;
      }
   if ( animode == 5 )
      {
      if ( liters > 0 )
         {
         $('save').innerHTML = '<a href="javascript:sav1(0)">Liters needed:</a>';
         $('savecalc').value = liters;
         }
      $('savecalc').style.opacity = 1.0;
      setTimeout('instacalc()',2100);
      return;
      }
   if ( animode > 0 )
      setTimeout('animate()', 1000 );
   }

function resetsav()
    {
    $('save').innerHTML = '<a href="javascript:sav1(0)">Is it worth a trip?</a>';
    $('savecalc').value = '?' ;
    $('savecalc').style.opacity = 1.0;
    savmode = 0;
    animode = -1;
    }

function instacalc()
    {
    $('savecalc').style.opacity = 0.0;
    if ( liters > 0 )
       setTimeout('instacalc2()', 500 );
    else 
       {
       resetsav();
       bubble(160,80,100,200,'<br>Touch questions<br>to enter parameters<br>and calculate savings.',false,true);
       }
    }

function instacalc2()
    {
    ccost = ca * liters / 100;
    totalcost = toll + travelcost + ((1*cardfee+100)/100)*uusx * us * liters * 0.264172052;
    $('savecalc').value = (ccost -  totalcost).toFixed(2) ;
    $('save').innerHTML = '<a href="javascript:sav1(0)">You can save:</a>';
    $('savecalc').style.opacity = 1.0;
    $('savecalc').readOnly = true;
    }

function sav1(c)
   {
   animode = c;
   $('calc').style.opacity = 0.0;
   setTimeout('sav2()', 500 );
   hide_bubble();
   }
function bubble(top,left,height,width,text,autohide,pointer)
   {
   $('bubble').style.top = top;
   $('bubble').style.left = left;
   $('bubble').style.height = height;
   $('bubble').style.width = width;  
   if ( pointer )
      {
      $('bubble').innerHTML = '<span class="point"></span>'+text; 
      $('bubble').firstChild.style.top = height+10;
      }
   else
      {
      $('bubble').innerHTML = text; 
      }   
   $('bubble').style.visibility = 'visible';
   $('bubble').style.opacity = 0.9;
   $('bubble').style.zIndex = 500;
   if ( autohide ) setTimeout( 'hide_bubble()',2000);
   }
function hide_bubble()  // beware hiding second call of bubble() - must delay until gone...
   {
   $('bubble').style.opacity = 0.0;
   setTimeout( 'hide_bubble2()',500);
   }
function hide_bubble2()
   {
   $('bubble').style.visibility = 'hidden';
   $('bubble').style.zIndex = -500;
   }

function sav2()
   {
   savmode++;

   if ( savmode == 1 )
      {
      $('save').innerHTML = '<a href="javascript:sav1(0)">Liters needed?</a>';
      $('savecalc').value = liters;
      $('savecalc').readOnly = false;
      }
   if ( savmode == 2 )
      {
      liters = $('savecalc').value;
      $('save').innerHTML = '<a href="javascript:sav1(0)">Canada (&cent;/liter)?</a>';
      $('savecalc').value = (ca*1.0).toFixed(1);
      }
   if ( savmode == 3 )
      {
      ca = $('savecalc').value;
      ccost = ca * liters / 100;
      $('save').innerHTML = '<a href="javascript:sav1(0)">Fillup in Canada:</a>';
      $('savecalc').value = (ccost*1.0).toFixed(2);
      $('savecalc').readOnly = true;
      }
   if ( savmode == 4 )
      {
      $('save').innerHTML = '<a href="javascript:sav1(0)">US $/gal?</a>';
      $('savecalc').value = (us*1.0).toFixed(3);
      $('savecalc').readOnly = false;
      }
   if ( savmode == 5 )
      {
      us = $('savecalc').value;
      uscost = us * liters * 0.264172052; 
      $('save').innerHTML = '<a href="javascript:sav1(0)">Fillup in US $:</a>';
      $('savecalc').value = (uscost).toFixed(2);
      $('savecalc').readOnly = true;
      }
   if ( savmode == 6 )
      {
      $('savecalc').readOnly = false;
      $('save').innerHTML = '<a href="javascript:sav1(0)">Bank or card fee:</a>';
      $('savecalc').value = (1*cardfee).toFixed(1) + '%';
      }
   if ( savmode == 7 )
      {
      cardfee = $('savecalc').value;
      cardfee = cardfee.replace(/[^0-9\.]+/g,'');
      $('save').innerHTML = '<a href="javascript:sav1(0)">Bridge toll:</a>';
      $('savecalc').value = toll;
      }
   if ( savmode == 8 )
      {
      toll = 1* $('savecalc').value;
      $('save').innerHTML = '<a href="javascript:sav1(0)">Travel expense:</a>';
      $('savecalc').value = (1.0*travelcost).toFixed(2);
      }
   if ( savmode == 9 )
      {
      travelcost = 1* $('savecalc').value;
      $('save').innerHTML = '<a href="javascript:sav1(0)">US fillup (C $)</a>';
      var totalcost = toll + travelcost + ((1*cardfee+100)/100)*uusx * uscost;
      $('savecalc').value = (1.0*totalcost).toFixed(2);
      }
   if ( savmode == 10 )
      {
      $('save').innerHTML = '<a href="javascript:sav1(0)">You can save:</a>';
      $('savecalc').value = (ccost -  $('savecalc').value).toFixed(2) ;
      $('savecalc').readOnly = true;
      animode = 0;
      savmode = 0;
      }
   $('calc').style.opacity = 1.0;
   if (typeof(localStorage) != 'undefined')
      {
      localStorage.liters     = liters;
      localStorage.toll       = toll;
      localStorage.cardfee    = cardfee;
      localStorage.travelcost = travelcost;
      }
   if ( animode > 0 )   setTimeout('sav1( animode )', 1000 );
   }


function $(id) { return document.getElementById(id); }

function xml( s, x )  // return m from x = <s>m</s>
   {
   var r = new RegExp("<"+s+"[^>]*>(.*?)</"+s+">");
   var m = (r.exec(x))[1];
   return m;
   }

