//Common functions for address fields

var addresses = new Array()
var regionMgr = new RegionManager()

function addressField_onChange(field)
{
	var prefix = field.id.substring(0,field.id.lastIndexOf("_"));
	var delegate = document.getElementById(prefix + "_ClientEventHandler").value;
	try {eval(delegate + "('" + prefix + "')");}
	catch(ex) {/*do nothing*/}
}

function addressFields_onFocus(prefix)
{
	//get first available field
	var field = document.getElementById(prefix + "_AddressName");
	if (!field)
		field = document.getElementById(prefix + "_CompanyName");
	if (!field)
		field = document.getElementById(prefix + "_ContactName");
	if (!field)
		field = document.getElementById(prefix + "_Address1");
	
	//set focus
	if (field)
		field.focus();
}

function addressFields_onLoad(prefix)
{
	addressFields_updateStateFields(prefix);
}

function addressList_onChange(prefix)
{
	var listField = document.getElementById(prefix + "_PreviousAddressList");
	var addressParts = listField.value.split("||");
	var field;

	for (var i=0; i<addressParts.length; i++)
	{
		var values = addressParts[i].split("!!");
		if (values.length == 2)
		{
			switch (values[0])
			{
				case "ID": break;
				case "CPN": field = document.getElementById(prefix + "_CompanyName"); break;
				case "CTN": field = document.getElementById(prefix + "_ContactName"); break;
				case "A1": field = document.getElementById(prefix + "_Address1"); break;
				case "A2": field = document.getElementById(prefix + "_Address2"); break;
				case "C": field = document.getElementById(prefix + "_City"); break;
				case "S": field = document.getElementById(prefix + "_State"); break;
				case "CY": field = document.getElementById(prefix + "_Country"); break;
				case "OS": field = document.getElementById(prefix + "_StateName"); break;
				case "PC": field = document.getElementById(prefix + "_PostalCode"); break;
			}

			if (field)
				field.value = values[1];
		}
	}
}

function addressFields_enable(prefix,enable)
{
	//only enable validators if Address is required
	enable = enable && (document.getElementById(prefix + "_RequiredI").value == "true");

	ValidatorEnable(document.getElementById(prefix + "_Address1Validator"),enable);
	ValidatorEnable(document.getElementById(prefix + "_CityValidator"),enable);
	ValidatorEnable(document.getElementById(prefix + "_PostalCodeValidator"),enable);
	
	if (enable)
		addressFields_updateStateFields(prefix);
	else
	{
		ValidatorEnable(document.getElementById(prefix + "_StateValidator"),enable);
		ValidatorEnable(document.getElementById(prefix + "_OtherStateValidator"),enable);
	}
}

function addressFields_setAddressee(prefix,value)
{
	var field = document.getElementById(prefix + "_ContactName");
	if (field && field.value.length == 0)
		field.value = value;
}

function addressFields_updateStateFields(prefix)
{
	var countryID = document.getElementById(prefix + "_Country").value;
	var stateContainer = document.getElementById(prefix + "_StateContainer");
	var stateValidator = document.getElementById(prefix + "_StateValidator");
	var otherStateContainer = document.getElementById(prefix + "_OtherStateContainer");
	var otherStateValidator = document.getElementById(prefix + "_OtherStateValidator");
	
	//hide all fields, disable validators
	stateContainer.style.display = "none"
	ValidatorEnable(stateValidator,false)
	otherStateContainer.style.display = "none"
	ValidatorEnable(otherStateValidator,false)
	
	var country = regionMgr.regions[countryID];
	if (country && country.regions.length)
	{
		stateContainer.style.display = "block";
		ValidatorEnable(stateValidator,true);
	}
	else
	{
		otherStateContainer.style.display = "block";
		ValidatorEnable(otherStateValidator,true);
	}
}

function country_onChange(field)
{
	var countryID = field.value;
	var country = regionMgr.regions[countryID];
	var prefix = field.id.replace("_Country","");

	if (country)
	{
		if (country.regions.length > 0)
		{
			var stateList = document.getElementById(prefix + "_State")
			if (stateList)
			{
				//clear all existing options
				while (stateList.options.length)
					stateList.options[0] = null;

				//add all states for selected country
				stateList.options.add(new Option("Select a State/Province...",""))
				for (var i=0; i<country.regions.length; i++)
				{
					var state = country.regions[i]
					stateList.options.add(new Option(state.name,state.id))
				}
			}
		}
	}
	addressFields_updateStateFields(prefix);
}

/////////////////////////////////////////////////////////////
// REGION MANAGER CLASS /////////////////////////////////////
/////////////////////////////////////////////////////////////

function RegionManager()
{
	//properties
	this.regions = new Array()
}

function Region(id,parentID,name)
{
	this.id = id
	this.parentID = parentID
	this.parent = regionMgr.regions[parentID]
	this.name = name
	this.regions = new Array()

	if (this.parent)
		this.parent.regions[this.parent.regions.length] = this
}

