var xml_request;
var xml_callback;
var route_id="";
var update_interval=5000;
var xml_base_url="/xml.scrx";
var default_entry_id=-1;
var static_route;
var static_stop;

function DomainName()
{    
    return( document.location.host );
}

function Navigate(url)
{
    document.getElementById("MapFrame").src = url;
}


function NavigateTripPlanner()
{
    var frame = document.getElementById("MapFrame")    
    
    if (frame.src && frame.src != "" && frame.src.indexOf("map.scrx") > -1)    
        frame.contentWindow.Content_TripPlanner(false);
    else
    {        
        var url = "http://" + DomainName() + "/map.scrx?domain=" + QueryString("domain");
        
        if (route_id!="")    
            url += "&route=" + route_id;
            
        
        Navigate(url);
    }        

}

var predictions_visible=false;
var prediction_timer=null;



function OnStopChange()
{    
    var stops = document.getElementById("stop_id");  
   
    if (stops.selectedIndex==0)
        UpdateHTML(null,null);
    else
    {
        if (prediction_timer)
        {
            window.clearTimeout(prediction_timer);
            prediction_timer=null;
        }
        
        UpdateArrivals();
    } 
}

function RequestXML(xml_url,callback) 
{            
    xml_url = xml_url + "&hash=" + Math.random();             
    xml_callback=callback;
    
    if (window.XMLHttpRequest) 
    {
        xml_request = new XMLHttpRequest();
        xml_request.onreadystatechange = RequestXML_Check;
        xml_request.open("GET", xml_url, true);
        xml_request.send(null);    
    } 
    else if (window.ActiveXObject) 
    {
        xml_request = new ActiveXObject("Microsoft.XMLHTTP");
        if (xml_request) 
        {
            xml_request.onreadystatechange = RequestXML_Check;
            xml_request.open("GET", xml_url, true);
            xml_request.send();
        }
    }    
}

function RequestXML_Check()
{
    try
    {
        if (xml_request.readyState == 4 && xml_request.status == 200) 
        {                                                 
		    response  = xml_request.responseXML.documentElement;  
		    xml_callback(response);
        }		
    }
    catch (e) {}                
}

function UpdateArrivals()
{
    var route;
    var stop;
    if(static_route == null)
    {
        var routes = document.getElementById("stop_set_id");
        var stops = document.getElementById("stop_id");
        
        if (stops.selectedIndex==0)
            return;
        
        route=routes[routes.selectedIndex].value;
        stop = stops[stops.selectedIndex].value;
    }
    else
    {
        route = static_route;
        stop = static_stop;
    }
    
    var url = xml_base_url + "?mode=arrivals&route=" + route + "&stop=" + stop + "&domain=" + _domain;
    if (loop_dir != "")
        url += "&loop_dir=" + loop_dir;
        
    RequestXML(url,UpdateArrivals_Reply);
}

function UpdateArrivals_Reply(response)
{         
    var show_names=(response.getAttribute("show_names")=="1");
    var xml_arrivals = response.getElementsByTagName("arrival");
    
    var arrivals=[];
    for (i=0; i<xml_arrivals.length; i++)
    {
        var one=xml_arrivals[i];
        var obj = [];
        obj.push(one.getAttribute("value"));
        if (show_names)
            obj.push(one.getAttribute("vehicle"));       
        else
            obj.push("");
                        
        arrivals.push(obj);
    }
    
    UpdateHTML(response,arrivals);    
    
    prediction_timer = window.setTimeout(UpdateArrivals,update_interval);
}


function UpdateHTML(response,predictions)
{
    var html="";
    
    if (response)
    {
        html = "<b>As of " + response.getAttribute("time") + "</b>:<br><br>";
        if (predictions.length>0)
        {
            for (i=0; i<predictions.length && (i<4); i++)
            {
                var class_index = (i==0) ? 1 : 2;
                html += ""
                +"<span class='public_arrivals_arrival" + class_index + "'>";
                var mins = parseInt(predictions[i][0]);
                if (mins==0)
                    html += "arriving";
                else
                {
                    html += predictions[i][0] + "</span>"
                    +"<span class='public_arrivals_arrival_minutes'> minute";
                    if (mins>1) 
                        html += "s";                                       
                }            
                
                html +="</span>";
                if (predictions[i][1]!="")
                    html += "&nbsp;<span class='arriving_vehicle'><br>(Bus " + predictions[i][1] + ")";
                
                html += "<br>"; 
            }
        }
        else
        {
            html += "No predictions available.";    
        }
        
        var has_stop_number = (response.getAttribute("stop_number")!="");
        var has_sms=(_sms != "" && has_stop_number);
        var has_phone=(_phone != "" && has_stop_number);
        
        var icon_size = (has_phone && has_sms) ? "32" : "48";        
        
        html =""
        +"<table style='width:100%'>"
            +"<tr>"
                +"<td class='public_arrivals_heading'>"
                    +"Next vehicles in:"
                +"</td>"
                +"<td class='public_arrivals_heading'>"
                    +"Mobile:"
                +"</td>"                
            +"</tr>"                                    
            +"<tr>"
                +"<td align='center'>"
                    +"<div class='public_arrivals_displaybox'>"
                    + html
                    +"</div>"
                +"</td>"
                +"<td align='center' valign='middle'>"
                    +"<table width='200'>"                    
                        +"<tr>"                        
                            +"<td><img src='/images/mobile_icons/map-" + icon_size + ".gif'></td>"
                            +"<td class='mobile_text'>"
                                +"<u>Mobile Maps</u>: http://" + _domain + "<br>Visit from any mobile phone"
                            +"</td>"
                        +"</tr>";
                        if (has_phone)
                        {
                            html +=
                            "<tr>"                        
                                +"<td><img src='/images/mobile_icons/phone-" + icon_size + ".gif'></td>"
                                +"<td class='mobile_text'>"
                                    +"<u>Call</u>: " + _phone;
                                    if (!override_stops)
                                    {
                                        html += ""
                                
                                        + "<br>Press 0, enter <span class='mobile_stop_number'>stop "
                                        + response.getAttribute("stop_number") + "</span>";
                                    }   
                                    
                                    html += ""                                     
                                +"</td>"                                
                            +"</tr>";
                        }
                        
                        if (has_sms)
                        {
                            html += ""
                            +"<tr>"
                                +"<td><img src='/images/mobile_icons/sms-" + icon_size + ".gif'></td>"
                                +"<td class='mobile_text'>"
                                     +"<u>Text</u>: "
                                     +"<span class='mobile_stop_number'>"
                                     +"&quot;" + _sms + " " + response.getAttribute("stop_number") + "&quot;"
                                     +"</span><br> to 41411"
                                +"</td>"                                                        
                            +"</tr>";
                        }
                        
                        html +=""                            
                    +"</table>"
                +"</td>"            
            +"</tr>"
        +"</table>";
    }        
        

    var td = document.getElementById("arrival_display");    
    td.innerHTML=html;        

}



function QueryString(variable)
{
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
  
  return("");
  
}