var colors = [];

colors.push("#000044");
colors.push("#004400");
colors.push("#440000");
colors.push("#440044");
colors.push("#004444");
colors.push("#444400");
colors.push("#000000");

function xmlRequest(req){
    req.request.onreadystatechange = function(){
        if (req.request.readyState == 4) {
            req.success(req.request.responseXML);
        }
    }
    req.request.open(req.method, req.address, true);
    req.request.send(null);
}

function showAllSpots() {
    readFile("spots.xml", function() {
        if (request.readyState == 4) {
            var xmlDoc = request.responseXML;
            var spots = xmlDoc.documentElement.getElementsByTagName("spot");
            var requests = [];
            for (var i = 0; i < spots.length; i++) {
                var marker = spots[i].getElementsByTagName("marker") [0];
                var id = spots[i].getAttribute("id")
                var road = getXmlElementInNode(spots[i], "road", "", "<br/>", "");
                var name = getXmlElementInNode(spots[i], "name", "Submitted by ", "<br/>", "");
                var date = getXmlElementInNode(spots[i], "date", "", "<br/>", "");
                var rating = getXmlElementInNode(spots[i], "rating", "", "", "");
                var icon = rating.indexOf("good") >= 0 ? goodIcon : badIcon;


                var point = new GPoint(parseFloat(marker.getAttribute("lng")),
                    parseFloat(marker.getAttribute("lat")));
                map.addOverlay(createIconMarker(point, icon, road + name + date 
                    + "<a href=\"show_blackspot.php?id=" + id + "\">More info</a>"));
            }
        }
    });
}


function showAllMaps() {
    showAllMaps(getUrlParameter("indexFile"));
}
function showAllMaps(indexFile) {
    readFile("journeys/" + indexFile, function() {
        if (request.readyState == 4) {
            var xmlDoc = request.responseXML;
            var journeys = xmlDoc.documentElement.getElementsByTagName("journey");
            var requests = [];
            for (var i = 0; i < journeys.length; i++) {
                var xmlFileName = journeys[i].getAttribute("filename");
                var journeyRequest = new Request(i, "GET", "journeys/" + xmlFileName, xmlFileName, function(xmlDoc) {
                    var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                    makePolyline(markers, colors[this.instance % colors.length], makeLink(xmlDoc, this.xmlFileName));
                });
                requests.push(journeyRequest);
                xmlRequest(journeyRequest);
            }
        }
    });
}

function showMapsWithCategory(category) {
    showMapsWithCategory(getUrlParameter("indexFile"), category);
}
function showMapsWithCategory(indexFile, category) {
    readFile("journeys/" +indexFile, function() {
        if (request.readyState == 4) {
            var xmlDoc = request.responseXML;
            var journeys = xmlDoc.documentElement.getElementsByTagName(category);
            var requests = [];
            for (var i = 0; i < journeys.length; i++) {
                var xmlFileName = journeys[i].parentNode.getAttribute("filename");
                var journeyRequest = new Request(i, "GET", "journeys/" + xmlFileName, xmlFileName, function(xmlDoc) {
                    var markers = xmlDoc.documentElement.getElementsByTagName("marker");
                    makePolyline(markers, colors[this.instance % colors.length], makeLink(xmlDoc, this.xmlFileName));
                });
                requests.push(journeyRequest);
                xmlRequest(journeyRequest);
            }
        }
    });
}

function Request(instance, method, address, xmlFileName, success) {
    this.request = GXmlHttp.create();
    this.instance = instance;
    this.method = method;
    this.address = address;
    this.xmlFileName = xmlFileName,
    this.success = success;
}
