/**
 * auto_address.js
 *
 * @package auto_address
 * @copyright Copyright 2008 E2Info (http://zencart.e2info.com)
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: auto_address.js 5379 2008-06-04 05:13:22Z haining $
 */

var xmlHttp = getXmlHttpObject();

addEvent(window, 'load', findpostcode);

var postcode_element;
var state_element;
var city_element;
var street_address_element;
var lastzip;
var popupdiv;

function findpostcode() {
	postcode_element = document.getElementById("postcode");
	state_element = document.getElementById('state');
	city_element = document.getElementById('city');
	street_address_element = document.getElementById('street-address');
	if ((postcode_element)&&(state_element)&&(city_element)&&(street_address_element)) {
		postcode_element.onkeyup = getAddress;
		postcode_element.onkeydown = moveArrow;
	}
}

function getAddress() {
	if (postcode_element.value != lastzip) {
		postcode_element.onblur = "";
		postcode_element.onfocus = "";
		postcode_element.value = postcode_element.value.replace(/^[ ]+|[ ]+$/g, '');
	    var zip = postcode_element.value;
	    if (zip.length >= 1) {
			ajaxRequest("zipinfo.php?z=" + escape(zip), "GET", handleHttpResponse);
			lastzip = postcode_element.value;
		}
	}
}

var currentidx = -1;
var listlength = 0;
var lastidx = -1;
function moveArrow() {
	if (listlength <= 0)
		return;
	if ((popupdiv != null)&&(popupdiv.style.display == "block")) {
		var code = event.keyCode;
		var moved = false;
		lastidx = currentidx;
		if (code == 38) { //up
			if (currentidx > 0)
				currentidx--;
			else
				currentidx = listlength - 1;
			moved = true;
		} else if (code == 40) { //down
			if (currentidx < listlength - 1)
				currentidx++;
			else
				currentidx = 0;
			moved = true;			
		} else if (code == 13) { //enter
			link_element = document.getElementById("adr" + currentidx);
			if (link_element) {
				eval(link_element.href);
			}
			event.cancelBubble = true;
			event.returnValue = false;
			return;
		}
		if (moved&&(currentidx != lastidx)) {
			if (lastidx >= 0) {
				link_element = document.getElementById("adr" + lastidx);
				if (link_element)
					link_element.className = "";
			}
			link_element = document.getElementById("adr" + currentidx);
			if (link_element)
				link_element.className = "address_high";
			lastidx = currentidx;
		}
	}
}

function moveMouse() {
	if (lastidx >= 0) {
		link_element = document.getElementById("adr" + lastidx);
		if (link_element)
			link_element.className = "";
	}
}

function handleHttpResponse() {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
		var addrs = xmlHttp.responseText;
		var data = addrs.split("|");
		if ((data)&&(data.length >= 4)) {
			if (data.length <= 5) {
			    var prefdata = data[0];
			    var citydata = data[1];
			    var towndata = data[2];
			    var fullzip = data[3];
			    setAddress(prefdata, citydata, towndata, fullzip);
			} else { //multiple address create a popup
				postcode_element.onblur = postcodeBlur;
				postcode_element.onfocus = postcodeFocus;
				if (popupdiv == null) {
					popupdiv = document.createElement('div');   
					popupdiv.id = "address_select";
					var offset = cumulativeOffset(postcode_element);
					popupdiv.style.left = offset[0]+"px";   
					popupdiv.style.top = (offset[1]+postcode_element.offsetHeight) + "px";
					popupdiv.style.width = postcode_element.offsetWidth + "px";
					parentNode = postcode_element.parentNode;
					parentNode.appendChild(popupdiv);
				}
				popupdiv.innerHTML = "";
				popupdiv.style.display = 'block';
				currentidx = 0;
				listlength = 0;
				lastidx = -1;
				
	    		for(var i = 0; i < data.length - 2; i+=4) {
				    var prefdata = data[i];
				    var citydata = data[i+1];
				    var towndata = data[i+2];
				    var fullzip = data[i+3];
	
				    var menuitem = "<a id = 'adr" + listlength + "' class='' onmousemove='moveMouse();' href=\"javascript:setAddress('" + prefdata + "','" + 
				    	citydata + "','" + towndata + "','" + fullzip + "')\">" + prefdata + citydata + towndata + "</a><br/>";
					popupdiv.innerHTML = popupdiv.innerHTML + menuitem;
					listlength++;       
	    		}
			}
		}
    }
}

function setAddress(prefdata, citydata, towndata, fullzip){
    city_element.value = citydata;
    street_address_element.value = towndata;
    if (state_element.selectedIndex) {
	    for(var i = 0; i < state_element.length; i++)
	    {
	        var opt = state_element.options[i];
	        if (opt.text == prefdata) {
	        	state_element.selectedIndex = i;
	        	break;
	        }	
	    }
    } else
    	state_element.value = prefdata;
    postcode_element.value = fullzip;
    street_address_element.focus();
    hidePopupDiv();
}

function postcodeFocus() {
	if (popupdiv != null) {
		popupdiv.style.display = 'block';
	}
}

function postcodeBlur() {
	setTimeout(hidePopupDiv, 700);
}

function hidePopupDiv() {
	if (popupdiv != null) {
		popupdiv.style.display = 'none';
	}
}
