

var US_COUNTRY_CODE = "US";

var CANADA_COUNTRY_CODE = "CA";

var BLOCK_DISPLAY_STYLE = "";

var NO_DISPLAY = "none";

var EMPTY_VALUE = "";



function getProvinceField(form) {

    return form.caProvince ? form.caProvince : null;

}





function getStateValue(form) {

    return form.usState ? form.usState.value : null;

}





function getOtherValue(form) {

    return form.otherState ? form.otherState.value : null;

}





function showCounty(countyId) {

    try {

        var elem = document.getElementById(countyId);

        elem.style.display = BLOCK_DISPLAY_STYLE;

    } catch (e) {

        // yes, we know it's undefined.

    }



}





function hideCounty(countyFieldToSet, countyId) {

    try {

        var elem = document.getElementById(countyId);

        elem.style.display = NO_DISPLAY;



        if (countyFieldToSet) {

            setSubentityValue(EMPTY_VALUE, countyFieldToSet);

        }

    } catch (e) {

        // yes, we know it's undefined.

    }

}





function hideProvince(provinceFieldToSet, countyId, provinceId) {

    if (elem = document.getElementById(provinceId)) {

        elem.style.display = NO_DISPLAY;

    }



    try {

        // why isn't this working?

        //setStateValue(EMPTY_VALUE, false, provinceFieldToSet, countyId);

    } catch (e) {

        // yes, we know it's undefined.

    }

}





function hideOther(otherId) {

    if (elem = document.getElementById(otherId)) {

        elem.style.display = NO_DISPLAY;

    }

}





function hideState(stateFieldToSet, stateId, countyId) {

    try {

        var elem = document.getElementById(stateId);

        elem.style.display = NO_DISPLAY;



        setStateValue(EMPTY_VALUE, false, stateFieldToSet, countyId);

    } catch (e) {

        // yes, we know it's undefined.

    }

}





function showState(stateFieldToSet, countyFieldToSet, stateValue, stateId, countyId) {

    setStateValue(stateValue, true, stateFieldToSet, countyFieldToSet, countyId);



    var elem = document.getElementById(stateId);

    elem.style.display = BLOCK_DISPLAY_STYLE;

}





function showOther(stateFieldToSet, otherValue, countyId, otherId) {

    setStateValue(otherValue, false, stateFieldToSet, countyId);



    var elem = document.getElementById(otherId);

    elem.style.display = BLOCK_DISPLAY_STYLE;

}





function showProvince(stateFieldToSet, provinceFieldToSet, countyId, provinceId) {

    setStateValue(stateFieldToSet.value, false, stateFieldToSet, countyId);



    var elem = document.getElementById(provinceId);

    elem.style.display = BLOCK_DISPLAY_STYLE;

}





function setPrevSubentityValue(value) {

    document.address.prevSubentity.value = value;

}





function checkStates(country, stateFieldToSet, countyFieldToSet, provinceFieldToSet, stateValue, stateId, provinceId, countyId, otherId, otherValue) {

    switch(country.value) {

        case US_COUNTRY_CODE:

            hideProvince(provinceFieldToSet, countyId, provinceId);

            hideOther(otherId);

            showState(stateFieldToSet, countyFieldToSet, stateValue, stateId, countyId);

            showCounty(countyId);

            displaySubentity(countyFieldToSet, stateValue, countyId);

            break;

        case CANADA_COUNTRY_CODE:

            hideState(stateFieldToSet, stateId, countyId);

            hideOther(otherId);

            hideCounty(countyFieldToSet, countyId)

            showProvince(stateFieldToSet, provinceFieldToSet, countyId, provinceId);

            break;

        default:

            hideState(stateFieldToSet, stateId, countyId);

            hideProvince(stateFieldToSet, countyId, provinceId);

            hideCounty(countyFieldToSet, countyId);

            showOther(stateFieldToSet, otherValue, countyId, otherId);

            //setStateValue(EMPTY_VALUE, false, stateFieldToSet, countyId);

    }

}





/*

 * Displays or hides the states county if it exists.

 */

function displaySubentity(countyFieldToSet, stateValue, countyId) {

    var prevSubentity = document.address.prevSubentity.value;

    var selectedEntity = stateValue;



    setPrevSubentityValue(selectedEntity);



    if (EMPTY_VALUE != prevSubentity) {

        try {

            showCounty(countyId);

            var elem = document.getElementById(prevSubentity);

            elem.style.display = NO_DISPLAY;

        } catch (e) {

            // yes, we know it's undefined.

        }

    }



    try {

        var elem = document.getElementById(selectedEntity);

        elem.style.display = BLOCK_DISPLAY_STYLE;



        if (countyFieldToSet) {

            eval('var tempValue = document.address.thisSubentity' + selectedEntity + '.value');

            setSubentityValue(tempValue, countyFieldToSet);

        }

    } catch(e) {

        hideCounty(countyFieldToSet, countyId);

    }

}



function setStateValue(stateValue, doSubentity, stateFieldToSet, countyFieldToSet, countyId) {

    //alert('state='+stateValue+'stateFieldToSet='+stateFieldToSet.name);

    stateFieldToSet.value = stateValue;



    // pretty much a hack.

    if (doSubentity && countyFieldToSet) {

        displaySubentity(countyFieldToSet, stateValue, countyId);

    } else {

        try {

            var elem = document.getElementById(countyId);

            elem.style.display = NO_DISPLAY;

        } catch (e) {

            // yes, we know it's undefined.

        }

    }

}





function setSubentityValue(subentityValue, countyFieldToSubmit) {

    countyFieldToSubmit.value = subentityValue;

}





function initializeDisplay(thisState, thisProvince, stateFieldToSet, customerCounty, countyFieldToSet, provinceFieldToSet, stateValue, countyId, thisOther, otherValue) {

    if (BLOCK_DISPLAY_STYLE == thisState) {

        setStateValue(stateValue, false, stateFieldToSet, countyFieldToSet, countyId);

        setPrevSubentityValue(stateValue);



        try {

            var elem = document.getElementById(stateValue);

            elem.style.display = BLOCK_DISPLAY_STYLE;



            showCounty(countyId);

            try {

                if (0 < customerCounty.length) {

                    countyFieldToSet.value = customerCounty;



                    displaySubentity(countyFieldToSet, stateValue, countyId);

                }

            } catch (e) {

                // yes, we know it's undefined.

            }

        } catch(e) { }

    } else if (BLOCK_DISPLAY_STYLE == thisProvince) {

        if (provinceFieldToSet) {

            setStateValue(provinceFieldToSet.value, false, stateFieldToSet, countyFieldToSet, countyId);

        }



    } else if (BLOCK_DISPLAY_STYLE == thisOther) {

        setStateValue(otherValue, false, stateFieldToSet, countyFieldToSet, countyId);



    } else {

        //setStateValue(EMPTY_VALUE, false, stateFieldToSet, countyFieldToSet, countyId);



    }

}
