function focusCursor(){
	document.search_vendors.zip_code.focus();
}


function isNumeric(sText) {
	var ValidChars = "0123456789.";
	var IsNumber = true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++) {
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}

//	this function was being called onBlur for zip code
//	this caused some problems so it is now a no-op
//	when the user hits enter, checkSubmit() will be invoked
//	that should take care of things
function showCategories(){
return false;
	if ( validateZipCode() ) return false;
	doShowCategories();
}

function doShowCategories() {
	var zip_code = $("zip_code").value;
	var form = document.search_vendors;
	$("status_msg").innerHTML = "";
	$("cat_msg").innerHTML = "";
	$("msg").innerHTML = "";
	$("status_msg").innerHTML = "Looking for services for zip code " +zip_code;
	new Ajax.Request('/Search/Categories', {
		parameters:'zip_code='+zip_code,
		method:'get',
		onSuccess:showCatSelect
	});		
}

function validateZipCode() {
	var form = document.search_vendors;
	if ( isNotEmpty(form.zip_code) == false) {
		alert("Please enter a 5 digit zip code. \n");
		return true;
	}
	if (isNumeric(form.zip_code.value) == false){
		alert("Please enter only numbers. \n");
		return true;
	}
	if (form.zip_code.value.length != 5){
		alert("Please enter a 5 digit zip code. \n");
		return true;
	}
}

function checkSubmit(){
	if ( validateZipCode() ) return true;
	doShowCategories();
	return false;
		
}

function clearSubmit(){
	var tableDiv = $("categories");
	if(tableDiv.hasChildNodes()) {
		var c = tableDiv.childNodes[0];
		tableDiv.removeChild(c);
	}
	var tableDiv2 = $("services");
	if(tableDiv2.hasChildNodes()) {
		var c2 = tableDiv2.childNodes[0];
		tableDiv2.removeChild(c2);
	}
	$("cat_msg").innerHTML = "";
	$("msg").innerHTML = "";
}

var showCatSelect= function (t) {
	$("status_msg").innerHTML = "";
	ready = true;
	var xmlDoc = t.responseXML.documentElement;
	var errCode = xmlDoc.getElementsByTagName("errcode");
	var errCodeNode = errCode[0].childNodes[0];

	var errMsg = xmlDoc.getElementsByTagName("errmsg");
	var errMsgNode = errMsg[0].childNodes[0];

	// undefined for Firefox, null for Safari
	if(typeof(errCodeNode) != 'undefined' && errCodeNode != null) {
		var errcode = errCodeNode.nodeValue;
	}
	if(typeof(errMsgNode) != 'undefined' && errMsgNode != null) {
		var errmsg = errMsgNode.nodeValue;
	}
	if(errcode == 9) {
		showLogin(xmlDoc, errmsg);
	}
	else {
		// undefined for Firefox, null for Safari
		if(errcode != 0) {
			$("status_msg").innerHTML = "ERROR! "+errmsg;
		}
		else {
			$("cat_msg").innerHTML = errmsg;
		}
		var tableDiv = $("categories");
		if(tableDiv.hasChildNodes()) {
			var c = tableDiv.childNodes[0];
			tableDiv.removeChild(c);
		}
		var tableDiv2 = $("services");
		if(tableDiv2.hasChildNodes()) {
			var c2 = tableDiv2.childNodes[0];
			tableDiv2.removeChild(c2);
		}		
		var servicesElement = xmlDoc.getElementsByTagName("categories_list");
		if(typeof(servicesElement) != 'undefined' && servicesElement != null) {
			for (var i = 0; i < servicesElement.length; i++) {
				var select = document.createElement("select");
				select.setAttribute("name", "category");
				select.setAttribute("id", "category");
				select.onchange=function(){showServices()};
				var cNode = servicesElement[i];
				var optionEle = document.createElement("option");
				optionEle.setAttribute("value", "");
				var optionVal = document.createTextNode("Select...");
				optionEle.appendChild(optionVal);
				select.appendChild(optionEle);
				for (var x = 0; x < cNode.childNodes.length; x++) {
					var currNode = cNode.childNodes[x];
					var optionEle = document.createElement("option");
					if(typeof(currNode) != 'undefined' && currNode != null) {
						var nNode = cNode.childNodes[x].childNodes[0];
						if(typeof(nNode) != 'undefined' && nNode != null) {
							var value = nNode.nodeValue;
							var att = currNode.attributes;
							var attItem = att.item(0);
							var attVal = attItem.nodeValue;
							optionEle.setAttribute("value", attVal);
							var optionVal = document.createTextNode(value);
							optionEle.appendChild(optionVal);
						}
					}
					select.appendChild(optionEle);
				}
			}
			tableDiv.appendChild(select);
			document.search_vendors.category.focus();
		}
	}
}   

function showServices(){
	$("status_msg").innerHTML = "";
	var category = $("category").value;
	var zip_code = $("zip_code").value;
	var form = document.search_vendors;
	if (isNotEmpty(form.category) == true){	
		$("status_msg").innerHTML = "Looking for services for category " +category;
		new Ajax.Request('/Search/Services', {
			parameters:'category='+category+'&zip_code='+zip_code,
			method:'get',
			onSuccess:showSelect
		});	
	}
	else {
		var tableDiv = $("services");
		if(tableDiv.hasChildNodes()) {
			var c = tableDiv.childNodes[0];
			tableDiv.removeChild(c);
		}	
	}
}

var showSelect= function (t) {
	$("status_msg").innerHTML = "";
	ready = true;
	var xmlDoc = t.responseXML.documentElement;
	var errCode = xmlDoc.getElementsByTagName("errcode");
	var errCodeNode = errCode[0].childNodes[0];

	var errMsg = xmlDoc.getElementsByTagName("errmsg");
	var errMsgNode = errMsg[0].childNodes[0];

	// undefined for Firefox, null for Safari
	if(typeof(errCodeNode) != 'undefined' && errCodeNode != null) {
		var errcode = errCodeNode.nodeValue;
	}
	if(typeof(errMsgNode) != 'undefined' && errMsgNode != null) {
		var errmsg = errMsgNode.nodeValue;
	}
	if(errcode == 9) {
		showLogin(xmlDoc, errmsg);
	}
	else {
		// undefined for Firefox, null for Safari
		if(errcode != 0) {
			$("status_msg").innerHTML = "ERROR! "+errmsg;
		}
		else {
			$("msg").innerHTML = errmsg;
		}
		var tableDiv = $("services");
		if(tableDiv.hasChildNodes()) {
			var c = tableDiv.childNodes[0];
			tableDiv.removeChild(c);
		}

		var servicesElement = xmlDoc.getElementsByTagName("services_list");
		if(typeof(servicesElement) != 'undefined' && servicesElement != null) {
			for (var i = 0; i < servicesElement.length; i++) {
				var select = document.createElement("select");
				select.setAttribute("name", "service");
				var cNode = servicesElement[i];
				for (var x = 0; x < cNode.childNodes.length; x++) {
					var currNode = cNode.childNodes[x];
					var optionEle = document.createElement("option");
					if(typeof(currNode) != 'undefined' && currNode != null) {
						var nNode = cNode.childNodes[x].childNodes[0];
						if(typeof(nNode) != 'undefined' && nNode != null) {
							var value = nNode.nodeValue;
							var att = currNode.attributes;
							var attItem = att.item(0);
							var attVal = attItem.nodeValue;
							optionEle.setAttribute("value", attVal);
							var optionVal = document.createTextNode(value);
							optionEle.appendChild(optionVal);
						}
					}
					select.appendChild(optionEle);
				}
			}
			tableDiv.appendChild(select);
		}
	}
}   

var search_vendors = document.search_vendors;

function checkInput(form){

	var tableDiv = $("categories");
	if(!tableDiv.hasChildNodes()) {
		checkSubmit();
		document.search_vendors.zip_code.focus();
		return;
	}



	form = document.search_vendors;
	if ( (typeof form.category) == "undefined" ) {
		alert("Please select a service category. \n");
		return;
	}
	if (isNotEmpty(form.category) == false){
		alert("Please select a service category. \n");
		return;
	}
	document.search_vendors.submit();
	return true;
}

function isDateFormat(elm){
	var pattern = /[0-9]+\/[0-9]+\/[0-9]{4}/;
	if (pattern.test(elm.value)){
		return true;
	}
	else {
		return false;
	}
}

function isDate(elm){
	var user_date = elm.value;
	var my_date = elm.value.split('/');
	var month = my_date[0];
	var day = my_date[1];
	var year = my_date[2];
	d = new Date();
	var this_year = d.getFullYear();
	var next_year = d.getFullYear() + 1;
	if((month < 1) || (month > 12) || (day < 1) || (day > 31) || (year < this_year) || (year > next_year)){
		return false;
	}
	else {
		return true;
	}
}


function isInt(elm){
	var pattern = /[0-9]+/;
	if (pattern.test(elm.value)){
		return true;
	}
	else {
		return false;
	}
}

function isNotEmpty(elm){
	if (elm.value.length){
		return true;
	}
	else {
		return false;
	}
}
