var req;
var isIE = false;
var cancel = false;
var session_count = 0;

function loadXMLDoc (url, el) {
	req = false;
	
	//if (window.XMLHttpRequest && !(window.ActiveXObject)) {
	if (window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch (e) {
			req = false;
		}
	} else if (window.ActiveXObject) {
		isIE = true;
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				req = false;
			}
		}
	}
	
	if (req) {
		switch (el.name) {
			case "make_id":
				req.onreadystatechange = processMakeChange;
				break;
			case "type_id":
				req.onreadystatechange = processTypeChange;
				break;
			case "province_select":
				req.onreadystatechange = processProvinceChange;
				break;
		}
		req.open("GET", url, true);
		req.send("");
	}
}

function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "n/a";
    }
}

function processMakeChange () {
	// only if req shows "loaded"
	if (req.readyState == 4) {
		// only if OK
		if (req.status == 200) {
			clearMenu(document.getElementById("model_id"));
			listModels();
			document.getElementById("model_wait").style.display = "none";
			document.getElementById("model_id").disabled = false;
		} else {
			alert("There was a problem building the models menu.\n" + req.statusText);
		}
	}
}

function processProvinceChange () {
	// only if req shows "loaded"
	if (req.readyState == 4) {
		// only if OK
		if (req.status == 200) {
			clearMenu(document.getElementById("area"));
			listCities();
			document.getElementById("area_wait").style.display = "none";
			document.getElementById("area").disabled = false;
		} else {
			alert("There was a problem building the models menu.\n" + req.statusText);
		}
	}
}

function processTypeChange () {
	if (req.readyState == 4) {
		if (req.status == 200) {
			clearMenu(document.getElementById("make_id"));
			listMakes();
			document.getElementById("make_wait").style.display = "none";
			document.getElementById("make_id").disabled = false;
		} else {
			alert("There was a problem building the models menu.\n" + req.statusText);
		}
	}
}

function clearMenu (select) {
	while (select.length > 1) {
		select.remove(1);
	}
}

function appendToSelect(select, value, content) {
    var opt;
    opt = document.createElement("option");
    opt.value = value;
    opt.appendChild(content);
    select.appendChild(opt);
}

function insertSeparator (select) {
	appendToSelect(select, "", document.createTextNode(""));
}

function listModels () {
	var select = document.getElementById("model_id");
	var p = req.responseXML.getElementsByTagName("model");
	
	var models = Array(p.length);
	for (var i=0; i < p.length; i++) {
		var id = getElementTextNS("", "id", p[i], 0);
		var name = getElementTextNS("", "name", p[i], 0);
		models[i] = new Array(id, name);
	};

	insertSeparator(select); // between static and models
	
	for (var i=0; i < models.length; i++) {
		appendToSelect(select, models[i][0], document.createTextNode(models[i][1]));
	};
}

function listCities () {
	var select = document.getElementById("area");
	var p = req.responseXML.getElementsByTagName("city");
	
	var cities = Array(p.length);
	for (var i=0; i < p.length; i++) {
		var id = getElementTextNS("", "id", p[i], 0);
		var name = getElementTextNS("", "name", p[i], 0);
		cities[i] = new Array(id, name);
	};
	
	insertSeparator(select);
	
	for (var i=0; i < cities.length; i++) {
		appendToSelect(select, cities[i][0], document.createTextNode(cities[i][1]));
	};
}

function listMakes () {
	var select = document.getElementById("make_id");
	var p = req.responseXML.getElementsByTagName("make");
	
	var makes = Array(p.length);
	for (var i=0; i < p.length; i++) {
		var id = getElementTextNS("", "id", p[i], 0);
		var name = getElementTextNS("", "name", p[i], 0);
		makes[i] = new Array(id, name);
	};
	
	insertSeparator(select);
	
	for (var i=0; i < makes.length; i++) {
		appendToSelect(select, makes[i][0], document.createTextNode(makes[i][1]));
	};
}

function menuChanged (el) {
	resetColor(el);
	
	var make_menu = document.getElementById("make_id"); var make_id = make_menu[make_menu.selectedIndex].value;
	var type_menu = document.getElementById("type_id"); var type_id = type_menu[type_menu.selectedIndex].value;
	var province_menu = document.getElementById("province_select"); var province_id = province_menu.value;
	var model_menu = document.getElementById("model_id");
	
	if (el[el.selectedIndex].value == "") {
		el.selectedIndex = 0;
	}
	
	if (el == type_menu) {
		if (type_id != "") {
			disableMenu(make_menu);
			disableMenu(model_menu);
			document.getElementById("make_wait").style.display = "inline";
			var url = "vehicleMakes.php?tid=" + type_id;
			loadXMLDoc(url, el);
		} else {
			disableMenu(make_menu);
			disableMenu(model_menu);
		}
	} else if (el == make_menu) {
		if (type_id != "" && make_id != "") {
			disableMenu(model_menu);
			document.getElementById("model_wait").style.display = "inline";
			var url = "vehicleModels.php?mid=" + make_id + "&tid=" + type_id;
			loadXMLDoc(url, el);
		} else {
			disableMenu(model_menu);
		}
	} else if (el == province_menu) {
		if (province_id != "") {
			disableMenu(document.getElementById("area"));
			document.getElementById("area_wait").style.display = "inline";
			var url = "cities.php?id=" + province_id;
			loadXMLDoc(url, el);
		}
	}
}

function array_search (needle, haystack) {
	var idx = -1;
	for (var i=0; i < haystack.length; i++) {
		if (haystack[i] == needle) idx = i;
	};
	
	return idx;
}

function resetColor (el) {
	el.className = "required";
}

function disableMenu (select) {
	select.selectedIndex = 0;
	select.disabled = true;
}

function validateInput2 (f) {
	return true;
}

function validateInput (f) {
	var required_elements = Array("year", "type_id", "make_id", "model_id", "odometer", "price", "description",
		"name", "phone", "email", "password", "area_id", "province_select");
	
	if (f.elements['session_pic'].value == "NO") required_elements.push("picture");
	
	var r = true;
	
	if (isNaN(f.elements['odometer'].value)) {
		f.elements['odometer'].className = "required_empty";
		r = false;
	} else {
		f.elements['odometer'].className = "required";
	}
	
	if (f.elements['password'].length < 6) {
		f.elements['password'].className = "required_empty";
		r = false;
	} else {
		f.elements['password'].className = "required";
	}

	// check for empty required elements	
	for (var i=0; i < f.elements.length; i++) {
		if (array_search(f.elements[i].name, required_elements) > -1) {
			if (f.elements[i].value == "") {
				f.elements[i].className = "required_empty";
				r = false;
			} else {
				f.elements[i].className = "required";
			}
		}
	}

	if (isNaN(f.elements['price'].value) || f.elements['price'].value < 3999) {
		f.elements['price'].className = "required_empty";
		document.getElementById("price_note").style.color = "#cf1023";
		document.getElementById("price_note").style.fontWeight = "bold";
		r = false;
	} else {
		f.elements['price'].className = "required";
	}
	
	if (f.elements['phone'].value.replace(/\D/g, "").length != 10) {
		f.elements['phone'].className = "required_empty";
		r = false;
	} else {
		f.elements['phone'].className = "required";
	}
	
	if (r) document.getElementById("please_wait").style.display = "block";
	
	return r;
}

function agreeToTerms(e) {
	// alert(e.form.action);
	// return false;
	return true;
	if (e.elements['checkbox'].checked) {
		e.form.submit();
	} else {
		alert("You must agree to the terms by clicking the checkbox");
	}
}

function changePicture (el) {
	document.getElementById("sess_pic").className = "invisible";
	document.getElementById("session_pic").value = "NO";
	document.getElementById("picture").className = "";
	document.getElementById("hide_session_picture").className = "invisible";
	document.getElementById("picture_note").className = "";
}

function isNumber (evt) {
	evt = (evt) ? evt : window.event;
	if (evt.metaKey || evt.shiftKey || evt.ctrlKey || evt.altKey) { return true; }
	if (evt.keyCode == 8) { return true; }
	if (evt.keyCode == 9 || evt.charCode == 9) { return true; }
	
	if ((evt.charCode >= 48 && evt.charCode <= 57) || (evt.keyCode >= 48 && evt.keyCode <= 57)) {
		return true;
	} else {
		return false;
	}
}

function numbersOnly (el) {
	el.value = el.value.replace(/\D/g, "");
}

function isPhoneNumber (evt) {
	evt = (evt) ? evt : window.event;
	if (evt.metaKey || evt.ctrlKey || evt.altKey) { return true; }
	if (evt.keyCode == 8) { return true; }
	if (evt.keyCode == 9 || evt.charCode == 9) { return true; }
	
	if ((evt.charCode >= 48 && evt.charCode <= 57) || (evt.keyCode >= 48 && evt.keyCode <= 57) || (evt.keyCode == 45 || evt.charCode == 45)) {
		return true;
	} else {
		return false;
	}
}

function formatPhoneNumber (el) {
	// replace "1234567890" with "123-456-7890"
	el.value = el.value.replace(/\D/g, "").replace(/(\d{3})(\d{3})(\d)/, "$1-$2-$3");
}

function addPicturePicker () {
	var count = 0;
	//count = session_count;
	var f = document.getElementById("vehicle_form");
	
	for (var i=0; i < f.length; i++) {
		if (f[i].type == "file") count++;
	};
	
	if (count < 5) {
		var el = document.createElement("input");
		el.setAttribute("type", "file");
		el.setAttribute("name", "picture"+(count+1));
		el.setAttribute("id", "picture"+(count+1));
	
		var im = document.getElementById("add_picture");
		im.parentNode.insertBefore(document.createElement("br"), im);
		im.parentNode.insertBefore(el, im);
	}
	
	if (++count == 5) {
		im.style.display = "none";
	}
}

function removePictures () {
	document.getElementById("sess_pic").style.display = "none";
	document.getElementById("sess_pic").parentNode.className = "";
	document.getElementById("session_pic").value = "NO";
	document.getElementById("picture").style.display = "inline";
	document.getElementById("clear_session").value = "YES";
	
	session_count = 0;
	
	var l = document.getElementById("remove_pictures");
	l.href = "javascript:addPicturePicker();";
	l.innerHTML = "Add another picture";
	l.id = "add_picture";
}


