function tracking() { //lat,lng,time,loc,act -- num,svc,upd
    var tid = document.getElementById('track_id').value;
    var type = document.getElementById('track_type').value;
    clear_all(); sloading();
    var req = get('GET', '/services/tracking.pl?tnumber='+tid.uri()+'&type='+type.uri());
    req.onreadystatechange = function() {
        if (req.readyState != 4) return; if (req.status != 200) return;
        var data = req.responseText;
        if (data == 'FAIL') return;
        var acts = data.split('\n');
        var locs = new Array();
        for (var i = 1; i < (acts.length - 1); i++) {
            var act = acts[i].split('\t');
            var ll = act[0]+','+act[1];
            if (!locs[ll]) { locs[ll] = new Array(); locs[ll][0] = act[3]; locs[ll][1] = act[0]; locs[ll][2] = act[1]; }
            act[2] = act[2].replace(/:\d\d$/, "");
            act[2] = act[2].replace(/^\d\d\d\d-/, "");
            if (!locs[ll][3]) { locs[ll][3] = ''; }
            if (locs[ll][3]) { locs[ll][3] += '<br>'; }
            locs[ll][3] += act[2]+' '+act[4];
        }
        var z = 1;
        for (var k in locs) { add_marker(locs[k][1], locs[k][2], z, locs[k][0], locs[k][3], 1, 0); z++; }
        map.linkicon.set('http://moremap.com/track/'+tid.uri()+'/');
        markers_done();
    }
    req.send(null);
}
function tracked() {
    var req = get('GET', '/services/tracked.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) return; if (req.status != 200) return;
        if (!req.responseText) return;
        var data = req.responseText.split('\n');
        var html = '<table><tr><th>Service</th><th>Tracking Number</th><th>Last Update</th><th>Delivered?</th></tr>';
        for (var i = 0; i < (data.length - 1); i++) {
            var pkg = data[i].split('\t');
            var otyp = pkg[1];
            if (pkg[1] == 'fdx') pkg[1] = 'FedEx'; if (pkg[1] == 'usps') pkg[1] = 'USPS';
            html += '<tr><td>'+pkg[1]+'</td><td><a href="#" onclick="init_clear(\'track_id\');display(\'tracking_box\',1);gE(\'track_type\').selectedIndex=0;gE(\'track_id\').value=\''+pkg[0]+'\';tracking();">'+pkg[0]+'</a></td><td>'+pkg[3]+'</td><td>'+(pkg[2]?'Yes ':'No')+'</td></tr>';
        }
        document.getElementById('extra').innerHTML = html + '</table>';;
        display('extra', 1);
    }
    req.send(null);
}
function movies() {
    var zip = document.getElementById('movies_zip').value;
    if (!zip.match(/^\d{5}$/)) return;
    clear_all(); sloading();
    var req = get('GET', '/services/movies.pl?zip='+zip);
    req.onreadystatechange = function() {
        if (req.readyState != 4) { return; } if (req.status != 200) return;
        var data = req.responseText;
        var locs = data.split('\n\n');
        for (var i = 0; i < (locs.length - 1); i++) {
            var movies = locs[i].split('\n');
            var theater = movies[0].split('\t');
            var html = '<small>'+theater[1]+' [<a href="#" onclick="gE(\'dir_end\').value=\''+theater[1]+'\'">directions</a>]<br>';
            if (theater[2]) html += 'Wheelchair Accesible';
            if (theater[3]) { if (theater[2]) html += ' - '; html += 'Listening Devices Available'; }
            if (theater[2] || theater[3]) html += '<br>';
            html += '</small><br>';
            for (var k = 1; k < movies.length; k++) {
                var movie = movies[k].split('\t');
                html += movie[0]+'<br><small>'+movie[1].replace(/^Rated /, '')+' - '+movie[2]+' - '+movie[3]+'</small><br><br>';
            }
            add_marker(theater[4], theater[5], movies.length-1, theater[0], html, 1, 1);
        }
        map.linkicon.set('http://moremap.com/movies/'+zip+'/');
        markers_done();
    }
    req.send(null);
}
function radio() {
    var zip = document.getElementById('radio_zip').value;
    if (!zip.match(/^\d{5}$/)) return;
    clear_all(); sloading();
    var req = get('GET', '/services/radio.pl?zip='+zip);
    req.onreadystatechange = function() {
        if (req.readyState != 4) return; if (req.status != 200) return;
        var data = req.responseText;
        var locs = data.split('\n');
        for (var i = 0; i < (locs.length - 1); i++) {
            var station = locs[i].split('\t');
            var html = station[0]+' '+station[2]+'<br>'+station[3]+', '+station[4]+'<br>'+station[1];
            add_marker(station[5],station[6], station[2], station[1], html, 4, 1);
        }
        map.linkicon.set('http://moremap.com/radio/'+zip+'/');
        markers_done();
    }
    req.send(null);
}
function traffic() {
    var lc = document.getElementById('traffic_zip').value;
    if (!lc.match(/^\d{5}$/)) return;
    clear_all();
sloading();
            gtraffic.show();
    geocoder.getLatLng(lc, function (point) {
        if (!point) { alert("Cant find that zip!"); }
        else {
            map.setCenter(point, 10);
            map.linkicon.set('http://moremap.com/traffic/'+lc+'/');
        }
        markers_done();
    });
}
function quakes() {
    clear_all();
    sloading();
    var req = get('GET', '/services/quake.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) { return; }
        if (req.status != 200) { return; }
        var quakelist = req.responseText;
        var quakes = quakelist.split('\n');
        for (var i = 0; i < (quakes.length-1); i++) {
            var quake = quakes[i].split('~');
            add_marker(quake[2], quake[3], quake[8], '', quake[5]+'mi '+quake[6]+' of '+quake[7]+'<br>'+quake[0]+' '+quake[1]+'<br>'+quake[2]+' '+quake[3]+'<br>'+quake[8]+' magnitude<br>'+quake[4]+'mi deep', 3);
        }
        map.linkicon.set('http://moremap.com/quakes/');
        markers_done();
    }
    req.send(null);
}
function banks() { //0name,1addr,2city,3state,4zip,5phone,6fax,7email,8url,9lat,10lng
    var zip = document.getElementById('banks_zip').value;
    if (!zip.match(/^\d{5}$/)) return;
    clear_all();
    sloading();
    var req = get('GET', '/services/banks.pl?zip='+zip);
    req.onreadystatechange = function() {
        if (req.readyState != 4) { return; }
        if (req.status != 200) { return; }
        var data = req.responseText;
        var locs = data.split('\n');
        for (var i = 0; i < (locs.length - 1); i++) {
            var bank = locs[i].split('\t');
            var html = bank[1]+'<br>'+bank[2]+', '+bank[3]+' '+bank[4]+'<br><small>[<a href="#" onclick="gE(\'dir_end\').value=\''+bank[1]+' '+bank[2]+', '+bank[3]+' '+bank[4]+'\'">directions</a>]</small><br>'+bank[5];
            if (bank[6]) { html += '<br>Fax: '+bank[6]; }
            if (bank[7]) { html += '<br>'+bank[7]; }
            if (bank[8]) { html += '<br>'+bank[8]; }
            add_marker(bank[9], bank[10], '', bank[0], html, 1, 1);
        }
        map.linkicon.set('http://moremap.com/banks/'+zip+'/');
        markers_done();
    }
    req.send(null);
}
function weather() {
    var state = gE('weather_state').value;
    if (!state.match(/^[A-Z]{2},-?\d+\.\d+,-?\d+\.\d+$/)) return;
    clear_all();
    sloading();
    var req;
    var sdat = state.split(',');
    if (sdat[0] == 'OV') { req = get('GET', '/services/weather.pl?state=ALL'); }
    else { req = get('GET', '/services/weather.pl?state='+sdat[0].uri()); }
    req.onreadystatechange = function() {
        if (req.readyState != 4) { return; }
        if (req.status != 200) { return; }
        var weather = req.responseText;
        var lines = weather.split('\n');
        for (var i = 0; i < (lines.length - 1); i++) {
            var loc = lines[i].split(' ');
            var html = loc[2]+" "+loc[3]+" GMT<br>Temperature: "+loc[4]+"F<br>"+loc[6]+"mi visibility<br>";
            if (loc[7] >= 1) {
                html += parseInt(loc[7])+'mph '+loc[10];
                if (loc[8] >= 1) html += ' ('+parseInt(loc[8])+'mph gusts)';
            } else if (loc[8] >= 1) html += parseInt(loc[8])+'mph '+loc[10]+' gusts';
            add_marker(loc[0], loc[1], Math.round(loc[4])+'F', '', html, 3);
        }
        if (sdat[0] == 'OV') sdat[0] = 'US';
        map.linkicon.set('http://moremap.com/weather/'+sdat[0]+'/');
        markers_done();
    }
    req.send(null);
}
function directions() {
    var from = document.getElementById('dir_start').value; var to = document.getElementById('dir_end').value;
    if (!from || !to) return;
    clear_all(); sloading();
    gdir.load("from: "+from+" to: "+to, { locale: "en_US" });
}
function int_places() {
    var ipb = gE('places_box');
    var req = get('GET', '/services/intplaces.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) return; if (req.status != 200) { eloading(); return; }
        var resp = req.responseText.split('\n');
        var dat = '';
        for (var i = 0; i < (resp.length-1); i++) {
            var pl = resp[i].split('\t');
            var mt = pl[4]; if (mt == 0) mt = 'norm'; else if (mt == 1) mt = 'sat'; else mt = 'hyb';
            dat += '<a id="pop" href="javascript:void(0);" onclick="gotoll('+pl[2]+','+pl[3]+','+pl[5]+",'"+mt+"'"+');" onmouseover="spopup(this,\''+pl[1]+'\')" onmouseout="popup_close()">'+pl[0]+'</a><br>';
        }
        ipb.innerHTML = dat;
    }
    req.send(null);
}
//----------------
function sp_list() {
    sloading();
    gE('splaces_box_list').innerHTML = '';
    var req = get('GET', '/services/savedplaces.pl?action=list');
    req.onreadystatechange = function() { // id,lat,lng,zoom,mtype,name
        if (req.readyState != 4 || req.status != 200) { eloading(); return; }
        var response = req.responseText;
        var resp = response.split('\n');
        if (resp.length > 1) {
            var buf = '<table width="100%">';
            for (var i = 0; i < (resp.length-1); i++) {
                var place = resp[i].split('\t');
                var mtype; if (place[4] == 1) mtype = 'norm'; else if (place[4] == 2) mtype = 'sat'; else mtype = 'hyb';
                buf += '<tr><td><a id="pop" href="#" onclick="gotoll('+place[1]+','+place[2]+','+place[3]+',\''+mtype+'\');add_marker2('+place[1]+','+place[2]+',\''+place[5]+'\');">'+place[5]+'</a></td><td align="right"><small> [ <a href="#" onclick="sp_del('+place[0]+')">X</a> ]</small></td></tr>';
            }
            gE('splaces_box_list').innerHTML = buf+'</table>';
        }
        eloading();
    }
    req.send(null);
}
function sp_del(id) {
    sloading();
    var req = get('POST', '/services/savedplaces.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) return;
        eloading();
        sp_list();
    }
    req.send('action=del&id='+id);
}
var dmarker;
function sp_add(stage,d) {
    if (stage == -1) {
        gE('sp_add_geo_error').innerHTML = '';
        geocoder.getLatLng(d,function(point){if(!point){gE('sp_add_geo_error').innerHTML='Not found.'}else{map.setCenter(point);dmarker.setPoint(point)}});
    } else if (stage == 0) {
        map.removeOverlay(dmarker);
        gE('extra').innerHTML = '';
        display('extra',0);
        if (d) display('splaces_new_but',1,1);
    } else if (stage == 1) {
        clear_all(0,1);
        dmarker = new GMarker(map.getCenter(), {draggable:true});
        GEvent.addListener(dmarker,"dragend",function(){map.panTo(dmarker.getPoint())});
        map.addOverlay(dmarker);
        gE('extra').innerHTML = '\
            Drag the marker on the map to wanted location.<br>\
            You may also enter a location to jump to:<br><input type="text" id="sp_add_geo"> <input type="submit" value="Go" onclick="sp_add(-1,gE(\'sp_add_geo\').value)"><div id="sp_add_geo_error" style="color:#FF0000;font-weight:bold"></div>\
            <a href="#" onclick="sp_add(0,1);">Cancel</a> - <a href="#" onclick="sp_add(2)">Done</a>';
        display('extra',1);
        display('splaces_new_but',0);
    } else if (stage == 2) {
        var point = dmarker.getPoint();
        sp_add(0);
        var zoom = map.getZoom();
        var mtype = map.getCurrentMapType();
        if (mtype == G_NORMAL_MAP) mtype = 1; else if (mtype == G_SATELLITE_MAP) mtype = 2; else mtype = 3;
        gE('splaces_new_info').innerHTML = '('+point.lat()+','+point.lng()+') ['+zoom+']';
        gE('splaces_new_lat').value = point.lat(); gE('splaces_new_lng').value = point.lng(); gE('splaces_new_zoom').value = zoom;
        gE('splaces_new_type').selectedIndex = mtype - 1;
        display('splaces_new',1);
    } else if (stage == 3) {
        sloading();
        var lat = gE('splaces_new_lat').value; var lng =  gE('splaces_new_lng').value; var zoom = gE('splaces_new_zoom').value;
        var type =  gE('splaces_new_type').selectedIndex + 1; var name = gE('splaces_new_name').value;
        var req = get('POST', '/services/savedplaces.pl');
        req.onreadystatechange = function() {
            if (req.readyState != 4 || req.status != 200) { eloading(); return; }
            var response = req.responseText;
            var resp = response.split('\t');
            if (resp.length == 7) sp_list();
            gE('splaces_new_lat').value='';gE('splaces_new_lng').value='';gE('splaces_new_zoom').value='';gE('splaces_new_info').innerHTML='';
            gE('splaces_new_name').value = 'Name...'; display('splaces_new',0); display('splaces_new_but',1);
            sp_list();
        }
        req.send('action=add&zoom='+zoom.uri()+'&mtype='+type+'&lat='+lat.uri()+'&lng='+lng.uri()+'&name='+name.uri());
    }
}
//----------------
