function start() {
    getVehicles();
}

function Nation() {
    this.vehicles = new Array();
}
Nation.prototype.addVehicle = function(vehicle) {
    this.vehicles[ this.vehicles.length] = vehicle;
}

function Vehicle(make) {
    this.make = make;
    this.models = new Array();
}
Vehicle.prototype.addModel = function(model) {
    this.models[ this.models.length ] = model;
}

var Nation = new Nation();

function getVehicles() {
    var url = 'http://protein.informatics.indiana.edu/newpdb/searchTools.jsp?type=vehicleList&nation=Germany';
    var vehicleXML = getHttpXml();
    vehicleXML.onreadystatechange = function() {
        if (vehicleXML.readyState == 4) {
            if (vehicleXML.status == 200) {
                var xml = vehicleXML.responseXML;
                var xml = xml.getElementsByTagName("vehicleList")[0];
                for (i = 1; i < xml.childNodes.length; i++) {
                    var make = xml.childNodes[i];
                    var vehicle = new Vehicle( make.childNodes[0].childNodes[0].nodeValue);
                    for (j = 1; j < make.childNodes.length; j++) {
                        var model = make.childNodes[j];
                        vehicle.addModel( (model.hasChildNodes() ? model.childNodes[0].nodeValue : model.nodeValue))
                    }
                    Nation.addVehicle(vehicle);               
                }
            } else {
                alert("Error getting vehicle list. HTML Status: "+vehicleXML.status+"\nCheck input.jsp");
            }
        }
    };
    vehicleXML.open("GET", url, true);
    vehicleXML.send(null);
}

	function showNationMenu() {

}
function showUnitMenu() {

}
function showMakeList() {
    var list = document.getElementById("makeListList");
    if (list.childNodes.length == 0) {
        for (i = 0; i < Nation.vehicles.length; i++) {
            var el = document.createElement("li");
            el.appendChild( document.createTextNode( Nation.vehicles[i].make ));
            el.setAttribute("id", Nation.vehicles[i].make);
            list.appendChild( el );
			el.setAttribute( (window.ActiveXObject ? "className" : "class"), "pullDown");
			el.onmouseover = function() {
				showMakeList();
				this.setAttribute( (window.ActiveXObject ? "className" : "class"), "pullDownSelect");
			}
			el.onmouseout = function() {
				hideMakeList();
				this.setAttribute( (window.ActiveXObject ? "className" : "class"), "pullDown");
			}
            el.onclick = function() {
                var field = document.getElementById("makeSearch");
                while( field.childNodes.length > 0) {
                    field.removeChild( field.childNodes[0] );
                }
                field.appendChild( document.createTextNode(this.getAttribute("id")));
				field = document.getElementById("modelSearch");
				while( field.hasChildNodes() ) {
					field.removeChild( field.childNodes[0] );
				}
				var v = getVehicle( this.getAttribute("id"));
				genModelList( v );
				document.getElementById("modelHeaderDiv").style.background="url('img/arrow.jpg') no-repeat right"
                hideMakeList(this);
            }   
        }
    }
    
    var menu = document.getElementById("makeListDiv");
    var header = document.getElementById("makeHeader");
    menu.style.top = (+findAbsY(header))+"px";
    menu.style.left = (+findAbsX(header)+header.offsetWidth +"px");
    menu.style.visibility = "visible";	
}

function hideMakeList(el) {
    var menu = document.getElementById("makeListDiv");
    menu.style.visibility = "hidden";
}

function showModelList() {
	var make = document.getElementById("makeSearch")
	if ( make.hasChildNodes() ) {
		var menu = document.getElementById("modelListDiv");
		var header = document.getElementById("modelHeader");
		menu.style.top = (+findAbsY(header))+"px";
		menu.style.left = (+findAbsX(header) +header.offsetWidth+"px");
		menu.style.visibility = "visible";
	}
}
function hideModelList() {
	var menu = document.getElementById("modelListDiv");
	menu.style.visibility = "hidden";
}
function genModelList(vehicle) {
	var v = vehicle;
	var models = vehicle.models;
	var list = document.getElementById("modelListList");
	while( list.hasChildNodes()) {
		list.removeChild( list.childNodes[0] );
	}
	for (i = 0; i < models.length; i++) {
		var el = document.createElement("li");
		el.appendChild( document.createTextNode( models[i] ));
		el.setAttribute("id", models[i]);
		list.appendChild( el );
		el.setAttribute( (window.ActiveXObject ? "className" : "class"), "pullDown");
		el.onmouseover = function() {
			showModelList();
			this.setAttribute( (window.ActiveXObject ? "className" : "class"), "pullDownSelect");
		}
		el.onmouseout = function() {
			hideModelList();
			this.setAttribute( (window.ActiveXObject ? "className" : "class"), "pullDown");
		}
		el.onclick = function() {
			var field = document.getElementById("modelSearch");
			while( field.childNodes.length > 0) {
				field.removeChild( field.childNodes[0] );
			}
			field.appendChild( document.createTextNode(this.getAttribute("id")));
			hideModelList();
		}   
	}
}

function getVehicle(makeName) {
	for (i = 0; i < Nation.vehicles.length; i++) {
		if (Nation.vehicles[i].make == makeName) {
			return Nation.vehicles[i];
		}
	}
	return null;
}

function getHttpXml() {
    if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else {
        alert("Your browser does not support DOM");
    }
}

function findAbsX(obj) {
    var leftOff = 0;
    if (obj.offsetParent) {
	    while (obj.offsetParent) {
		    leftOff += obj.offsetLeft
		    obj = obj.offsetParent;
	    }
    }
    else if (obj.x) {
	    leftOff += obj.x;
    }
    return leftOff;
}

function findAbsY(obj) {
    var topOff = 0;
    if (obj.offsetParent) {
	    while (obj.offsetParent) {
		    topOff += obj.offsetTop
		    obj = obj.offsetParent;
	    }
    }
    else if (obj.y) {
	    topOff += obj.y;
    }
    return topOff;
}
