//Update country and state options via non-ajax call
function update_location_options(type, country_selected) {
	var country_div = 'country', state_field = 'state_field', state_div = 'state';
	if(type == 'billing') {
		country_div = 'b_country', state_field = 'b_state_field', state_div = 'b_state';
	}
	if(!country_selected) {
		country_selected = $('value_' + country_div).value;
	}
	if(country_selected == '') {
		country_selected = 'US';
	}
	var match = 'none', state_selected = $('value_' + state_div).value;
	if(country_selected != $('value_' + country_div).value) {
		state_selected = '';
	}

	var set_dropdown = function(el, options, selected) {
		try {
		el.options.length = 0;
		for(var i = 0; i < options.length; i++) {
			el.options[i] = new Option(options[i].display,options[i].value);
			if (el.options[i].value == selected) el.options[i].selected = true;
		}
		} catch(e) { alert(e.message) }
	};

	if (country_selected == 'US' || country_selected == 'CA') {
		set_dropdown($(country_div), default_countries, country_selected);
	}
	else {
		set_dropdown($(country_div), other_countries, country_selected);
	}
	for(var i=0; i<state_map.length;i++) {
		if(country_selected == state_map[i][0]) {
			match = i;
		}
	}
	var div = $(state_field);
	while(div.hasChildNodes())
		div.removeChild(div.firstChild);
	if(match != 'none') {
		select_box = document.createElement('select');
		select_box.id = state_div;
		select_box.name = state_div;
		$(div).appendChild(select_box);
		set_dropdown($(state_div), state_map[match][1], state_selected);
	} else {
		input_box = document.createElement('input');
		input_box.id = state_div;
		input_box.name = state_div;
		input_box.value = state_selected;
		input_box.size = 20;
		input_box.maxlength = 250;
		$(div).appendChild(input_box);
	}
	return;
}

function initiate_panel(type) {
	// Without use of the overlay_manager, Safari chokes because the panel
	// is not automatically focused
	if(!YAHOO.yui_activity.overlay_manager)
		YAHOO.yui_activity.overlay_manager = new YAHOO.widget.OverlayManager(null, {});
	
	panel = YAHOO.yui_activity.overlay_manager.find(type + '_panel');
	var new_panel;
	if(!panel) {
		new_panel = true;
		panel = new YAHOO.widget.Panel(type+'_panel', {
			width:"461px",
			visible:false,
			zindex:9999,
			modal:true,
			constraintoviewport:true,
			effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration:.5}
		});
		YAHOO.yui_activity.overlay_manager.register(panel);
	}

	yd.setStyle(type + '_panel', 'display', '');
	yd.setStyle(type, 'display', '');

	YAHOO.yui_activity.overlay_manager.focus(panel);
	panel.hideMask();
	panel.render();

	ye.addListener(type + "_cancel", "click", function() { 
		back(panel);
		select_address(type, 0);
	});
	ye.addListener(type + "_close", "click", function() { 
		back(panel); 
		select_address(type, 0);
	});
	if(new_panel)
		ye.addListener(panel.mask, "click", function() { back(panel) });
	return panel;
}

function setPanelPosition(type, page, button) {
	var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
	var panel = YAHOO.yui_activity.overlay_manager.find(type + '_panel');
	var posX = (yd.getClientWidth() - $(panel.id).offsetWidth) / 2;
	var posY = (yd.getClientHeight() - $(panel.id).offsetHeight) / 2;
	panel.cfg.setProperty('y', parseInt(posY, 10));
	if(button) {
		var popup_posY = yd.getY(button) - 20;
		if(scrollY > yd.getY(button) - $('popup_corner').offsetHeight) {
			yd.setStyle('popup_corner', 'display', 'none');
		} else {
			yd.setY($('popup_corner'), popup_posY);
		}
		panel.cfg.setProperty('x', yd.getX(button) + $(button).offsetWidth - 5); 
	} else {
		panel.cfg.setProperty('x', parseInt(posX, 10));
	}
	return;
}
	
function get_cgi(option, type) {
	var fields = '';
	var default_field = '';
	if(type == 'billing') {
		fields = 'b_nickname b_fname b_lname b_company b_address1 b_address2 b_city b_state b_zip b_country b_phone b_nickname_editing'.split(' ');
		default_field = 'default_billing';
	} else {	
		fields = 's_nickname fname lname company address1 address2 city state zip country phone_day s_nickname_editing'.split(' ');
		default_field = 'default_shipping';
	}
	var cgi_args = '';
	for(var i = 0; i< fields.length; i++) {
		if(type == 'billing') {
			cgi_args += '&' + fields[i].replace('b_', '');
		} else {
			cgi_args += '&' + fields[i].replace('s_', '');
		}
		cgi_args += '=' + $(fields[i]).value;
	}
	if($(default_field)) {
		cgi_args += '&set_default='+$(default_field).value;
	}
	return cgi_args;
}

function clear_panel(type) {
	var div = $(type + '_panel');
	if(div) {
		while(div.hasChildNodes())
			div.removeChild(div.firstChild);
	}
	return;
}

function populate_panel(option, type, page, on_error) {
	try {
		YAHOO.util.History.navigate('app', type);
	} catch(e) {}

	document.body.style.cursor = 'wait';
	clear_panel(type);
	div_panel = document.createElement("div");
	div_panel.id = type;
	$(type + '_panel').appendChild(div_panel);

	var ajax_call = '/' + catalog + '/' + page + '/ajax/populate_' + type + '_panel.html';
	var country, nickname, div, nickname_div;
	if(type == 'billing') {
		country = 'b_country';
		nickname = 'b_nickname_editing';
		nickname_div = 'b_nickname';
		div = 'billing';
	} else {
		country = 'country';
		nickname = 's_nickname_editing';
		div = 'shipping';
		nickname_div = 's_nickname';
	}
	ye.addListener(country, 'change', function() {
		update_location_options(type, $(country).value);
	});
	yc.delayedAsyncRequest(
		'POST',
		ajax_call,
		{   success: function(r) { 
				$(div).innerHTML = r.responseText;
				update_location_options(type);
				var button;
				if(page == 'checkout') {
					button = option + '_' + type + '_button';
				} 
				var panel = initiate_panel(type);
				setPanelPosition(type, page, button);
				panel.show();
				document.body.style.cursor = 'default';
				panel.showMask();
			},
			failure: function(r) {
				document.body.style.cursor = 'default';
				ajax_error(r, 'Your address information could not be populated.  Please try again.');
			},
			timeout: ajax_timeout
		},
		'option=' + option + '&type=' + type + '&' + nickname_div + '=' + $(nickname).value + '&on_error=' + on_error
	);
	return; 
}

function back() {
	var state = YAHOO.util.History.getCurrentState('app');
	if(state != 'start') window.history.back();
}

//This function makes the back button cancel ajax calls
function hide(obj)
{
	obj = YAHOO.yui_activity.overlay_manager.find(obj);
	if (obj) {
		obj.hide();
		obj.hideMask();
		return true;
	}
	return false;
}
