pulled = false;
window.onload = function() {
	if(document.getElementById("email")) {
		elemList = document.getElementsByTagName("input");
		
		for(var i = 0; i < elemList.length; i++) {
			if (elemList[i].type != "button") {
				elemList[i].onblur = removeIds;
			}
		}
		
		document.getElementById("email").onblur = checkFields;
		document.getElementById("zip").onblur = checkFields;
		
	}
}

window.onbeforeunload = function() {

	if (document.getElementById("content")) {
		document.getElementById("content").style.display = "block";
		document.getElementById("status").style.display = "none";
	}
}

function checkFields(event) {
	
	if (pulled) {
		removeIds(event);
	}
	
	var email = document.getElementById("email").value;
	var zip = document.getElementById("zip").value;
	
	if (zip != "" && email != "" && !pulled) {
		pulled = true;
		ajax("./dinners/?pull=AJAX&email=" + escape(email) + "&zip=" + escape(zip),null, finishAutoFill);
	}
}

/**
 * Removes the lead and contact id on field blur, but only if data has been pulled and the value has
 * actually changed.
 */
function removeIds(event) {
	var unchanged = false;
	var elemValue = "";
	
	elem = getEventTarget(event);
	
	if (elem.nodeName.toUpperCase() == "SELECT") {
		elemValue = elem.options[elem.selectedIndex].value;
	} else {
		elemValue = elem.value;
	}
	
	if (pulled) {
		if (elem.getAttribute("originalValue") == null) {
			elem.setAttribute("originalValue", "")
		}
		
		unchanged = (elemValue == elem.getAttribute("originalValue"));
		
		if (!unchanged) {
			document.getElementById("contactId").value = "";
			document.getElementById("leadId").value = "";
			pulled = false;
		}
	}
	
	elem.setAttribute("originalValue", elemValue);
}

function finishAutoFill(xmlData) {
	
	person = xmlData.lastChild;
	if (!person) {
		pulled = false;
		return false;
	}
	var contactId = "";
	var leadId = "";
	if (person.nodeName == "contact") {
		contactId = person.getAttribute("id");
	} else {
		leadId = person.getAttribute("id");
	}
	person = person.firstChild;
	
	while (person != null) {
	
		if(person.nodeName == "address") {
			person = person.firstChild;
		}
		curElem = document.getElementById(person.nodeName);
		if (curElem != null && typeof curElem != 'undefined') {
			currentElement = document.getElementById(person.nodeName);
			currentValue = "";
			
			if(person.firstChild) {
					currentValue = person.firstChild.nodeValue;
			}
			
			if (currentElement.nodeName.toUpperCase() == 'SELECT') {
				for (var i = 0; i < currentElement.options.length; i++) {
					if (currentElement.options[i].value == currentValue) {
						currentElement.options[i].selected = true;
						currentElement.selectedIndex = i;
						break;
					}
				}
			} else {
				currentElement.value = currentValue;
			}
			currentElement.setAttribute("originalValue", currentValue);
			currentElement.blur();
		}
		if(person.nextSibling == null && person.nodeName == "address") {
			person = person.parentNode;
		}
		
		person = person.nextSibling;
	}
	
	pulled = true;
	document.getElementById("contactId").value = contactId;
	document.getElementById("leadId").value = leadId;
}

function ajax(url, vars, callbackFunction){
 
        var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
 
        request.open("POST", url, true);
        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
 
        request.onreadystatechange = function(){
 
                if (request.readyState == 4 && request.status == 200) {
 
                        if (request.responseXML){
 
                                callbackFunction(request.responseXML);
                        } else if (request.responseText) {
                        		callbackFunction(request.responseText);
                        }
                }
        }
        request.send(vars);
}

function getEventTarget(e) {
  var targ;
  if (!e) {
    e = window.event;
  }
  if (e.target) {
    targ = e.target;
  } else if (e.srcElement) {
    targ = e.srcElement;
  }
  if (targ.nodeType == 3) { // defeat Safari bug
    targ = targ.parentNode;
  }

  return targ;
}
